]> git.sesse.net Git - bcachefs-tools-debian/blob - tools-util.h
update bcache code, fsck improvements
[bcachefs-tools-debian] / tools-util.h
1 #ifndef _TOOLS_UTIL_H
2 #define _TOOLS_UTIL_H
3
4 #include <errno.h>
5 #include <stdbool.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <sys/types.h>
9 #include <unistd.h>
10
11 #include <linux/byteorder.h>
12 #include <linux/kernel.h>
13 #include <linux/log2.h>
14 #include <linux/string.h>
15 #include <linux/types.h>
16
17 #define die(arg, ...)                                   \
18 do {                                                    \
19         fprintf(stderr, arg "\n", ##__VA_ARGS__);       \
20         exit(EXIT_FAILURE);                             \
21 } while (0)
22
23 static inline void *xcalloc(size_t count, size_t size)
24 {
25         void *p = calloc(count, size);
26
27         if (!p)
28                 die("insufficient memory");
29
30         return p;
31 }
32
33 static inline void *xmalloc(size_t size)
34 {
35         void *p = malloc(size);
36
37         if (!p)
38                 die("insufficient memory");
39
40         memset(p, 0, size);
41         return p;
42 }
43
44 static inline void xpread(int fd, void *buf, size_t count, off_t offset)
45 {
46         ssize_t r = pread(fd, buf, count, offset);
47
48         if (r != count)
49                 die("read error (ret %zi)", r);
50 }
51
52 static inline void xpwrite(int fd, const void *buf, size_t count, off_t offset)
53 {
54         ssize_t r = pwrite(fd, buf, count, offset);
55
56         if (r != count)
57                 die("write error (ret %zi err %s)", r, strerror(errno));
58 }
59
60 enum units {
61         BYTES,
62         SECTORS,
63         HUMAN_READABLE,
64 };
65
66 struct units_buf __pr_units(u64, enum units);
67
68 struct units_buf {
69         char    b[20];
70 };
71
72 #define pr_units(_v, _u)        __pr_units(_v, _u).b
73
74 char *read_file_str(int, const char *);
75 u64 read_file_u64(int, const char *);
76
77 ssize_t read_string_list_or_die(const char *, const char * const[],
78                                 const char *);
79
80 u64 get_size(const char *, int);
81 unsigned get_blocksize(const char *, int);
82
83 int bcachectl_open(void);
84
85 struct bcache_handle {
86         int     ioctl_fd;
87         int     sysfs_fd;
88 };
89
90 struct bcache_handle bcache_fs_open(const char *);
91
92 bool ask_yn(void);
93
94 #endif /* _TOOLS_UTIL_H */