#define STRCMP(a, op, b) (strcmp((a), (b)) op 0)
#define STRNCMP(a, op, b, n) (strncmp((a), (b), (n)) op 0)
+#define MEMCMP(a, op, b, n) (memcmp((a), (b), (n)) op 0)
#ifdef DEBUG
# define D(x) x
extern void set_prog(const char *p);
extern void vmoan(const char *fmt, va_list ap);
+extern void vmoan_syserr(int err, const char *fmt, va_list ap);
extern PRINTF_LIKE(1, 2) void moan(const char *fmt, ...);
+extern PRINTF_LIKE(2, 3) void moan_syserr(int err, const char *fmt, ...);
extern PRINTF_LIKE(1, 2) NORETURN void bail(const char *fmt, ...);
extern PRINTF_LIKE(2, 3) NORETURN
void bail_syserr(int err, const char *fmt, ...);
extern void sit(double t);
+extern void carefully_write(int fd, const void *buf, size_t sz);
+extern void open_file_on_demand(const char *file, FILE **fp_inout,
+ const char *what);
+extern void check_write(FILE *fp, const char *what);
+extern void carefully_fclose(FILE *fp, const char *what);
+extern off_t device_size(int fd, const char *file, int *blksz_out);
+
enum { RAW, IFO, VOB, BUP };
typedef uint_least32_t ident;
#define MAXFNSZ (1 + 8 + 1 + 12 + 1)
extern void store_filename(char *buf, ident id);
+#define DIF_MUSTVOLINF 1u
+#define DIF_MUSTIFOHASH 2u
+#define MAXIDSZ 99
+extern int dvd_id(char *p, dvd_reader_t *dvd, unsigned f, const char *file);
+
struct banner_progress_item {
struct progress_item _base;
const char *msg;