Sfoglia il codice sorgente

windows: Workaround for WinXP systems.

Ryan C. Gordon 7 anni fa
parent
commit
81bb11ddbc
1 ha cambiato i file con 10 aggiunte e 1 eliminazioni
  1. 10 1
      src/physfs_platform_windows.c

+ 10 - 1
src/physfs_platform_windows.c

@@ -572,11 +572,20 @@ char *__PHYSFS_platformCalcUserDir(void)
         /*
          * Should fail. Will write the size of the profile path in
          *  psize. Also note that the second parameter can't be
-         *  NULL or the function fails.
+         *  NULL or the function fails on Windows XP, but has to be NULL on
+         *  Windows 10 or it will fail.  :(
          */
         rc = pGetDir(accessToken, NULL, &psize);
         GOTO_IF(rc, PHYSFS_ERR_OS_ERROR, done);  /* should have failed! */
 
+        if (psize == 0)  /* probably on Windows XP, try a different way. */
+        {
+            char x = 0;
+            rc = pGetDir(accessToken, &x, &psize);
+            GOTO_IF(rc, PHYSFS_ERR_OS_ERROR, done);  /* should have failed! */
+            GOTO_IF(!psize, PHYSFS_ERR_OS_ERROR, done);  /* Uhoh... */
+        } /* if */
+
         /* Allocate memory for the profile directory */
         wstr = (LPWSTR) __PHYSFS_smallAlloc((psize + 1) * sizeof (WCHAR));
         if (wstr != NULL)