chiark / gitweb /
dvd-cache-keys.c: Move the existence check into `kick_vob'.
[dvdrip] / dvd-cache-keys.c
1 #include "lib.h"
2
3 static void usage(FILE *fp) { fprintf(fp, "usage: %s DEVICE\n", prog); }
4
5 static dvd_reader_t *dvd;
6
7 static void kick_vob(unsigned index, unsigned titlep)
8 {
9   char fn[MAXFNSZ];
10   dvd_file_t *vob;
11   secaddr start, len;
12
13   store_filename(fn, mkident(VOB, index, titlep));
14   start = UDFFindFile(dvd, fn, &len);
15   if (!start) return;
16
17   vob = DVDOpenFile(dvd, index,
18                     titlep ? DVD_READ_TITLE_VOBS : DVD_READ_MENU_VOBS);
19   if (!vob) bail("failed to open %s %d", titlep ? "title" : "menu", index);
20   DVDCloseFile(vob);
21 }
22
23 int main(int argc, char *argv[])
24 {
25   int opt;
26   unsigned i, f = 0;
27   secaddr start, len;
28 #define f_bogus 1u
29
30   set_prog(argv[0]);
31   for (;;) {
32     opt = getopt(argc, argv, "h"); if (opt < 0) break;
33     switch (opt) {
34       case 'h': usage(stderr); exit(0);
35       default: f |= f_bogus; break;
36     }
37   }
38   if (argc - optind != 1) f |= f_bogus;
39   if (f&f_bogus) { usage(stderr); exit(2); }
40
41   setlocale(LC_ALL, "");
42   progress_init(&progress);
43
44   open_dvd(argv[optind], 0, &dvd);
45
46   for (i = 0; i < 100; i++) {
47     kick_vob(i, 0);
48     if (i) kick_vob(i, 1);
49   }
50
51   if (dvd) DVDClose(dvd);
52   progress_free(&progress);
53   return (0);
54 }