X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=tools-util.h;h=d1122f5d1556d34970d5704c06dedb8eb832b583;hb=9d6040c8b60d10f901141df9d739005f3fe0326e;hp=14ced032f1dd3dcff0c06c7bc7658abafb3dcb5f;hpb=e0c54d52f534888d526d6fd3e23b8a706ccc1198;p=bcachefs-tools-debian diff --git a/tools-util.h b/tools-util.h index 14ced03..d1122f5 100644 --- a/tools-util.h +++ b/tools-util.h @@ -2,9 +2,11 @@ #define _TOOLS_UTIL_H #include +#include #include #include #include +#include #include #include #include @@ -15,16 +17,23 @@ #include #include #include -#include "ccan/darray/darray.h" +#include +#include "libbcachefs/darray.h" -void die(const char *, ...); -char *mprintf(const char *, ...); +#define noreturn __attribute__((noreturn)) + +void die(const char *, ...) + __attribute__ ((format (printf, 1, 2))) noreturn; +char *mprintf(const char *, ...) + __attribute__ ((format (printf, 1, 2))); void *xcalloc(size_t, size_t); void *xmalloc(size_t); +void *xrealloc(void *, size_t); void xpread(int, void *, size_t, off_t); -void xpwrite(int, const void *, size_t, off_t); +void xpwrite(int, const void *, size_t, off_t, const char *); struct stat xfstatat(int, const char *, int); struct stat xfstat(int); +struct stat xstat(const char *); #define xopenat(_dirfd, _path, ...) \ ({ \ @@ -37,25 +46,14 @@ struct stat xfstat(int); #define xopen(...) xopenat(AT_FDCWD, __VA_ARGS__) #define xioctl(_fd, _nr, ...) \ -do { \ - if (ioctl((_fd), (_nr), ##__VA_ARGS__)) \ +({ \ + int _ret = ioctl((_fd), (_nr), ##__VA_ARGS__); \ + if (_ret < 0) \ die(#_nr " ioctl error: %m"); \ -} while (0) - -enum units { - BYTES, - SECTORS, - HUMAN_READABLE, -}; - -struct units_buf __pr_units(u64, enum units); - -struct units_buf { - char b[20]; -}; - -#define pr_units(_v, _u) &(__pr_units(_v, _u).b[0]) + _ret; \ +}) +void write_file_str(int, const char *, const char *); char *read_file_str(int, const char *); u64 read_file_u64(int, const char *); @@ -66,15 +64,6 @@ u64 get_size(const char *, int); unsigned get_blocksize(const char *, int); int open_for_format(const char *, bool); -int bcachectl_open(void); - -struct bcache_handle { - int ioctl_fd; - int sysfs_fd; -}; - -struct bcache_handle bcache_fs_open(const char *); - bool ask_yn(void); struct range { @@ -82,14 +71,14 @@ struct range { u64 end; }; -typedef darray(struct range) ranges; +typedef DARRAY(struct range) ranges; static inline void range_add(ranges *data, u64 offset, u64 size) { - darray_append(*data, (struct range) { + darray_push(data, ((struct range) { .start = offset, .end = offset + size - }); + })); } void ranges_sort_merge(ranges *); @@ -105,9 +94,9 @@ struct hole_iter { static inline struct range hole_iter_next(struct hole_iter *iter) { struct range r = { - .start = iter->idx ? iter->r.item[iter->idx - 1].end : 0, - .end = iter->idx < iter->r.size - ? iter->r.item[iter->idx].start : iter->end, + .start = iter->idx ? iter->r.data[iter->idx - 1].end : 0, + .end = iter->idx < iter->r.nr + ? iter->r.data[iter->idx].start : iter->end, }; BUG_ON(r.start > r.end); @@ -118,7 +107,7 @@ static inline struct range hole_iter_next(struct hole_iter *iter) #define for_each_hole(_iter, _ranges, _end, _i) \ for (_iter = (struct hole_iter) { .r = _ranges, .end = _end }; \ - (_iter.idx <= _iter.r.size && \ + (_iter.idx <= _iter.r.nr && \ (_i = hole_iter_next(&_iter), true));) #include @@ -145,8 +134,30 @@ struct fiemap_extent fiemap_iter_next(struct fiemap_iter *); for (fiemap_iter_init(&iter, fd); \ (extent = fiemap_iter_next(&iter)).fe_length;) -const char *strcmp_prefix(const char *, const char *); +char *strcmp_prefix(char *, const char *); + +u32 crc32c(u32, const void *, size_t); + +char *dev_to_name(dev_t); +char *dev_to_path(dev_t); +struct mntent *dev_to_mount(char *); +int dev_mounted(char *); + +#define args_shift(_nr) \ +do { \ + unsigned _n = min((_nr), argc); \ + argc -= _n; \ + argv += _n; \ +} while (0) + +#define arg_pop() \ +({ \ + char *_ret = argc ? argv[0] : NULL; \ + if (_ret) \ + args_shift(1); \ + _ret; \ +}) -unsigned hatoi_validate(const char *, const char *); +struct bpos bpos_parse(char *); #endif /* _TOOLS_UTIL_H */