X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Futil.h;h=08a661b8d34572de7e02a37a28406f6335921d24;hp=911b7c5e2cc92e3897320e7d132dfd08abd8fdf8;hb=f5a27d3815fe8e127b42de32bb2eb11abaae5a10;hpb=8191ca50a47773d20e94ffb85bedefe199166484 diff --git a/src/util.h b/src/util.h index 911b7c5e..08a661b8 100644 --- a/src/util.h +++ b/src/util.h @@ -30,6 +30,14 @@ # define HOT #endif /* __GNUC__ */ +#ifdef WITH_FUSE +#define atomic_inc(ptr) \ + __sync_fetch_and_add(ptr, 1) + +#define atomic_dec(ptr) \ + __sync_sub_and_fetch(ptr, 1) +#endif + #ifndef _NTFS_TYPES_H typedef uint8_t u8; typedef uint16_t u16; @@ -52,6 +60,19 @@ typedef unsigned uint; #define swap(a, b) ({typeof(a) _a = a; (a) = (b); (b) = _a;}) #endif +/** + * container_of - cast a member of a structure out to the containing structure + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + */ +#ifndef container_of +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) +#endif + #define ARRAY_LEN(array) (sizeof(array) / sizeof((array)[0])) #define ZERO_ARRAY(array) memset(array, 0, sizeof(array)) @@ -61,9 +82,9 @@ typedef unsigned uint; #ifdef ENABLE_ERROR_MESSAGES extern bool __wimlib_print_errors; -extern void wimlib_error(const char *format, ...) +extern void wimlib_error(const char *format, ...) FORMAT(printf, 1, 2) COLD; -extern void wimlib_error_with_errno(const char *format, ...) +extern void wimlib_error_with_errno(const char *format, ...) FORMAT(printf, 1, 2) COLD; extern void wimlib_warning(const char *format, ...) FORMAT(printf, 1, 2) COLD; @@ -131,14 +152,14 @@ extern char *wimlib_strdup(const char *str); extern char *utf16_to_utf8(const char *utf16_str, size_t utf16_len, size_t *utf8_len_ret); -extern char *utf8_to_utf16(const char *utf8_str, size_t utf8_len, +extern char *utf8_to_utf16(const char *utf8_str, size_t utf8_len, size_t *utf16_len_ret); extern void randomize_byte_array(u8 *p, size_t n); extern void randomize_char_array_with_alnum(char p[], size_t n); -extern const char *path_next_part(const char *path, +extern const char *path_next_part(const char *path, size_t *first_part_len_ret); extern const char *path_basename(const char *path);