From 6519a249ff2c64f8a17f2984387aea3a05e9f1bd Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 2 Apr 2002 14:33:08 +0000 Subject: [PATCH] Username is now accurately reported, which means that the default user dir works more correctly. --- platform/macclassic.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/platform/macclassic.c b/platform/macclassic.c index 5fb5fc43..7af17403 100644 --- a/platform/macclassic.c +++ b/platform/macclassic.c @@ -13,8 +13,6 @@ * Please note that I haven't tried this code with CarbonLib or under * MacOS X at all. The code in unix.c is known to work with Darwin, * and you may or may not be better off using that. - * - * GetDefaultUser() from PPCToolbox.h isn't supported in CarbonLib, for one. */ #ifdef __PHYSFS_CARBONIZED__ #include @@ -22,7 +20,9 @@ #include #include #include -#include +#include +#include +#include #endif #define __PHYSICSFS_INTERNAL__ @@ -118,14 +118,27 @@ char *__PHYSFS_platformCalcBaseDir(const char *argv0) char *__PHYSFS_platformGetUserName(void) { char *retval = NULL; - Str32 name; - UInt32 ref; - BAIL_IF_MACRO(GetDefaultUser(&ref, name) != noErr, ERR_OS_ERROR, NULL); - - retval = (char *) malloc(name[0] + 1); - BAIL_IF_MACRO(retval == NULL, ERR_OUT_OF_MEMORY, NULL); - memcpy(retval, &name[1], name[0]); - retval[name[0]] = '\0'; /* null-terminate it. */ + StringHandle strHandle; + short origResourceFile = CurResFile(); + + /* use the System resource file. */ + UseResFile(0); + /* apparently, -16096 specifies the username. */ + strHandle = GetString(-16096); + UseResFile(origResourceFile); + BAIL_IF_MACRO(strHandle == NULL, ERR_OS_ERROR, NULL); + + HLock((Handle) strHandle); + retval = (char *) malloc((*strHandle)[0] + 1); + if (retval == NULL) + { + HUnlock((Handle) strHandle); + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); + } /* if */ + memcpy(retval, &(*strHandle)[1], (*strHandle)[0]); + retval[(*strHandle)[0]] = '\0'; /* null-terminate it. */ + HUnlock((Handle) strHandle); + return(retval); } /* __PHYSFS_platformGetUserName */