Pārlūkot izejas kodu

__PHYSFS_platformGetUserDir() checks some win32 standard environment variables,
now. Added some headers so that most of this compiles with Cygwin, too.

Ryan C. Gordon 24 gadi atpakaļ
vecāks
revīzija
950e518270
1 mainītis faili ar 42 papildinājumiem un 2 dzēšanām
  1. 42 2
      platform/win32.c

+ 42 - 2
platform/win32.c

@@ -12,7 +12,8 @@
 
 #include <windows.h>
 #include <stdio.h>
-
+#include <stdlib.h>
+#include <ctype.h>
 
 #define __PHYSICSFS_INTERNAL__
 #include "physfs_internal.h"
@@ -106,9 +107,48 @@ char *__PHYSFS_platformGetUserName(void)
 } /* __PHYSFS_platformGetUserName */
 
 
+static char *copyEnvironmentVariable(const char *varname)
+{
+    const char *envr = getenv(varname);
+    char *retval = NULL;
+
+    if (envr != NULL)
+    {
+        retval = malloc(strlen(envr) + 1);
+        if (retval != NULL)
+            strcpy(retval, envr);
+    } /* if */
+
+    return(retval);
+} /* copyEnvironmentVariable */
+
+
 char *__PHYSFS_platformGetUserDir(void)
 {
-    return(NULL);  /* no user dir on win32. */
+    char *home = copyEnvironmentVariable("HOME");
+    const char *homedrive = getenv("HOMEDRIVE");
+    const char *homepath = getenv("HOMEPATH");
+
+    if (home != NULL)
+        return(home);
+
+    if ((homedrive != NULL) && (homepath != NULL))
+    {
+        char *retval = (char *) malloc(strlen(homedrive)+strlen(homepath)+2);
+        if (retval != NULL)
+        {
+            strcpy(retval, homedrive);
+            if ((homepath[0] != '\\') &&
+                (homedrive[strlen(homedrive)-1] != '\\'))
+            {
+                strcat(retval, "\\");
+            } /* if */
+            strcat(retval, homepath);
+            return(retval);
+        } /* if */
+    } /* if */
+
+    return(NULL);  /* fall through to default rules. */
 } /* __PHYSFS_platformGetUserDir */