Check config_file arguments for NULL
[neverball] / share / base_config.c
index 371643a..6df2fae 100644 (file)
@@ -12,7 +12,6 @@
  * General Public License for more details.
  */
 
-#include <SDL.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -46,11 +45,11 @@ static const char *config_file(const char *path, const char *file)
 {
     static char absolute[MAXSTR];
 
-    size_t d = strlen(path);
+    size_t d = path ? strlen(path) : 0;
 
-    strncpy(absolute, path, MAXSTR - 1);
+    strncpy(absolute, path ? path : "", MAXSTR - 1);
     strncat(absolute, "/",  MAXSTR - d - 1);
-    strncat(absolute, file, MAXSTR - d - 2);
+    strncat(absolute, file ? file : "", MAXSTR - d - 2);
 
     return absolute;
 }
@@ -85,8 +84,8 @@ const char *config_user(const char *file)
 
 /*
  * Attempt to find  the game data directory.  Search  the command line
- * paramater,  the environment,  and the  hard-coded default,  in that
- * order.  Confirm it by checking for presense of the named file.
+ * parameter,  the environment,  and the  hard-coded default,  in that
+ * order.  Confirm it by checking for presence of the named file.
  */
 int config_data_path(const char *path, const char *file)
 {
@@ -104,7 +103,7 @@ int config_data_path(const char *path, const char *file)
         return 1;
     }
 
-    if (CONFIG_DATA && config_test(CONFIG_DATA, file))
+    if (config_test(CONFIG_DATA, file))
     {
         strncpy(data_path, CONFIG_DATA, MAXSTR);
         return 1;
@@ -118,20 +117,25 @@ int config_data_path(const char *path, const char *file)
  * is a  directory there for  storing configuration, high  scores, and
  * replays.
  *
- * HACK: under Windows just assume the user has permission to write to
- * the data  directory.  This is  more reliable than trying  to devine
- * anything reasonable from the environment.
+ * Under Windows check the APPDATA environment variable and if that's
+ * not set, just assume the user has permission to write to the data
+ * directory.
  */
 int config_user_path(const char *file)
 {
 #ifdef _WIN32
-    size_t d = strlen(CONFIG_USER);
+    char *dir;
+
+    if ((dir = getenv("APPDATA")) || (dir = data_path))
+    {
+        size_t d = strlen(dir);
 
-    strncpy(user_path, data_path,   MAXSTR - 1);
-    strncat(user_path, "\\",        MAXSTR - d - 1);
-    strncat(user_path, CONFIG_USER, MAXSTR - d - 2);
+        strncpy(user_path, dir,         MAXSTR - 1);
+        strncat(user_path, "\\",        MAXSTR - d - 1);
+        strncat(user_path, CONFIG_USER, MAXSTR - d - 2);
+    }
 
-    if ((mkdir(user_path) == 0) || (errno = EEXIST))
+    if ((mkdir(user_path) == 0) || (errno == EEXIST))
         if (config_test(user_path, file))
             return 1;
 #else
@@ -146,7 +150,7 @@ int config_user_path(const char *file)
         strncat(user_path, CONFIG_USER, MAXSTR - d - 2);
     }
 
-    if ((mkdir(user_path, 0777) == 0) || (errno = EEXIST))
+    if ((mkdir(user_path, 0777) == 0) || (errno == EEXIST))
         if (config_test(user_path, file))
             return 1;
 #endif