Skip to content

Commit

Permalink
OS/2: fix up the base/user/pref dir code.
Browse files Browse the repository at this point in the history
There might be better ways to do this in modern times than shove it all into
the base dir, though.
  • Loading branch information
icculus committed Jul 6, 2017
1 parent 062bdc2 commit d1e40af
Showing 1 changed file with 31 additions and 43 deletions.
74 changes: 31 additions & 43 deletions src/platform_os2.c
Expand Up @@ -145,8 +145,6 @@ static void cvt_path_to_correct_case(char *buf)
} /* cvt_file_to_correct_case */


static char *baseDir = NULL;

int __PHYSFS_platformInit(void)
{
return 1; /* it's all good. */
Expand All @@ -155,12 +153,6 @@ int __PHYSFS_platformInit(void)

int __PHYSFS_platformDeinit(void)
{
if (baseDir != NULL)
{
allocator.Free(baseDir);
baseDir = NULL;
} /* if */

return 1; /* success. */
} /* __PHYSFS_platformDeinit */

Expand Down Expand Up @@ -231,45 +223,37 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data)


char *__PHYSFS_platformCalcBaseDir(const char *argv0)
{
char *retval = NULL;

if (baseDir == NULL)
{
char buf[CCHMAXPATH];
APIRET rc;
PTIB ptib;
PPIB ppib;
PHYSFS_sint32 len;
{
char *retval = NULL;
char buf[CCHMAXPATH];
APIRET rc;
PTIB ptib;
PPIB ppib;
PHYSFS_sint32 len;

rc = DosGetInfoBlocks(&ptib, &ppib);
BAIL_IF_MACRO(rc != NO_ERROR, errcodeFromAPIRET(rc), 0);
rc = DosQueryModuleName(ppib->pib_hmte, sizeof (buf), (PCHAR) buf);
BAIL_IF_MACRO(rc != NO_ERROR, errcodeFromAPIRET(rc), 0);
rc = DosGetInfoBlocks(&ptib, &ppib);
BAIL_IF_MACRO(rc != NO_ERROR, errcodeFromAPIRET(rc), 0);
rc = DosQueryModuleName(ppib->pib_hmte, sizeof (buf), (PCHAR) buf);
BAIL_IF_MACRO(rc != NO_ERROR, errcodeFromAPIRET(rc), 0);

/* chop off filename, leave path. */
for (len = strlen(buf) - 1; len >= 0; len--)
/* chop off filename, leave path. */
for (len = strlen(buf) - 1; len >= 0; len--)
{
if (buf[len] == '\\')
{
if (buf[len] == '\\')
{
buf[len] = '\0';
break;
} /* if */
} /* for */

assert(len > 0); /* should have been a "x:\\" on the front on string. */
buf[len] = '\0';
break;
} /* if */
} /* for */

/* The string is capitalized! Figure out the REAL case... */
cvt_path_to_correct_case(buf);
assert(len > 0); /* should have been a "x:\\" on the front on string. */

baseDir = (char *) allocator.Malloc(len + 1);
BAIL_IF_MACRO(baseDir == NULL, PHYSFS_ERR_OUT_OF_MEMORY, 0);
strcpy(baseDir, buf);
} /* if */
/* The string is capitalized! Figure out the REAL case... */
cvt_path_to_correct_case(buf);

retval = (char *) allocator.Malloc(strlen(baseDir) + 1);
retval = (char *) allocator.Malloc(len + 1);
BAIL_IF_MACRO(retval == NULL, PHYSFS_ERR_OUT_OF_MEMORY, NULL);
strcpy(retval, baseDir);
strcpy(retval, buf);
return retval;
} /* __PHYSFS_platformCalcBaseDir */

Expand All @@ -280,11 +264,15 @@ char *__PHYSFS_platformGetUserName(void)
} /* __PHYSFS_platformGetUserName */


char *__PHYSFS_platformGetUserDir(void)
char *__PHYSFS_platformCalcUserDir(void)
{
return __PHYSFS_platformCalcBaseDir(NULL);
} /* __PHYSFS_platformGetUserDir */
return __PHYSFS_platformCalcBaseDir(NULL); /* !!! FIXME: ? */
} /* __PHYSFS_platformCalcUserDir */

char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app)
{
return __PHYSFS_platformCalcBaseDir(NULL); /* !!! FIXME: ? */
}

/* !!! FIXME: can we lose the malloc here? */
char *__PHYSFS_platformCvtToDependent(const char *prepend,
Expand Down

0 comments on commit d1e40af

Please sign in to comment.