#include #include #include #include #include #include #include #include "listfiles.h" #include "libfat/fat.h" static char alldirfiles[300][70]; char filenames[80]; bool findfile(const char * filename, const char * path) { DIR *dir; struct dirent *file; dir = opendir(path); char temp[11]; while ((file = readdir(dir))) { snprintf(temp,sizeof(temp),"%s",file->d_name); if (!strncmpi(temp,filename,11)) { closedir(dir); return true; } } closedir(dir); return false; } bool subfoldercreate(const char * fullpath) { //check forsubfolders char dir[300]; char * pch = NULL; u32 len; struct stat st; strlcpy(dir, fullpath, sizeof(dir)); len = strlen(dir); if(len && len< sizeof(dir)-2 && dir[len-1] != '/') { dir[len++] = '/'; dir[len] = '\0'; } if (stat(dir, &st) != 0) // fullpath not exist? { while(len && dir[len-1] == '/') dir[--len] = '\0'; // remove all trailing / pch = strrchr(dir, '/'); if(pch == NULL) return false; *pch = '\0'; if(subfoldercreate(dir)) { *pch = '/'; if (mkdir(dir, 0777) == -1) return false; } else return false; } return true; } bool subfolderremove(const char * fullpath, const char*fp) { struct stat st; if (stat(fullpath, &st) != 0) // fullpath not exist? return false; if(S_ISDIR(st.st_mode)) { DIR_ITER *dir = NULL; char filename[256]; bool cont = true; while(cont) { cont = false; dir = diropen(fullpath); if(dir) { char* bind = fullpath[strlen(fullpath)-1] == '/' ? "":"/"; while (dirnext(dir,filename,&st) == 0) { if (strcmp(filename,".") != 0 && strcmp(filename,"..") != 0) { char currentname[256]; if(S_ISDIR(st.st_mode)) snprintf(currentname, sizeof(currentname), "%s%s%s/", fullpath, bind, filename); else snprintf(currentname, sizeof(currentname), "%s%s%s", fullpath, bind, filename); subfolderremove(currentname, fp); cont = true; break; } } dirclose(dir); } } } return unlink(fullpath) == 0; } char * GetFileName(int i) { return alldirfiles[i]; } s32 filenamescmp(const void *a, const void *b) { /* Compare strings */ return stricmp((char *)a, (char *)b); } int GetAllDirFiles(char * filespath) { int countfiles = 0; struct stat st; DIR_ITER* dir; dir = diropen (filespath); if (dir == NULL) //If empty return 0; while (dirnext(dir,filenames,&st) == 0) { if ((st.st_mode & S_IFDIR) == 0) { // st.st_mode & S_IFDIR indicates a directory snprintf(alldirfiles[countfiles], 70, "%s", filenames); countfiles++; } } dirclose(dir); qsort(alldirfiles, countfiles, sizeof(char[70]), filenamescmp); return countfiles; } bool checkfile(char * path) { FILE * f; f = fopen(path,"r"); if (f) { fclose(f); return true; } return false; }