#endif /* __WIN32__ */
#ifdef ENABLE_ERROR_MESSAGES
-static bool wimlib_print_errors = false;
+bool wimlib_print_errors = false;
#endif
#if defined(ENABLE_ERROR_MESSAGES) || defined(ENABLE_DEBUG)
= T("Could not rename a file"),
[WIMLIB_ERR_REPARSE_POINT_FIXUP_FAILED]
= T("Unable to complete reparse point fixup"),
+ [WIMLIB_ERR_RESOURCE_NOT_FOUND]
+ = T("A file resource needed to complete the operation was missing from the WIM"),
[WIMLIB_ERR_RESOURCE_ORDER]
= T("The components of the WIM were arranged in an unexpected order"),
[WIMLIB_ERR_SPECIAL_FILE]
= T("The requested operation is unsupported"),
[WIMLIB_ERR_VOLUME_LACKS_FEATURES]
= T("The volume did not support a feature necessary to complete the operation"),
+ [WIMLIB_ERR_WIM_IS_READONLY]
+ = T("The WIM is read-only (file permissions, header flag, or split WIM)"),
[WIMLIB_ERR_WRITE]
= T("Failed to write data to a file"),
[WIMLIB_ERR_XML]
#ifdef ENABLE_CUSTOM_MEMORY_ALLOCATOR
-void *(*wimlib_malloc_func) (size_t) = malloc;
-void (*wimlib_free_func) (void *) = free;
-void *(*wimlib_realloc_func)(void *, size_t) = realloc;
+static void *(*wimlib_malloc_func) (size_t) = malloc;
+static void (*wimlib_free_func) (void *) = free;
+static void *(*wimlib_realloc_func)(void *, size_t) = realloc;
+
+void *
+wimlib_malloc(size_t size)
+{
+ void *ptr = (*wimlib_malloc_func)(size);
+ if (ptr == NULL && size != 0)
+ ERROR("memory exhausted");
+ return ptr;
+}
+
+void
+wimlib_free_memory(void *ptr)
+{
+ (*wimlib_free_func)(ptr);
+}
+
+void *
+wimlib_realloc(void *ptr, size_t size)
+{
+ ptr = (*wimlib_realloc_func)(ptr, size);
+ if (ptr == NULL && size != 0)
+ ERROR("memory exhausted");
+ return ptr;
+}
void *
wimlib_calloc(size_t nmemb, size_t size)
size_t total_size = nmemb * size;
void *p = MALLOC(total_size);
if (p)
- memset(p, 0, total_size);
+ p = memset(p, 0, total_size);
return p;
}
size = strlen(str);
p = MALLOC(size + 1);
if (p)
- memcpy(p, str, size + 1);
+ p = memcpy(p, str, size + 1);
return p;
}
size = wcslen(str);
p = MALLOC((size + 1) * sizeof(wchar_t));
if (p)
- memcpy(p, str, (size + 1) * sizeof(wchar_t));
+ p = wmemcpy(p, str, size + 1);
return p;
}
#endif
#endif /* ENABLE_CUSTOM_MEMORY_ALLOCATOR */
+void *
+memdup(const void *mem, size_t size)
+{
+ void *ptr = MALLOC(size);
+ if (ptr)
+ ptr = memcpy(ptr, mem, size);
+ return ptr;
+}
+
WIMLIBAPI int
wimlib_set_memory_allocator(void *(*malloc_func)(size_t),
void (*free_func)(void *),