]> wimlib.net Git - wimlib/blobdiff - include/wimlib/util.h
WIMStruct: Rename 'deletion_occurred' to 'image_deletion_occurred'
[wimlib] / include / wimlib / util.h
index 646fdafc768b6b98560d8364eee236e8bdbe5ed9..0aa40d1bbdfe9208bd24cbbd5376a0b02cec66d3 100644 (file)
@@ -5,21 +5,6 @@
 #include "wimlib/compiler.h"
 
 #include <stdio.h>
-#include <stddef.h>
-
-#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
 /* Used for buffering FILE IO in a few places */
 #define BUFFER_SIZE 32768
 
-#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
+/* Maximum number of array elements to allocate on the stack (used in various
+ * places when large temporary buffers are needed).  */
+#define STACK_MAX 32768
 
-#ifdef ENABLE_CUSTOM_MEMORY_ALLOCATOR
 extern void *
 wimlib_malloc(size_t) _malloc_attribute;
 
@@ -57,7 +43,7 @@ extern void
 wimlib_free_memory(void *p);
 
 extern void *
-wimlib_realloc(void *, size_t) _warn_unused_result_attribute;
+wimlib_realloc(void *, size_t);
 
 extern void *
 wimlib_calloc(size_t nmemb, size_t size) _malloc_attribute;
@@ -70,27 +56,32 @@ wimlib_wcsdup(const wchar_t *str) _malloc_attribute;
 extern char *
 wimlib_strdup(const char *str) _malloc_attribute;
 
-#  define      MALLOC  wimlib_malloc
-#  define      FREE    wimlib_free_memory
-#  define      REALLOC wimlib_realloc
-#  define      CALLOC  wimlib_calloc
-#  define      STRDUP  wimlib_strdup
-#  define      WCSDUP  wimlib_wcsdup
-#else /* ENABLE_CUSTOM_MEMORY_ALLOCATOR */
-#  include <stdlib.h>
-#  include <string.h>
-#  define      MALLOC  malloc
-#  define      FREE    free
-#  define      REALLOC realloc
-#  define      CALLOC  calloc
-#  define      STRDUP  strdup
-#  define       WCSDUP  wcsdup
-#endif /* !ENABLE_CUSTOM_MEMORY_ALLOCATOR */
+extern void *
+wimlib_aligned_malloc(size_t size, size_t alignment) _malloc_attribute;
+
+extern void
+wimlib_aligned_free(void *ptr);
+
+#define        MALLOC  wimlib_malloc
+#define        FREE    wimlib_free_memory
+#define        REALLOC wimlib_realloc
+#define        CALLOC  wimlib_calloc
+#define        STRDUP  wimlib_strdup
+#define        WCSDUP  wimlib_wcsdup
+#define        ALIGNED_MALLOC  wimlib_aligned_malloc
+#define        ALIGNED_FREE    wimlib_aligned_free
 
 extern void *
 memdup(const void *mem, size_t size) _malloc_attribute;
 
-/* util.c */
+#ifndef HAVE_MEMPCPY
+extern void *
+mempcpy(void *dst, const void *src, size_t n);
+#endif
+
+extern size_t
+utf16le_strlen(const utf16lechar *s);
+
 extern void
 randomize_byte_array(u8 *p, size_t n);
 
@@ -100,20 +91,11 @@ randomize_char_array_with_alnum(tchar p[], size_t n);
 extern void
 print_byte_field(const u8 field[], size_t len, FILE *out);
 
-static inline u32
-bsr32(u32 n)
+static inline bool
+is_power_of_2(unsigned long n)
 {
-#if defined(__x86__) || defined(__x86_64__)
-       asm("bsrl %0, %0;"
-                       : "=r"(n)
-                       : "0" (n));
-       return n;
-#else
-       u32 pow = 0;
-       while ((n >>= 1) != 0)
-               pow++;
-       return pow;
-#endif
+       return (n != 0 && (n & (n - 1)) == 0);
+
 }
 
 static inline u64
@@ -122,6 +104,17 @@ hash_u64(u64 n)
        return n * 0x9e37fffffffc0001ULL;
 }
 
+static inline int
+cmp_u64(u64 n1, u64 n2)
+{
+       if (n1 < n2)
+               return -1;
+       else if (n1 > n2)
+               return 1;
+       else
+               return 0;
+}
+
 /* is_any_path_separator() - characters treated as path separators in WIM path
  * specifications and capture configuration files (the former will be translated
  * to WIM_PATH_SEPARATOR; the latter will be translated to
@@ -143,7 +136,6 @@ hash_u64(u64 n)
 #  define is_any_path_separator(c) ((c) == '/' || (c) == '\\')
 #endif
 
-#define WIM_PATH_SEPARATOR OS_PREFERRED_PATH_SEPARATOR
-
+#define WIM_PATH_SEPARATOR WIMLIB_WIM_PATH_SEPARATOR
 
 #endif /* _WIMLIB_UTIL_H */