#include #include #include #include int istable11char(char c) { return (('0' <= c && c <= '9') || ('A' <= c && c <= 'Z') || ('_' == c)) ; } int gooddir(const struct dirent *testd) { char *filname = testd->d_name ; return(isdigit(filname[0]) && filname[0] != '0' && isdigit(filname[1]) && isdigit(filname[2]) && istable11char(filname[3]) && istable11char(filname[4]) && istable11char(filname[5]) && istable11char(filname[6]) && istable11char(filname[7]) && filname[8] == '\0') ; } int goodfile(const struct dirent *testd) { char *filname = testd->d_name ; return(istable11char(filname[0]) && istable11char(filname[1]) && istable11char(filname[2]) && istable11char(filname[3]) && isdigit(filname[4]) && isdigit(filname[5]) && isdigit(filname[6]) && isdigit(filname[7]) && (filname[4] != '0' || filname[5] != '0' || filname[6] != '0' || filname[7] != '0') && filname[8] == '.' && istable11char(filname[9]) && istable11char(filname[10]) && istable11char(filname[11]) && filname[12] == '\0' ) ; } int objectsort(const void *A, const void *B) { int res ; struct dirent *Adir, *Bdir ; Adir = *((struct dirent **)A ); Bdir = *((struct dirent **)B ); res = strncmp(&(Adir->d_name[4]), &(Bdir->d_name[4]), 4) ; if (!res) res = strcoll(Adir->d_name, Bdir->d_name) ; return res ; } int main(int argc, char *argv[]) { int numdirs, dirp ; struct dirent **dirlist ; numdirs = scandir("DCIM", &dirlist, gooddir, alphasort) ; for (dirp=0; dirpd_name) ; sprintf(dcfdir, "DCIM/%s", dirlist[dirp]->d_name) ; numfils = scandir(dcfdir, &fillist, goodfile, objectsort) ; for (filp = 0; filp < numfils; ++filp) { if(strncmp(&fillist[filp]->d_name[4], objname, 4)) { strncpy(objname, &fillist[filp]->d_name[4], 4) ; fprintf(stdout, " DCF Object name: %4s\n", objname) ; } fprintf(stdout, " DCF Filename: %s\n", fillist[filp]->d_name) ; } fputc('\n', stdout) ; } }