PID is now also tried to be stored to: /tmp
authorshort <>
Sun, 26 Jun 2005 04:43:30 +0000 (04:43 +0000)
committershort <>
Sun, 26 Jun 2005 04:43:30 +0000 (04:43 +0000)
src/network.c

index c658c13..838e80a 100644 (file)
 #include "network.h"
 #include "packet.h"
 #include "main.h"      /* for optarg_verbose */
+#include "pathname.h"
 
 
 /* Config: */
-#define NETWORK_PATHNAME_PID "/var/run/udpgate.pid"
 #define SOCK_SOURCE_CHECK_EVENTS (G_IO_IN)     /* |G_IO_PRI */
 #define SOCK_SOURCE_CHECK_REVENTS (SOCK_SOURCE_CHECK_EVENTS)   /* |G_IO_ERR|G_IO_HUP|G_IO_NVAL */
 #define SERVER_INADDR 0xC37AD054       /* mms2.org = 195.122.208.84; host order */
 void (*network_notify_hostip)(guint32 hostip_guint32);
 
 
+static G_CONST_RETURN gchar *pid_pathname(void)
+{
+static const gchar *static_pathname;
+static const char *user_val;
+
+       if (!static_pathname)
+               user_val=getenv("USER");
+       return pathname_find(&static_pathname,
+                       G_STRINGIFY(LOCALSTATEDIR) "/run",PACKAGE ".pid",
+                       (!user_val ? NULL : "/tmp"),
+                                       (!user_val ? NULL : udpgate_printf_alloca(".%s-%s.pid",user_val,PACKAGE)),
+                       NULL);
+}
+
+
 struct client {
        GPollFD gpollfd;
        struct sockaddr_in sockaddr_in_from;
@@ -84,7 +99,7 @@ int pid_int;
        if (sock_gsource)
                return getpid();
 
-       if (!(f=fopen(NETWORK_PATHNAME_PID,"r")))
+       if (!(f=fopen(pid_pathname(),"r")))
                goto err;
        got=fgets(buf,sizeof(buf),f);
        fclose(f);      /* FIXME: error ignored */
@@ -110,19 +125,19 @@ static gboolean write_daemon_running(pid_t pid)
 FILE *f;
 
        if (pid==(pid_t)-1) {
-               if (unlink(NETWORK_PATHNAME_PID)) {
+               if (unlink(pid_pathname())) {
                        if (errno!=ENOENT)
-                               g_warning(_("Error removing PID file \"%s\": %m"),NETWORK_PATHNAME_PID);
+                               g_warning(_("Error removing PID file \"%s\": %m"),pid_pathname());
                        return FALSE;
                        }
                return TRUE;
                }
-       if (!(f=fopen(NETWORK_PATHNAME_PID,"w"))) {
+       if (!(f=fopen(pid_pathname(),"w"))) {
 static gboolean once=TRUE;
 
                if (once) {
                        once=FALSE;
-                       g_warning(_("Error writing PID %d to \"%s\": %m"),(int)pid,NETWORK_PATHNAME_PID);
+                       g_warning(_("Error writing PID %d to \"%s\": %m"),(int)pid,pid_pathname());
                        }
                return FALSE;
                }