mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-16 11:06:49 +01:00
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.
This commit is contained in:
parent
222f026899
commit
5d89217f6b
@ -40,80 +40,88 @@ SDL_GetBasePath(void)
|
|||||||
{
|
{
|
||||||
PTIB tib;
|
PTIB tib;
|
||||||
PPIB pib;
|
PPIB pib;
|
||||||
ULONG ulRC = DosGetInfoBlocks( &tib, &pib );
|
ULONG ulRC = DosGetInfoBlocks(&tib, &pib);
|
||||||
PCHAR pcEnd;
|
PCHAR pcEnd;
|
||||||
ULONG cbResult;
|
ULONG cbResult;
|
||||||
CHAR acBuf[_MAX_PATH];
|
CHAR acBuf[_MAX_PATH];
|
||||||
|
|
||||||
if ( ulRC != NO_ERROR )
|
if (ulRC != NO_ERROR) {
|
||||||
{
|
debug("DosGetInfoBlocks() failed, rc = %u", ulRC);
|
||||||
debug( "DosGetInfoBlocks() failed, rc = %u", ulRC );
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pcEnd = SDL_strrchr( pib->pib_pchcmd, '\\' );
|
pcEnd = SDL_strrchr(pib->pib_pchcmd, '\\');
|
||||||
if ( pcEnd != NULL )
|
if (pcEnd != NULL)
|
||||||
pcEnd++;
|
pcEnd++;
|
||||||
else
|
else {
|
||||||
{
|
if (pib->pib_pchcmd[1] == ':')
|
||||||
if ( pib->pib_pchcmd[1] == ':' )
|
|
||||||
pcEnd = &pib->pib_pchcmd[2];
|
pcEnd = &pib->pib_pchcmd[2];
|
||||||
else
|
else {
|
||||||
|
SDL_SetError("No path in pib->pib_pchcmd");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cbResult = pcEnd - pib->pib_pchcmd;
|
cbResult = pcEnd - pib->pib_pchcmd;
|
||||||
SDL_memcpy( acBuf, pib->pib_pchcmd, cbResult );
|
SDL_memcpy(acBuf, pib->pib_pchcmd, cbResult);
|
||||||
acBuf[cbResult] = '\0';
|
acBuf[cbResult] = '\0';
|
||||||
|
|
||||||
return OS2_SysToUTF8( acBuf );
|
return OS2_SysToUTF8(acBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
SDL_GetPrefPath(const char *org, const char *app)
|
SDL_GetPrefPath(const char *org, const char *app)
|
||||||
{
|
{
|
||||||
PSZ pszPath = SDL_getenv( "HOME" );
|
PSZ pszPath;
|
||||||
CHAR acBuf[_MAX_PATH];
|
CHAR acBuf[_MAX_PATH];
|
||||||
int lPosApp, lPosOrg;
|
int lPosApp, lPosOrg;
|
||||||
PSZ pszApp, pszOrg = OS2_UTF8ToSys( org );
|
PSZ pszApp, pszOrg;
|
||||||
|
|
||||||
if ( pszOrg == NULL )
|
if (!app) {
|
||||||
{
|
SDL_InvalidParamError("app");
|
||||||
SDL_OutOfMemory();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( pszPath == NULL )
|
|
||||||
{
|
|
||||||
pszPath = SDL_getenv( "ETC" );
|
|
||||||
if ( pszPath == NULL )
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
lPosApp = SDL_snprintf( acBuf, sizeof(acBuf) - 1, "%s\\%s", pszPath, pszOrg );
|
pszPath = SDL_getenv( "HOME" );
|
||||||
SDL_free( pszOrg );
|
if (!pszPath) {
|
||||||
if ( lPosApp < 0 )
|
pszPath = SDL_getenv( "ETC" );
|
||||||
|
if (!pszPath) {
|
||||||
|
SDL_SetError("HOME or ETC environment not set");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
return NULL;
|
||||||
|
|
||||||
DosCreateDir( acBuf, NULL );
|
DosCreateDir(acBuf, NULL);
|
||||||
|
|
||||||
pszApp = OS2_UTF8ToSys( app );
|
pszApp = OS2_UTF8ToSys(app);
|
||||||
if ( pszApp == NULL )
|
if (!pszApp) {
|
||||||
{
|
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
lPosOrg = SDL_snprintf( &acBuf[lPosApp], sizeof(acBuf) - lPosApp - 1, "\\%s",
|
lPosOrg = SDL_snprintf(&acBuf[lPosApp], sizeof(acBuf) - lPosApp - 1, "\\%s", pszApp);
|
||||||
pszApp );
|
SDL_free(pszApp);
|
||||||
SDL_free( pszApp );
|
if (lPosOrg < 0)
|
||||||
if ( lPosOrg < 0 )
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
DosCreateDir( acBuf, NULL );
|
DosCreateDir(acBuf, NULL);
|
||||||
*((PUSHORT)&acBuf[lPosApp + lPosOrg]) = (USHORT)'\0\\';
|
*((PUSHORT)&acBuf[lPosApp + lPosOrg]) = (USHORT)'\0\\';
|
||||||
|
|
||||||
return OS2_SysToUTF8( acBuf );
|
return OS2_SysToUTF8(acBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SDL_FILESYSTEM_OS2 */
|
#endif /* SDL_FILESYSTEM_OS2 */
|
||||||
|
Loading…
Reference in New Issue
Block a user