X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=tools-util.h;h=7a04c1080beb9ae5dc0df82ae40579ad3c20c7d4;hb=3a0cc86e767b95366b9cbdba7a1453454f1b5a41;hp=d6814bcd971d40468279cc9052ae8b7b0ef91be2;hpb=da730dc67c1bd10842c49a1534fe23e0d8fdb4be;p=bcachefs-tools-debian diff --git a/tools-util.h b/tools-util.h index d6814bc..7a04c10 100644 --- a/tools-util.h +++ b/tools-util.h @@ -18,16 +18,21 @@ #include #include #include -#include "ccan/darray/darray.h" +#include "libbcachefs/bcachefs.h" +#include "libbcachefs/bbpos.h" +#include "libbcachefs/darray.h" -void die(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 *); @@ -50,31 +55,17 @@ struct stat xstat(const char *); _ret; \ }) -int printf_pad(unsigned pad, const char * fmt, ...); - -enum units { - BYTES, - SECTORS, - HUMAN_READABLE, -}; - -struct units_buf __pr_units(s64, enum units); - -struct units_buf { - char b[20]; -}; - -#define pr_units(_v, _u) &(__pr_units(_v, _u).b[0]) - +void write_file_str(int, const char *, const char *); char *read_file_str(int, const char *); u64 read_file_u64(int, const char *); ssize_t read_string_list_or_die(const char *, const char * const[], const char *); -u64 get_size(const char *, int); -unsigned get_blocksize(const char *, int); -int open_for_format(const char *, bool); +u64 get_size(int); +unsigned get_blocksize(int); +struct dev_opts; +int open_for_format(struct dev_opts *, bool); bool ask_yn(void); @@ -83,14 +74,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 *); @@ -106,9 +97,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); @@ -119,14 +110,13 @@ 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 struct fiemap_iter { - struct fiemap f; - struct fiemap_extent fe[1024]; + struct fiemap *f; unsigned idx; int fd; }; @@ -135,11 +125,20 @@ static inline void fiemap_iter_init(struct fiemap_iter *iter, int fd) { memset(iter, 0, sizeof(*iter)); - iter->f.fm_extent_count = ARRAY_SIZE(iter->fe); - iter->f.fm_length = FIEMAP_MAX_OFFSET; + iter->f = xmalloc(sizeof(struct fiemap) + + sizeof(struct fiemap_extent) * 1024); + + iter->f->fm_extent_count = 1024; + iter->f->fm_length = FIEMAP_MAX_OFFSET; iter->fd = fd; } +static inline void fiemap_iter_exit(struct fiemap_iter *iter) +{ + free(iter->f); + memset(iter, 0, sizeof(*iter)); +} + struct fiemap_extent fiemap_iter_next(struct fiemap_iter *); #define fiemap_for_each(fd, iter, extent) \ @@ -148,8 +147,6 @@ struct fiemap_extent fiemap_iter_next(struct fiemap_iter *); char *strcmp_prefix(char *, const char *); -unsigned hatoi_validate(const char *, const char *); - u32 crc32c(u32, const void *, size_t); char *dev_to_name(dev_t); @@ -172,4 +169,7 @@ do { \ _ret; \ }) +struct bpos bpos_parse(char *); +struct bbpos bbpos_parse(char *); + #endif /* _TOOLS_UTIL_H */