Fix warnings when compiling for Windows.
[tinc] / src / names.c
index d8935ba..603b536 100644 (file)
@@ -1,7 +1,7 @@
 /*
     names.c -- generate commonly used (file)names
     Copyright (C) 1998-2005 Ivo Timmermans
-                  2000-2015 Guus Sliepen <guus@tinc-vpn.org>
+                  2000-2018 Guus Sliepen <guus@tinc-vpn.org>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 #include "system.h"
 
 #include "logger.h"
+#include "names.h"
 #include "xalloc.h"
 
 char *netname = NULL;
+char *myname = NULL;
 char *confdir = NULL;           /* base configuration directory */
 char *confbase = NULL;          /* base configuration directory for this instance of tinc */
 bool confbase_given;
@@ -40,91 +42,121 @@ void make_names(bool daemon) {
 #ifdef HAVE_MINGW
        HKEY key;
        char installdir[1024] = "";
-       DWORD len = sizeof installdir;
+       DWORD len = sizeof(installdir);
 #endif
        confbase_given = confbase;
 
-       if(netname && confbase)
+       if(netname && confbase) {
                logger(DEBUG_ALWAYS, LOG_INFO, "Both netname and configuration directory given, using the latter...");
+       }
 
-       if(netname)
+       if(netname) {
                xasprintf(&identname, "tinc.%s", netname);
-       else
+       } else {
                identname = xstrdup("tinc");
+       }
 
 #ifdef HAVE_MINGW
+
        if(!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\tinc", 0, KEY_READ, &key)) {
                if(!RegQueryValueEx(key, NULL, 0, 0, (LPBYTE)installdir, &len)) {
                        confdir = xstrdup(installdir);
-                       if(!logfilename)
-                               xasprintf(&logfilename, "%s" SLASH "log" SLASH "%s.log", installdir, identname);
+
                        if(!confbase) {
-                               if(netname)
+                               if(netname) {
                                        xasprintf(&confbase, "%s" SLASH "%s", installdir, netname);
-                               else
+                               } else {
                                        xasprintf(&confbase, "%s", installdir);
+                               }
+                       }
+
+                       if(!logfilename) {
+                               xasprintf(&logfilename, "%s" SLASH "tinc.log", confbase);
                        }
                }
+
                RegCloseKey(key);
        }
+
 #endif
-       if(!confdir)
+
+       if(!confdir) {
                confdir = xstrdup(CONFDIR SLASH "tinc");
+       }
 
        if(!confbase) {
-               if(netname)
+               if(netname) {
                        xasprintf(&confbase, CONFDIR SLASH "tinc" SLASH "%s", netname);
-               else
+               } else {
                        xasprintf(&confbase, CONFDIR SLASH "tinc");
+               }
        }
 
 #ifdef HAVE_MINGW
-       if(!logfilename)
+       (void)daemon;
+
+       if(!logfilename) {
                xasprintf(&logfilename, "%s" SLASH "log", confbase);
+       }
 
-       if(!pidfilename)
+       if(!pidfilename) {
                xasprintf(&pidfilename, "%s" SLASH "pid", confbase);
+       }
+
 #else
        bool fallback = false;
+
        if(daemon) {
-               if(access(LOCALSTATEDIR, R_OK | W_OK | X_OK))
+               if(access(LOCALSTATEDIR, R_OK | W_OK | X_OK)) {
                        fallback = true;
+               }
        } else {
                char fname[PATH_MAX];
-               snprintf(fname, sizeof fname, LOCALSTATEDIR SLASH "run" SLASH "%s.pid", identname);
+               snprintf(fname, sizeof(fname), LOCALSTATEDIR SLASH "run" SLASH "%s.pid", identname);
+
                if(access(fname, R_OK)) {
-                       snprintf(fname, sizeof fname, "%s" SLASH "pid", confbase);
-                       if(!access(fname, R_OK))
+                       snprintf(fname, sizeof(fname), "%s" SLASH "pid", confbase);
+
+                       if(!access(fname, R_OK)) {
                                fallback = true;
+                       }
                }
        }
 
        if(!fallback) {
-               if(!logfilename)
+               if(!logfilename) {
                        xasprintf(&logfilename, LOCALSTATEDIR SLASH "log" SLASH "%s.log", identname);
+               }
 
-               if(!pidfilename)
+               if(!pidfilename) {
                        xasprintf(&pidfilename, LOCALSTATEDIR SLASH "run" SLASH "%s.pid", identname);
+               }
        } else {
-               if(!logfilename)
+               if(!logfilename) {
                        xasprintf(&logfilename, "%s" SLASH "log", confbase);
+               }
 
                if(!pidfilename) {
-                       if(daemon)
+                       if(daemon) {
                                logger(DEBUG_ALWAYS, LOG_WARNING, "Could not access " LOCALSTATEDIR SLASH " (%s), storing pid and socket files in %s" SLASH, strerror(errno), confbase);
+                       }
+
                        xasprintf(&pidfilename, "%s" SLASH "pid", confbase);
                }
        }
+
 #endif
 
        if(!unixsocketname) {
                int len = strlen(pidfilename);
                unixsocketname = xmalloc(len + 8);
-               strcpy(unixsocketname, pidfilename);
-               if(len > 4 && !strcmp(pidfilename + len - 4, ".pid"))
-                       strcpy(unixsocketname + len - 4, ".socket");
-               else
-                       strcpy(unixsocketname + len, ".socket");
+               memcpy(unixsocketname, pidfilename, len);
+
+               if(len > 4 && !strcmp(pidfilename + len - 4, ".pid")) {
+                       strncpy(unixsocketname + len - 4, ".socket", 8);
+               } else {
+                       strncpy(unixsocketname + len, ".socket", 8);
+               }
        }
 }
 
@@ -136,4 +168,14 @@ void free_names(void) {
        free(logfilename);
        free(confbase);
        free(confdir);
+       free(myname);
+
+       identname = NULL;
+       netname = NULL;
+       unixsocketname = NULL;
+       pidfilename = NULL;
+       logfilename = NULL;
+       confbase = NULL;
+       confdir = NULL;
+       myname = NULL;
 }