dvd-sector-copy.c: Truncate the event list before processing a lost `stop'.
[dvdrip] / lib.h
CommitLineData
dc53ebfa
MW
1#ifndef LIB_H
2#define LIB_H
3
4#define _GNU_SOURCE
5#define _FILE_OFFSET_BITS 64
6
7#include <assert.h>
8#include <ctype.h>
9#include <errno.h>
10#include <float.h>
11#include <inttypes.h>
12#include <limits.h>
13#include <locale.h>
14#include <math.h>
15#include <stdarg.h>
16#include <stdint.h>
17#include <stdio.h>
18#include <stdlib.h>
19#include <string.h>
20#include <time.h>
21
22#include <unistd.h>
23#include <fcntl.h>
24#include <sys/ioctl.h>
25#include <sys/select.h>
26#include <sys/stat.h>
27#include <sys/time.h>
28
29#include <getopt.h>
30
31#include <linux/fs.h>
32
33#include <dvdread/dvd_reader.h>
34#include <dvdread/dvd_udf.h>
35#include <dvdread/ifo_read.h>
36#include <dvdread/ifo_types.h>
37
38#include "multiprogress.h"
39
40#define CTYPE_HACK(fn, ch) fn((unsigned char)(ch))
41#define ISDIGIT(ch) CTYPE_HACK(isdigit, ch)
42#define ISSPACE(ch) CTYPE_HACK(isspace, ch)
43
44#define STRCMP(a, op, b) (strcmp((a), (b)) op 0)
45#define STRNCMP(a, op, b, n) (strncmp((a), (b), (n)) op 0)
2bbc0426 46#define MEMCMP(a, op, b, n) (memcmp((a), (b), (n)) op 0)
dc53ebfa
MW
47
48#ifdef DEBUG
49# define D(x) x
50#else
51# define D(x)
52#endif
53
54#define N(v) (sizeof(v)/sizeof((v)[0]))
55
56#define SECTORSZ 2048
57#define SECTORS(n) (((n) + (SECTORSZ - 1))/SECTORSZ)
58typedef uint_least32_t secaddr;
59#define PRIuSEC PRIuLEAST32
60#define SECLIMIT 0x00400000
61
62#define PRINTF_LIKE(fmt, dots) __attribute__((format(printf, fmt, dots)))
63#define NORETURN __attribute__((noreturn))
64
65extern const char *prog;
66
67extern void set_prog(const char *p);
68extern void vmoan(const char *fmt, va_list ap);
7ea9ce2b 69extern void vmoan_syserr(int err, const char *fmt, va_list ap);
dc53ebfa 70extern PRINTF_LIKE(1, 2) void moan(const char *fmt, ...);
7ea9ce2b 71extern PRINTF_LIKE(2, 3) void moan_syserr(int err, const char *fmt, ...);
dc53ebfa
MW
72extern PRINTF_LIKE(1, 2) NORETURN void bail(const char *fmt, ...);
73extern PRINTF_LIKE(2, 3) NORETURN
74 void bail_syserr(int err, const char *fmt, ...);
75
76extern void sit(double t);
77
00a5be1d
MW
78extern void carefully_write(int fd, const void *buf, size_t sz);
79extern void open_file_on_demand(const char *file, FILE **fp_inout,
80 const char *what);
81extern void check_write(FILE *fp, const char *what);
82extern void carefully_fclose(FILE *fp, const char *what);
4bd4876f 83extern off_t device_size(int fd, const char *file, int *blksz_out);
00a5be1d 84
dc53ebfa
MW
85enum { RAW, IFO, VOB, BUP };
86typedef uint_least32_t ident;
87
88static inline ident mkident(unsigned kind, unsigned title, unsigned part)
89 { return (((ident)kind << 0) | ((ident)title << 8) | ((ident)part << 16)); }
90static inline unsigned id_kind(ident id) { return ((id >> 0)&0x0ff); }
91static inline unsigned id_title(ident id) { return ((id >> 8)&0x0ff); }
92static inline unsigned id_part(ident id) { return ((id >> 16)&0x0ff); }
93
94#define MAXFNSZ (1 + 8 + 1 + 12 + 1)
95extern void store_filename(char *buf, ident id);
96
9b86c33f
MW
97#define DIF_MUSTVOLINF 1u
98#define DIF_MUSTIFOHASH 2u
99#define MAXIDSZ 99
100extern int dvd_id(char *p, dvd_reader_t *dvd, unsigned f, const char *file);
101
dc53ebfa
MW
102struct banner_progress_item {
103 struct progress_item _base;
104 const char *msg;
105};
106
107extern struct progress_state progress;
108
109extern void show_banner(const char *msg);
110extern void hide_banner(void);
111
112extern void open_dvd(const char *device,
113 int *fd_out, dvd_reader_t **dvd_out);
114
115#endif