9aecc49aa10790c9beff621fee73499c1af246f5
2 #include "dvdcss/dvdcss.h"
4 static void usage(FILE *fp
)
5 { fprintf(fp
, "usage: %s [-b BADFILE] DEVICE\n", prog
); }
7 static dvd_reader_t
*dvd
;
11 static const char *badfile
;
13 static int check_vob(unsigned index
, unsigned titlep
)
15 secaddr start
, end
, pos
, len
;
16 char fn
[MAXFNSZ
], fn2
[MAXFNSZ
];
20 store_filename(fn
, mkident(VOB
, index
, titlep
));
21 start
= UDFFindFile(dvd
, fn
, &len
);
22 if (!start
) return (0);
23 end
= start
+ SECTORS(len
);
25 if (dvdcss_seek(css
, start
, DVDCSS_SEEK_KEY
) < 0) {
27 for (j
= 2; j
< 10; j
++) {
28 store_filename(fn2
, mkident(VOB
, index
, j
));
29 pos
= UDFFindFile(dvd
, fn2
, &len
);
34 open_file_on_demand(badfile
, &badfp
, "uncracked video objects");
35 fprintf(badfp
, "%"PRIuSEC
" %"PRIuSEC
" # %s\n", start
, end
, fn
);
42 int main(int argc
, char *argv
[])
50 opt
= getopt(argc
, argv
, "hb:"); if (opt
< 0) break;
52 case 'h': usage(stderr
); exit(0);
53 case 'b': badfile
= optarg
; break;
54 default: f
|= f_bogus
; break;
57 if (argc
- optind
!= 1) f
|= f_bogus
;
58 if (f
&f_bogus
) { usage(stderr
); exit(2); }
60 if (!badfile
) badfp
= stdout
;
62 setlocale(LC_ALL
, "");
63 progress_init(&progress
);
65 open_dvd(argv
[optind
], 0, &dvd
);
66 css
= dvdcss_open(argv
[optind
]);
68 bail_syserr(errno
, "failed to attach CSS machinery to `%s'",
71 for (j
= 0; j
< 100; j
++) {
72 if (check_vob(j
, 0)) rc
= 1;
73 if (j
&& check_vob(j
, 1)) rc
= 1;
78 progress_free(&progress
);
79 carefully_fclose(badfp
, "uncracked objects file");