void RemoveDir(const char* oldPath) { char *fullOldPath; SceIoDirent oneDir; int oDir = sceIoDopen(oldPath); if (oDir < 0){ return; } while (1){ memset(&oneDir, 0, sizeof(SceIoDirent)); if (sceIoDread(oDir, &oneDir) <= 0) break; if (!strcmp(oneDir.d_name, ".") || !strcmp(oneDir.d_name, "..")) continue; if (oldPath[strlen(oldPath)-1] != '/'){ fullOldPath = (char *)calloc(strlen(oldPath)+strlen(oneDir.d_name)+2,sizeof(char)); sprintf(fullOldPath,"%s/%s",oldPath,oneDir.d_name); } else { fullOldPath = (char *)calloc(strlen(oldPath)+strlen(oneDir.d_name)+1,sizeof(char)); sprintf(fullOldPath,"%s%s",oldPath,oneDir.d_name); } if (FIO_S_ISDIR(oneDir.d_stat.st_mode)){ RemoveDir(fullOldPath); } else if(FIO_S_ISREG(oneDir.d_stat.st_mode)){ sceIoRemove(fullOldPath); } free(fullOldPath); } sceIoDclose(oDir); sceIoRmdir(oldPath); }
extern u32 utils_del_dir(const char *dir) { u32 count = 0; int dl = sceIoDopen(dir); SceIoDirent sid; if (dl < 0) return count; memset(&sid, 0, sizeof(SceIoDirent)); while (sceIoDread(dl, &sid)) { char compPath[260]; if (sid.d_name[0] == '.') continue; SPRINTF_S(compPath, "%s/%s", dir, sid.d_name); if (FIO_S_ISDIR(sid.d_stat.st_mode)) { if (utils_del_dir(compPath)) { count++; } continue; } if (utils_del_file(compPath)) { count++; } memset(&sid, 0, sizeof(SceIoDirent)); } sceIoDclose(dl); sceIoRmdir(dir); return count; }
int hook_sceIoRmdir(const char *path) { state_machine_checkState(); char tmpPath[MAX_PATH_LENGTH]; char *tmp=TranslateVFS(tmpPath, path); return sceIoRmdir(tmp); }
int hook_sceIoRmdir(const char *path) { sceKernelCheckCallback(); char tmpPath[MAX_PATH_LENGTH]; char *tmp=TranslateVFS(tmpPath, path); return sceIoRmdir(tmp); }
int removePath(char *path, uint32_t *value, uint32_t max, void (* SetProgress)(uint32_t value, uint32_t max)) { SceUID dfd = sceIoDopen(path); if (dfd >= 0) { int res = 0; do { SceIoDirent dir; memset(&dir, 0, sizeof(SceIoDirent)); res = sceIoDread(dfd, &dir); if (res > 0) { if (strcmp(dir.d_name, ".") == 0 || strcmp(dir.d_name, "..") == 0) continue; char *new_path = malloc(strlen(path) + strlen(dir.d_name) + 2); snprintf(new_path, MAX_PATH_LENGTH, "%s/%s", path, dir.d_name); if (SCE_S_ISDIR(dir.d_stat.st_mode)) { removePath(new_path, value, max, SetProgress); } else { sceIoRemove(new_path); if (value) (*value)++; if (SetProgress) SetProgress(value ? *value : 0, max); } free(new_path); } } while (res > 0); sceIoDclose(dfd); int ret = sceIoRmdir(path); if (ret < 0) return ret; if (value) (*value)++; if (SetProgress) SetProgress(value ? *value : 0, max); } else { int ret = sceIoRemove(path); if (ret < 0) return ret; if (value) (*value)++; if (SetProgress) SetProgress(value ? *value : 0, max); } return 0; }
bool DirectoryRemove(const char *strDirectoryName) { #if defined(_WIN32) return RemoveDirectory(strDirectoryName) != 0; #elif defined(PLATFORM_PSP2) return sceIoRmdir(strDirectoryName) >= 0; #endif return false; }
static void delete_dir(ClientInfo *client, const char *path) { int ret; DEBUG("Deleting: %s\n", path); ret = sceIoRmdir(path); if (ret >= 0) { client_send_ctrl_msg(client, "226 Directory deleted.\n"); } else if (ret == 0x8001005A) { /* DIRECTORY_IS_NOT_EMPTY */ client_send_ctrl_msg(client, "550 Directory is not empty.\n"); } else { client_send_ctrl_msg(client, "550 Could not delete the directory.\n"); } }
int rmdir(const char *path){ char fullpath[PATH_MAX]; return seterrno(sceIoRmdir(convert_path(fullpath,path))); }
int main(int argc, char **argv) { initDisplay(); SceUtilitySavedataParam2 param; initStandardSavedataParams(¶m); // First, let's create some savedata. param.mode = (PspUtilitySavedataMode) SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE; param.saveNameList = saveNameList; strcpy(param.saveName, ""); param.dataBuf = savedata; param.dataBufSize = sizeof(savedata); param.dataSize = sizeof(savedata); checkpointExists(¶m); runStandardSavedataLoop(¶m); // A bit more, non-secure mode. param.mode = (PspUtilitySavedataMode) SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA; param.saveNameList = saveNameList; strcpy(param.fileName, "OTHER.BIN"); param.dataBuf = savedata; param.dataBufSize = sizeof(savedata); param.dataSize = sizeof(savedata); checkpointExists(¶m); runStandardSavedataLoop(¶m); // Now the actual sizes call. param.mode = (PspUtilitySavedataMode) SCE_UTILITY_SAVEDATA_TYPE_FILES; param.saveNameList = saveNameList; // NEW / OTHER same? strcpy(param.fileName, "NEW.BIN"); SceUtilitySavedataFileListInfo fileList; memset(&fileList, 0, sizeof(fileList)); SceUtilitySavedataFileListEntry fileListNormal[10]; memset(fileListNormal, 0, sizeof(fileListNormal)); SceUtilitySavedataFileListEntry fileListSecure[10]; memset(fileListSecure, 0, sizeof(fileListSecure)); SceUtilitySavedataFileListEntry fileListSystem[10]; memset(fileListSystem, 0, sizeof(fileListSystem)); fileList.maxNormalEntries = 10; fileList.maxSecureEntries = 10; fileList.maxSystemEntries = 10; fileList.normalEntries = fileListNormal; fileList.secureEntries = fileListSecure; fileList.systemEntries = fileListSystem; param.fileList = &fileList; checkpointExists(¶m); runStandardSavedataLoop(¶m); checkpoint("Result: %08x", param.base.result); checkpointExists(¶m); // TODO: Better way of cleaning up... checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901ABC/DATA.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901ABC/OTHER.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901ABC/PARAM.SFO")); checkpoint("sceIoRmdir: %08x", sceIoRmdir("ms0:/PSP/SAVEDATA/TEST99901ABC")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901/DATA.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901/OTHER.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901/PARAM.SFO")); checkpoint("sceIoRmdir: %08x", sceIoRmdir("ms0:/PSP/SAVEDATA/TEST99901")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901F1/DATA.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901F1/OTHER.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901F1/PARAM.SFO")); checkpoint("sceIoRmdir: %08x", sceIoRmdir("ms0:/PSP/SAVEDATA/TEST99901F1")); return 0; }
int main(int argc, char **argv) { initDisplay(); SceUtilitySavedataParam2 param; initStandardSavedataParams(¶m); // First, let's create some savedata. param.mode = (PspUtilitySavedataMode) SCE_UTILITY_SAVEDATA_TYPE_MAKEDATASECURE; param.saveNameList = saveNameList; param.dataBuf = savedata; param.dataBufSize = sizeof(savedata); param.dataSize = sizeof(savedata); checkpointExists(¶m); runStandardSavedataLoop(¶m); // A bit more, non-secure mode. param.mode = (PspUtilitySavedataMode) SCE_UTILITY_SAVEDATA_TYPE_WRITEDATA; param.saveNameList = saveNameList; strcpy(param.fileName, "OTHER.BIN"); param.dataBuf = savedata; param.dataBufSize = sizeof(savedata); param.dataSize = sizeof(savedata); checkpointExists(¶m); runStandardSavedataLoop(¶m); // Now the actual sizes call. param.mode = (PspUtilitySavedataMode) SCE_UTILITY_SAVEDATA_TYPE_LIST; param.saveNameList = saveNameList; // Filename appears to be ignored. strcpy(param.fileName, "ASDASD.BIN"); // Try: ABC, ABC2, "", <>, * (wildcards, work, <> not?) strcpy(param.saveName, "A?C"); SceUtilitySavedataIdListInfo idList; SceUtilitySavedataIdListEntry idEntries[10]; memset(idEntries, 0, sizeof(idEntries)); idList.maxCount = 10; idList.resultCount = -1; idList.entries = idEntries; param.idList = &idList; param.dataBuf = savedata; param.dataBufSize = sizeof(savedata); param.dataSize = sizeof(savedata); checkpointExists(¶m); runStandardSavedataLoop(¶m); checkpoint("Result: %08x", param.base.result); checkpoint("%s", idEntries[0].name); checkpointExists(¶m); // TODO: Better way of cleaning up... checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901ABC/DATA.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901ABC/OTHER.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901ABC/PARAM.SFO")); checkpoint("sceIoRmdir: %08x", sceIoRmdir("ms0:/PSP/SAVEDATA/TEST99901ABC")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901/DATA.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901/OTHER.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901/PARAM.SFO")); checkpoint("sceIoRmdir: %08x", sceIoRmdir("ms0:/PSP/SAVEDATA/TEST99901")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901F1/DATA.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901F1/OTHER.BIN")); checkpoint("sceIoRemove: %08x", sceIoRemove("ms0:/PSP/SAVEDATA/TEST99901F1/PARAM.SFO")); checkpoint("sceIoRmdir: %08x", sceIoRmdir("ms0:/PSP/SAVEDATA/TEST99901F1")); return 0; }