From 81bb11ddbc4bdd635fb48eca829b8523be03cace Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 18 Mar 2019 13:36:16 -0400 Subject: [PATCH] windows: Workaround for WinXP systems. --- src/physfs_platform_windows.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/physfs_platform_windows.c b/src/physfs_platform_windows.c index 7235f2ac..547e9c0d 100644 --- a/src/physfs_platform_windows.c +++ b/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)