X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Futil.h;h=08a661b8d34572de7e02a37a28406f6335921d24;hb=868f9905359573d33f06c19106523535b309273b;hp=1fb1f0998758278d845f4d2261f6fce40348d43f;hpb=b1c4e6a269ae4c969060e33685db12f76a204a58;p=wimlib diff --git a/src/util.h b/src/util.h index 1fb1f099..08a661b8 100644 --- a/src/util.h +++ b/src/util.h @@ -30,17 +30,48 @@ # 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; typedef uint32_t u32; typedef uint64_t u64; +#endif typedef unsigned uint; +#ifndef min #define min(a, b) ({ typeof(a) __a = (a); typeof(b) __b = (b); \ (__a < __b) ? __a : __b; }) +#endif + +#ifndef max #define max(a, b) ({ typeof(a) __a = (a); typeof(b) __b = (b); \ (__a > __b) ? __a : __b; }) +#endif + +#ifndef swap #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])) @@ -51,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; @@ -121,20 +152,20 @@ 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 int sha1sum(const char *filename, void *buf); - -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); +extern const char *path_stream_name(const char *path); + extern void to_parent_name(char buf[], size_t len); extern void print_string(const void *string, size_t len);