# HG changeset patch
# User Darren Salt <linux@youmustbejoking.demon.co.uk>
# Date 1228306522 0
# Node ID 32d1164037363d489c5fd5f4610b893079f39329
# Parent  c39f99383fab736f60347ff98594b5616148f01e
Avoid multiple instantiations if ~/.gxine is missing.

diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@ 0.5.904: 2008/??/??
 	* Cope better with invalid UTF-8 when adding text to log buffers.
 	* Properly encode name & password for HTTP auth. (xine-lib 1.2)
 	* If the user cancels the HTTP auth dbox, don't re-ask if repeating.
+	* Avoid multiple instantiations if ~/.gxine is missing.
 
 0.5.903: 2008/06/12
 	* Apply auto-detection of DVD and VCD images to files & directories
diff --git a/src/server.c b/src/server.c
--- a/src/server.c
+++ b/src/server.c
@@ -40,7 +40,7 @@
 #define LOG
 */
 
-#define SOCKET_FILENAME "%s/.gxine/socket"
+#define SOCKET_LEAFNAME	"socket"
 #define BUF_SIZE        1024
 
 static int       gxsocket;
@@ -183,8 +183,7 @@ static __attribute__ ((noreturn)) void *
 
 void server_setup (void)
 {
-  char filename[FILENAME_MAX];
-  snprintf (filename, sizeof (filename), SOCKET_FILENAME, getenv ("HOME"));
+  char *filename = get_config_filename (SOCKET_LEAFNAME);
   if (strlen (filename) >= sizeof (((struct sockaddr_un *)0)->sun_path))
   {
     fputs (_("server: name too long - gxine_client will not be able to connect\n"),
@@ -193,6 +192,7 @@ void server_setup (void)
   }
   else
     gxsocket = make_socket (filename);
+  free (filename);
 }
 
 void server_start (void)
@@ -243,14 +243,13 @@ int server_client_connect (void)
     struct sockaddr s;
   } cli_adr = { .u = {0} }, serv_adr = { .u = {0} };
   int                length = sizeof(struct sockaddr_un);
-  char               filename[FILENAME_MAX];
 
   signal (SIGPIPE, sigpipe_handler);
 
   /* server filename */
-  snprintf (filename, sizeof (filename), SOCKET_FILENAME, getenv ("HOME"));
+  char *filename = get_config_filename (SOCKET_LEAFNAME);
   if (strlen (filename) >= sizeof (cli_adr.u.sun_path))
-    return 0; /* no point in printing anything... */
+    goto nothing; /* no point in printing anything... */
 
   logprintf ("server: trying to connect to already running instance of gxine (%s)...\n",
 	    filename);
@@ -268,7 +267,7 @@ int server_client_connect (void)
   if (bind (client_fd, &cli_adr.s, length) < 0)
   {
     perror ("bind");
-    return 0;
+    goto nothing;
   }
 
   /* initialize the server address structure */
@@ -279,13 +278,18 @@ int server_client_connect (void)
   {
     logperror ("connect");
     server_client_stop ();
-    return 0;
+    goto nothing;
   }
 
   g_print (_("server: connected to existing gxine instance.\n"));
   atexit (server_client_stop);
 
+  free (filename);
   return 1;
+
+nothing:
+  free (filename);
+  return 0;
 }
 
 int server_client_send (const char *cmd)
