os2/SDL_sysfilesystem.c: fix crash if one of the parameters is NULL Has been happening with testfilesystem from 2.0.6 and newer because of commit 572a721879ef. Also set error strings in certain error conditions. Also applied coding style / whitespace fixes, while I was there.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
diff --git a/src/filesystem/os2/SDL_sysfilesystem.c b/src/filesystem/os2/SDL_sysfilesystem.c
index dce3f28..a440b09 100644
--- a/src/filesystem/os2/SDL_sysfilesystem.c
+++ b/src/filesystem/os2/SDL_sysfilesystem.c
@@ -40,80 +40,88 @@ SDL_GetBasePath(void)
{
PTIB tib;
PPIB pib;
- ULONG ulRC = DosGetInfoBlocks( &tib, &pib );
+ ULONG ulRC = DosGetInfoBlocks(&tib, &pib);
PCHAR pcEnd;
ULONG cbResult;
CHAR acBuf[_MAX_PATH];
-
- if ( ulRC != NO_ERROR )
- {
- debug( "DosGetInfoBlocks() failed, rc = %u", ulRC );
+
+ if (ulRC != NO_ERROR) {
+ debug("DosGetInfoBlocks() failed, rc = %u", ulRC);
return NULL;
}
- pcEnd = SDL_strrchr( pib->pib_pchcmd, '\\' );
- if ( pcEnd != NULL )
+ pcEnd = SDL_strrchr(pib->pib_pchcmd, '\\');
+ if (pcEnd != NULL)
pcEnd++;
- else
- {
- if ( pib->pib_pchcmd[1] == ':' )
+ else {
+ if (pib->pib_pchcmd[1] == ':')
pcEnd = &pib->pib_pchcmd[2];
- else
+ else {
+ SDL_SetError("No path in pib->pib_pchcmd");
return NULL;
+ }
}
cbResult = pcEnd - pib->pib_pchcmd;
- SDL_memcpy( acBuf, pib->pib_pchcmd, cbResult );
+ SDL_memcpy(acBuf, pib->pib_pchcmd, cbResult);
acBuf[cbResult] = '\0';
- return OS2_SysToUTF8( acBuf );
+ return OS2_SysToUTF8(acBuf);
}
char *
SDL_GetPrefPath(const char *org, const char *app)
{
- PSZ pszPath = SDL_getenv( "HOME" );
+ PSZ pszPath;
CHAR acBuf[_MAX_PATH];
int lPosApp, lPosOrg;
- PSZ pszApp, pszOrg = OS2_UTF8ToSys( org );
+ PSZ pszApp, pszOrg;
- if ( pszOrg == NULL )
- {
- SDL_OutOfMemory();
- return NULL;
+ if (!app) {
+ SDL_InvalidParamError("app");
+ return NULL;
}
- if ( pszPath == NULL )
- {
+ pszPath = SDL_getenv( "HOME" );
+ if (!pszPath) {
pszPath = SDL_getenv( "ETC" );
- if ( pszPath == NULL )
+ if (!pszPath) {
+ SDL_SetError("HOME or ETC environment not set");
return NULL;
+ }
}
- lPosApp = SDL_snprintf( acBuf, sizeof(acBuf) - 1, "%s\\%s", pszPath, pszOrg );
- SDL_free( pszOrg );
- if ( lPosApp < 0 )
+ if (!org) {
+ lPosApp = SDL_snprintf(acBuf, sizeof(acBuf) - 1, "%s", pszPath);
+ } else {
+ pszOrg = OS2_UTF8ToSys(org);
+ if (!pszOrg) {
+ SDL_OutOfMemory();
+ return NULL;
+ }
+ lPosApp = SDL_snprintf(acBuf, sizeof(acBuf) - 1, "%s\\%s", pszPath, pszOrg);
+ SDL_free(pszOrg);
+ }
+ if (lPosApp < 0)
return NULL;
- DosCreateDir( acBuf, NULL );
+ DosCreateDir(acBuf, NULL);
- pszApp = OS2_UTF8ToSys( app );
- if ( pszApp == NULL )
- {
+ pszApp = OS2_UTF8ToSys(app);
+ if (!pszApp) {
SDL_OutOfMemory();
return NULL;
}
- lPosOrg = SDL_snprintf( &acBuf[lPosApp], sizeof(acBuf) - lPosApp - 1, "\\%s",
- pszApp );
- SDL_free( pszApp );
- if ( lPosOrg < 0 )
+ lPosOrg = SDL_snprintf(&acBuf[lPosApp], sizeof(acBuf) - lPosApp - 1, "\\%s", pszApp);
+ SDL_free(pszApp);
+ if (lPosOrg < 0)
return NULL;
- DosCreateDir( acBuf, NULL );
+ DosCreateDir(acBuf, NULL);
*((PUSHORT)&acBuf[lPosApp + lPosOrg]) = (USHORT)'\0\\';
- return OS2_SysToUTF8( acBuf );
+ return OS2_SysToUTF8(acBuf);
}
#endif /* SDL_FILESYSTEM_OS2 */