static cell_t sm_ReadDirEntry(IPluginContext *pContext, const cell_t *params) { Handle_t hndl = static_cast<Handle_t>(params[1]); IDirectory *pDir; HandleError herr; HandleSecurity sec; int err; sec.pOwner = NULL; sec.pIdentity = g_pCoreIdent; if ((herr=g_HandleSys.ReadHandle(hndl, g_DirType, &sec, (void **)&pDir)) != HandleError_None) { return pContext->ThrowNativeError("Invalid file handle %x (error %d)", hndl, herr); } if (!pDir->MoreFiles()) { return false; } cell_t *filetype; if ((err=pContext->LocalToPhysAddr(params[4], &filetype)) != SP_ERROR_NONE) { pContext->ThrowNativeErrorEx(err, NULL); return 0; } if (pDir->IsEntryDirectory()) { *filetype = 1; } else if (pDir->IsEntryFile()) { *filetype = 2; } else { *filetype = 0; } const char *path = pDir->GetEntryName(); if ((err=pContext->StringToLocalUTF8(params[2], params[3], path, NULL)) != SP_ERROR_NONE) { pContext->ThrowNativeErrorEx(err, NULL); return 0; } pDir->NextEntry(); return true; }
void CExtensionManager::TryAutoload() { char path[PLATFORM_MAX_PATH]; g_pSM->BuildPath(Path_SM, path, sizeof(path), "extensions"); IDirectory *pDir = libsys->OpenDirectory(path); if (!pDir) { return; } const char *lfile; size_t len; while (pDir->MoreFiles()) { if (pDir->IsEntryDirectory()) { pDir->NextEntry(); continue; } lfile = pDir->GetEntryName(); len = strlen(lfile); if (len <= 9) /* size of ".autoload" */ { pDir->NextEntry(); continue; } if (strcmp(&lfile[len - 9], ".autoload") != 0) { pDir->NextEntry(); continue; } char file[PLATFORM_MAX_PATH]; len = smcore.Format(file, sizeof(file), "%s", lfile); strcpy(&file[len - 9], ".ext"); LoadAutoExtension(file); pDir->NextEntry(); } }
static void add_folders(IWebForm *form, const char *root, unsigned int &num_files) { IDirectory *dir; char path[PLATFORM_MAX_PATH]; char name[PLATFORM_MAX_PATH]; smutils->BuildPath(Path_SM, path, sizeof(path), "%s", root); dir = libsys->OpenDirectory(path); if (dir == NULL) { AddUpdateError("Could not open folder: %s", path); return; } while (dir->MoreFiles()) { if (strcmp(dir->GetEntryName(), ".") == 0 || strcmp(dir->GetEntryName(), "..") == 0) { dir->NextEntry(); continue; } smutils->Format(name, sizeof(name), "%s/%s", root, dir->GetEntryName()); if (dir->IsEntryDirectory()) { add_folders(form, name, num_files); } else if (dir->IsEntryFile()) { add_file(form, name, num_files); } dir->NextEntry(); } libsys->CloseDirectory(dir); }