Merge pull request #169 from alliedmodders/vfsdir-fixes

Fixes for OpenDirectory with use_valve_fs (r=asherkin).
This commit is contained in:
Nicholas Hastings 2014-11-08 13:19:54 -05:00
commit b7c4faf063

View File

@ -179,7 +179,7 @@ private:
struct ValveDirectory struct ValveDirectory
{ {
FileFindHandle_t hndl; FileFindHandle_t hndl = -1;
char szFirstPath[PLATFORM_MAX_PATH]; char szFirstPath[PLATFORM_MAX_PATH];
bool bHandledFirstPath; bool bHandledFirstPath;
}; };
@ -271,13 +271,18 @@ static cell_t sm_OpenDirectory(IPluginContext *pContext, const cell_t *params)
return 0; return 0;
} }
if (!path[0])
{
return pContext->ThrowNativeError("Invalid file path");
}
Handle_t handle = 0; Handle_t handle = 0;
if (params[0] >= 2 && params[2]) if (params[0] >= 2 && params[2])
{ {
size_t len = strlen(path);
char wildcardedPath[PLATFORM_MAX_PATH]; char wildcardedPath[PLATFORM_MAX_PATH];
snprintf(wildcardedPath, sizeof(wildcardedPath), "%s*", path); snprintf(wildcardedPath, sizeof(wildcardedPath), "%s%s*", path, (path[len-1] != '/' && path[len-1] != '\\') ? "/" : "");
ValveDirectory *valveDir = new ValveDirectory;
char *pathID; char *pathID;
if ((err=pContext->LocalToStringNULL(params[3], &pathID)) != SP_ERROR_NONE) if ((err=pContext->LocalToStringNULL(params[3], &pathID)) != SP_ERROR_NONE)
@ -286,15 +291,18 @@ static cell_t sm_OpenDirectory(IPluginContext *pContext, const cell_t *params)
return 0; return 0;
} }
ValveDirectory *valveDir = new ValveDirectory;
const char *pFirst = smcore.filesystem->FindFirstEx(wildcardedPath, pathID, &valveDir->hndl); const char *pFirst = smcore.filesystem->FindFirstEx(wildcardedPath, pathID, &valveDir->hndl);
if (pFirst) if (!pFirst)
{ {
valveDir->bHandledFirstPath = false; delete valveDir;
strncpy(valveDir->szFirstPath, pFirst, sizeof(valveDir->szFirstPath)); return 0;
} }
else else
{ {
valveDir->bHandledFirstPath = true; valveDir->bHandledFirstPath = false;
strncpy(valveDir->szFirstPath, pFirst, sizeof(valveDir->szFirstPath));
} }
handle = handlesys->CreateHandle(g_ValveDirType, valveDir, pContext->GetIdentity(), g_pCoreIdent, NULL); handle = handlesys->CreateHandle(g_ValveDirType, valveDir, pContext->GetIdentity(), g_pCoreIdent, NULL);