]> wimlib.net Git - wimlib/blobdiff - src/util.h
Various portability fixes
[wimlib] / src / util.h
index b459afd8eee8eccd1f00d7e5a1bb7e2d7124f9dc..d87a0e827d16e5c2d80629c84b8af4e5ef3b3769 100644 (file)
 #      define HOT
 #endif /* __GNUC__ */
 
+
+#if 0
+#ifdef WITH_FUSE
+#define atomic_inc(ptr) \
+       __sync_fetch_and_add(ptr, 1)
+
+#define atomic_dec(ptr) \
+       __sync_sub_and_fetch(ptr, 1)
+#endif
+#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 +85,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,18 +155,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 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);