X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;ds=inline;f=include%2Fwimlib%2Futil.h;h=7b3e724a68ce677859eaa44ddf552cdf3ca1c6c0;hb=30cfd915ede8a2b24b693525ff835b2f03220cc9;hp=177e1190f94a029df32a05e2eb4758a509b2a113;hpb=e8c3ca2d1d0cac3d64985b45a9f654d2029a7518;p=wimlib diff --git a/include/wimlib/util.h b/include/wimlib/util.h index 177e1190..7b3e724a 100644 --- a/include/wimlib/util.h +++ b/include/wimlib/util.h @@ -50,20 +50,32 @@ #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) #ifdef ENABLE_CUSTOM_MEMORY_ALLOCATOR -extern void *(*wimlib_malloc_func)(size_t); -extern void (*wimlib_free_func)(void *); -extern void *(*wimlib_realloc_func)(void *, size_t); -extern void *wimlib_calloc(size_t nmemb, size_t size); +extern void * +wimlib_malloc(size_t) _malloc_attribute; + +extern void +wimlib_free_memory(void *p); + +extern void * +wimlib_realloc(void *, size_t) _warn_unused_result_attribute; + +extern void * +wimlib_calloc(size_t nmemb, size_t size) _malloc_attribute; + #ifdef __WIN32__ -extern wchar_t *wimlib_wcsdup(const wchar_t *str); +extern wchar_t * +wimlib_wcsdup(const wchar_t *str) _malloc_attribute; + #endif -extern char *wimlib_strdup(const char *str); -# define MALLOC wimlib_malloc_func -# define FREE wimlib_free_func -# define REALLOC wimlib_realloc_func +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 WSTRDUP wimlib_wcsdup +# define WCSDUP wimlib_wcsdup #else /* ENABLE_CUSTOM_MEMORY_ALLOCATOR */ # include # include @@ -72,9 +84,11 @@ extern char *wimlib_strdup(const char *str); # define REALLOC realloc # define CALLOC calloc # define STRDUP strdup -# define WSTRDUP wcsdup +# define WCSDUP wcsdup #endif /* !ENABLE_CUSTOM_MEMORY_ALLOCATOR */ +extern void * +memdup(const void *mem, size_t size) _malloc_attribute; /* util.c */ extern void @@ -108,4 +122,27 @@ hash_u64(u64 n) return n * 0x9e37fffffffc0001ULL; } +/* 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 + * OS_PREFERRED_PATH_SEPARATOR) + * + * OS_PREFERRED_PATH_SEPARATOR - preferred (or only) path separator on the + * operating system. Used when constructing filesystem paths to extract or + * archive. + * + * WIM_PATH_SEPARATOR - character treated as path separator for WIM paths. + * Currently needs to be '/' on UNIX for the WIM mounting code to work properly. + */ + +#ifdef __WIN32__ +# define OS_PREFERRED_PATH_SEPARATOR L'\\' +# define is_any_path_separator(c) ((c) == L'/' || (c) == L'\\') +#else +# define OS_PREFERRED_PATH_SEPARATOR '/' +# define is_any_path_separator(c) ((c) == '/' || (c) == '\\') +#endif + +#define WIM_PATH_SEPARATOR WIMLIB_WIM_PATH_SEPARATOR + #endif /* _WIMLIB_UTIL_H */