void parse_directory(const char *dirpath) { DIR *dir; struct dirent *dentry; unsigned i; char *newpath, *extension; struct cue cue; dir = opendir(dirpath); if(!dir) return; for(;;) { dentry = readdir(dir); if(!dentry) break; if(dentry->d_name[0]=='.') { if(dentry->d_namlen==1 ||(dentry->d_namlen==2 && dentry->d_name[1]=='.')) continue; } asprintf(&newpath, "%s/%s", dirpath, dentry->d_name); extension = strrchr(dentry->d_name, '.'); if(extension && !strcasecmp(extension+1, "cue")) { cue_from_file(&cue, newpath); export_cue_libsndfile(&cue, dirpath); } else { parse_directory(newpath); } free(newpath); } closedir(dir); }
int cue_get_ntracks(const char *filename) { struct cue_sheet *cd = cue_from_file(filename); if (!cd) return -1; size_t n = cd->num_tracks; cue_free(cd); return n; }