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); }
int modex2mode(int modex) { int mode = 0; if (FIO_S_ISLNK(modex)) mode |= FIO_SO_IFLNK; if (FIO_S_ISREG(modex)) mode |= FIO_SO_IFREG; if (FIO_S_ISDIR(modex)) mode |= FIO_SO_IFDIR; /* Convert the file access modes. */ if (modex & (FIO_S_IRUSR | FIO_S_IRGRP | FIO_S_IROTH)) mode |= FIO_SO_IROTH; if (modex & (FIO_S_IWUSR | FIO_S_IWGRP | FIO_S_IWOTH)) mode |= FIO_SO_IWOTH; if (modex & (FIO_S_IXUSR | FIO_S_IXGRP | FIO_S_IXOTH)) mode |= FIO_SO_IXOTH; return mode; }
static int is_iso(SceIoDirent * dir) { //result int result = 0; // is it a file? if (!FIO_S_ISREG(dir->d_stat.st_mode)) { return 0; } //grab extension char * ext = dir->d_name + strlen(dir->d_name) - 4; //filename length check if (ext > dir->d_name) { //check extension if (stricmp(ext, ".iso") == 0 || stricmp(ext, ".cso") == 0) { result = 1; } } return result; }
/**************************************************************************** * This function will read the contents of a directory and store the * * contents in the folder structure. The ext parameter works as a filter * * to read in only certain file extension types. After reading the * * directory, the function will sort the contents. * ****************************************************************************/ int readDirectory(char *ext, int media) { int ret = 1; iox_dirent_t directory; int size; char folderName[255]; unsigned int numToc, index; char *extcmp; folder.fIndex = 0; struct TocEntry cdDirectory[255]; size = strlen(ext); switch (media) { case 0: { while (ret > 0) { ret = fileXioDread(folder.iDir, &directory); if (ret > 0) { if (FIO_S_ISDIR(directory.stat.mode)) //is a directory { strcpy(folder.object[folder.fIndex].name, ""); strcat(folder.object[folder.fIndex].name, "/"); strcat(folder.object[folder.fIndex].name, directory.name); folder.object[folder.fIndex].type = 0; folder.object[folder.fIndex].count = folder.fIndex; folder.fIndex++; } else if (FIO_S_ISREG(directory.stat.mode)) //is a file { if (size > ret) size = 0; extcmp = &directory.name[ret-size]; if (strcasecmp(extcmp, ext) == 0) { strcpy(folder.object[folder.fIndex].name, directory.name); folder.object[folder.fIndex].type = 1; folder.object[folder.fIndex].count = folder.fIndex; folder.fIndex++; } } } } folder.fMax = folder.fIndex; folder.fIndex = 0; sortFolder(); for (ret = 0; ret < folder.fMax; ret++) { if (folder.object[ret].type == 0) { strcpy(folderName, &folder.object[ret].name[1]); strcpy(folder.object[ret].name, folderName); } } closeDirectory(MODE_HDD); return folder.fMax; } case 1: { numToc = CDVD_GetDir(&folder.directory[5], NULL, CDVD_GET_FILES_AND_DIRS, cdDirectory, 254, NULL); CDVD_Stop(); #define CD_S_ISDIR(x) x & 2 #define CD_S_ISFILE(x) !CD_S_ISDIR(x) for (index=0; index<numToc; index++) { if (CD_S_ISDIR(cdDirectory[index].fileProperties)) //is a folder { strcpy(folder.object[folder.fIndex].name, ""); strcat(folder.object[folder.fIndex].name, "/"); strcat(folder.object[folder.fIndex].name, cdDirectory[index].filename); folder.object[folder.fIndex].type = 0; folder.object[folder.fIndex].count = folder.fIndex; folder.fIndex++; } else { ret = strlen(cdDirectory[index].filename); if (size > ret) size = 0; extcmp = &cdDirectory[index].filename[ret-size]; if (strcasecmp(extcmp, ext) == 0) { strcpy(folder.object[folder.fIndex].name, cdDirectory[index].filename); folder.object[folder.fIndex].type = 1; folder.object[folder.fIndex].count = folder.fIndex; folder.fIndex++; } } } folder.fMax = folder.fIndex; folder.fIndex = 0; sortFolder(); for (ret = 0; ret < folder.fMax; ret++) { if (folder.object[ret].type == 0) { strcpy(folderName, &folder.object[ret].name[1]); strcpy(folder.object[ret].name, folderName); } } return folder.fMax; } } return 0; }