int main(int argc, char *argv[]) { MPLS_PL *pl; int opt; int ii, pl_ii; MPLS_PL *pl_list[1000]; struct stat st; char *path = NULL; DIR *dir = NULL; do { opt = getopt(argc, argv, OPTS); switch (opt) { case -1: break; case 'v': verbose = 1; break; case 'l': clip_list = 1; break; case 'i': playlist_info = 1; break; case 'c': chapter_marks = 1; break; case 'p': sub_paths = 1; break; case 'd': dups = 1; break; case 'r': repeats = atoi(optarg); break; case 'f': repeats = 2; dups = 1; seconds = 900; break; case 's': seconds = atoi(optarg); break; default: _usage(argv[0]); break; } } while (opt != -1); if (optind >= argc) { _usage(argv[0]); } for (pl_ii = 0, ii = optind; pl_ii < 1000 && ii < argc; ii++) { if (stat(argv[ii], &st)) { continue; } dir = NULL; if (S_ISDIR(st.st_mode)) { char *main_title = NULL; printf("Directory: %s:\n", argv[ii]); path = str_printf("%s/BDMV/PLAYLIST", argv[ii]); if (path == NULL) { fprintf(stderr, "Failed to find playlist path: %s\n", argv[ii]); continue; } dir = opendir(path); if (dir == NULL) { fprintf(stderr, "Failed to open dir: %s\n", path); free(path); continue; } main_title = nav_find_main_title(argv[ii]); if (main_title != NULL) { printf("Main Title: %s\n", main_title); free(main_title); } else { fprintf(stderr, "Main title search failed\n"); } } if (dir != NULL) { char **dirlist = calloc(10001, sizeof(char*)); struct dirent *ent; int jj = 0; for (ent = readdir(dir); ent != NULL; ent = readdir(dir)) { if (ent->d_name != NULL) { dirlist[jj] = (char*)malloc(strlen(ent->d_name) + 1); strcpy(dirlist[jj], ent->d_name); jj++; } } qsort(dirlist, jj, sizeof(char*), _qsort_str_cmp); for (jj = 0; dirlist[jj] != NULL; jj++) { char *name = NULL; name = str_printf("%s/%s", path, dirlist[jj]); free(dirlist[jj]); if (stat(name, &st)) { free(name); continue; } if (!S_ISREG(st.st_mode)) { free(name); continue; } pl = _process_file(name, pl_list, pl_ii); free(name); if (pl != NULL) { pl_list[pl_ii++] = pl; } } while (ent != NULL); free(dirlist); free(path); } else { pl = _process_file(argv[ii], pl_list, pl_ii); if (pl != NULL) { pl_list[pl_ii++] = pl; } } } // Cleanup for (ii = 0; ii < pl_ii; ii++) { mpls_free(pl_list[ii]); } return 0; }
int main(int argc, char *argv[]) { MPLS_PL *pl; int opt; int ii, pl_ii; MPLS_PL *pl_list[1000]; struct stat st; char *path = NULL; DIR *dir = NULL; do { opt = getopt(argc, argv, OPTS); switch (opt) { case -1: break; case 'v': verbose = 1; break; case 'l': clip_list = 1; break; case 'i': playlist_info = 1; break; case 'c': chapter_marks = 1; break; case 'p': sub_paths = 1; break; case 'P': pip_metadata = 1; break; case 'd': dups = 1; break; case 'r': repeats = atoi(optarg); break; case 'f': repeats = 2; dups = 1; seconds = 900; break; case 's': seconds = atoi(optarg); break; default: _usage(argv[0]); break; } } while (opt != -1); if (optind >= argc) { _usage(argv[0]); } for (pl_ii = 0, ii = optind; pl_ii < 1000 && ii < argc; ii++) { if (stat(argv[ii], &st)) { continue; } dir = NULL; if (S_ISDIR(st.st_mode)) { printf("Directory: %s:\n", argv[ii]); /* drop old ones (do not check for duplicates across directories) */ for (int jj = 0; jj < pl_ii; jj++) { bd_free_mpls(pl_list[jj]); } pl_ii = 0; path = _mk_path(argv[ii], PLAYLIST_DIR); if (path == NULL) { fprintf(stderr, "Failed to find playlist path: %s\n", argv[ii]); continue; } dir = opendir(path); if (dir == NULL) { fprintf(stderr, "Failed to open dir: %s\n", path); free(path); continue; } } if (dir != NULL) { char **dirlist = (char**)calloc(10001, sizeof(char*)); if (!dirlist) { continue; } struct dirent *ent; int jj = 0; for (ent = readdir(dir); ent != NULL && jj < 1000; ent = readdir(dir)) { char *s = (char*)malloc(strlen(ent->d_name) + 1); if (s) { dirlist[jj++] = strcpy(s, ent->d_name); } } qsort(dirlist, jj, sizeof(char*), _qsort_str_cmp); for (jj = 0; dirlist[jj] != NULL && pl_ii < 1000; jj++) { char *name = NULL; name = _mk_path(path, dirlist[jj]); if (name == NULL) { continue; } free(dirlist[jj]); if (stat(name, &st)) { free(name); continue; } if (!S_ISREG(st.st_mode)) { free(name); continue; } pl = _process_file(name, pl_list, pl_ii); free(name); if (pl != NULL) { pl_list[pl_ii++] = pl; } } free(dirlist); free(path); closedir(dir); dir = NULL; } else { pl = _process_file(argv[ii], pl_list, pl_ii); if (pl != NULL) { pl_list[pl_ii++] = pl; } } if (pl_ii >= 999) { fprintf(stderr, "Error: too many play lists given. Output is truncated.\n"); } } // Cleanup for (ii = 0; ii < pl_ii; ii++) { bd_free_mpls(pl_list[ii]); } return 0; }
int main(int argc, char *argv[]) { MPLS_PL *pl; int opt; int ii, pl_ii; MPLS_PL *pl_list[1000]; struct stat st; str_t path = {0,}; DIR *dir = NULL; do { opt = getopt(argc, argv, OPTS); switch (opt) { case -1: break; case 'v': verbose = 1; break; case 'l': clip_list = 1; break; case 'i': playlist_info = 1; break; case 'c': chapter_marks = 1; break; case 'd': dups = 1; break; case 'r': repeats = atoi(optarg); break; case 'f': repeats = 2; dups = 1; seconds = 120; break; case 's': seconds = atoi(optarg); break; default: _usage(argv[0]); break; } } while (opt != -1); if (optind >= argc) { _usage(argv[0]); } for (pl_ii = 0, ii = optind; pl_ii < 1000 && ii < argc; ii++) { if (stat(argv[ii], &st)) { continue; } dir = NULL; if (S_ISDIR(st.st_mode)) { printf("Directory: %s:\n", argv[ii]); _make_path(&path, argv[ii], "PLAYLIST"); if (path.buf == NULL) { fprintf(stderr, "Failed to find playlist path: %s\n", argv[ii]); continue; } dir = opendir(path.buf); if (dir == NULL) { fprintf(stderr, "Failed to open dir: %s\n", path.buf); str_free(&path); continue; } } if (dir != NULL) { char **dirlist = calloc(10001, sizeof(char*)); struct dirent *ent; int jj = 0; for (ent = readdir(dir); ent != NULL; ent = readdir(dir)) { if (ent->d_name != NULL) { dirlist[jj++] = strdup(ent->d_name); } } qsort(dirlist, jj, sizeof(char*), _qsort_str_cmp); for (jj = 0; dirlist[jj] != NULL; jj++) { str_t name = {0,}; str_printf(&name, "%s/%s", path.buf, dirlist[jj]); free(dirlist[jj]); if (stat(name.buf, &st)) { str_free(&name); continue; } if (!S_ISREG(st.st_mode)) { str_free(&name); continue; } pl = _process_file(name.buf, pl_list, pl_ii); str_free(&name); if (pl != NULL) { pl_list[pl_ii++] = pl; } } while (ent != NULL); free(dirlist); str_free(&path); } else { pl = _process_file(argv[ii], pl_list, pl_ii); if (pl != NULL) { pl_list[pl_ii++] = pl; } } } // Cleanup for (ii = 0; ii < pl_ii; ii++) { mpls_free(&pl_list[ii]); } return 0; }