X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fresource.c;h=ee2b2941c8448ed13821855e9cb5a65669f49e68;hp=69a531fbce354309867ca3bc2cc42689517ab983;hb=8d2bd90a2c9a151edc1619bf35be46b2fdda3e36;hpb=ebd6c0ec0ff47ac18af4ef918fd78fb8d9f19540 diff --git a/src/resource.c b/src/resource.c index 69a531fb..ee2b2941 100644 --- a/src/resource.c +++ b/src/resource.c @@ -30,16 +30,24 @@ #include "xpress.h" #include "sha1.h" +#ifdef __WIN32__ +# include "win32.h" +#endif + #include #include #include #include #ifdef WITH_NTFS_3G -#include -#include -#include -#include +# include +# include +# include +# include +#endif + +#if defined(__WIN32__) && !defined(INVALID_HANDLE_VALUE) +# define INVALID_HANDLE_VALUE ((HANDLE)(-1)) #endif /* @@ -60,10 +68,11 @@ * * Returns zero on success, nonzero on failure. */ -static int read_compressed_resource(FILE *fp, u64 resource_compressed_size, - u64 resource_uncompressed_size, - u64 resource_offset, int resource_ctype, - u64 len, u64 offset, u8 contents_ret[]) +static int +read_compressed_resource(FILE *fp, u64 resource_compressed_size, + u64 resource_uncompressed_size, + u64 resource_offset, int resource_ctype, + u64 len, u64 offset, void *contents_ret) { DEBUG2("comp size = %"PRIu64", uncomp size = %"PRIu64", " @@ -207,7 +216,7 @@ static int read_compressed_resource(FILE *fp, u64 resource_compressed_size, /* Pointer to current position in the output buffer for uncompressed * data. */ - u8 *out_p = (u8*)contents_ret; + u8 *out_p = contents_ret; /* Buffer for compressed data. While most compressed chunks will have a * size much less than WIM_CHUNK_SIZE, WIM_CHUNK_SIZE - 1 is the maximum @@ -279,9 +288,9 @@ static int read_compressed_resource(FILE *fp, u64 resource_compressed_size, bool is_partial_chunk = (partial_chunk_size != uncompressed_chunk_size); - DEBUG2("start_offset = %u, end_offset = %u", start_offset, - end_offset); - DEBUG2("partial_chunk_size = %u", partial_chunk_size); + DEBUG2("start_offset = %"PRIu64", end_offset = %"PRIu64"", + start_offset, end_offset); + DEBUG2("partial_chunk_size = %"PRIu64"", partial_chunk_size); /* This is undocumented, but chunks can be uncompressed. This * appears to always be the case when the compressed chunk size @@ -349,8 +358,8 @@ err: /* * Reads uncompressed data from an open file stream. */ -int read_uncompressed_resource(FILE *fp, u64 offset, u64 len, - u8 contents_ret[]) +int +read_uncompressed_resource(FILE *fp, u64 offset, u64 len, void *contents_ret) { if (fseeko(fp, offset, SEEK_SET) != 0) { ERROR("Failed to seek to byte %"PRIu64" of input file " @@ -374,7 +383,8 @@ int read_uncompressed_resource(FILE *fp, u64 offset, u64 len, /* Reads the contents of a struct resource_entry, as represented in the on-disk * format, from the memory pointed to by @p, and fills in the fields of @entry. * A pointer to the byte after the memory read at @p is returned. */ -const u8 *get_resource_entry(const u8 *p, struct resource_entry *entry) +const u8 * +get_resource_entry(const u8 *p, struct resource_entry *entry) { u64 size; u8 flags; @@ -404,7 +414,8 @@ const u8 *get_resource_entry(const u8 *p, struct resource_entry *entry) /* Copies the struct resource_entry @entry to the memory pointed to by @p in the * on-disk format. A pointer to the byte after the memory written at @p is * returned. */ -u8 *put_resource_entry(u8 *p, const struct resource_entry *entry) +u8 * +put_resource_entry(u8 *p, const struct resource_entry *entry) { p = put_u56(p, entry->size); p = put_u8(p, entry->flags); @@ -414,7 +425,8 @@ u8 *put_resource_entry(u8 *p, const struct resource_entry *entry) } #ifdef WITH_FUSE -static FILE *wim_get_fp(WIMStruct *w) +static FILE * +wim_get_fp(WIMStruct *w) { pthread_mutex_lock(&w->fp_tab_mutex); FILE *fp; @@ -437,7 +449,8 @@ out: return fp; } -static int wim_release_fp(WIMStruct *w, FILE *fp) +static int +wim_release_fp(WIMStruct *w, FILE *fp) { int ret = 0; FILE **fp_tab; @@ -464,7 +477,7 @@ out: pthread_mutex_unlock(&w->fp_tab_mutex); return ret; } -#endif +#endif /* !WITH_FUSE */ /* * Reads some data from the resource corresponding to a WIM lookup table entry. @@ -476,8 +489,9 @@ out: * * Returns zero on success, nonzero on failure. */ -int read_wim_resource(const struct wim_lookup_table_entry *lte, u8 buf[], - size_t size, u64 offset, int flags) +int +read_wim_resource(const struct wim_lookup_table_entry *lte, void *buf, + size_t size, u64 offset, int flags) { int ctype; int ret = 0; @@ -558,12 +572,12 @@ int read_wim_resource(const struct wim_lookup_table_entry *lte, u8 buf[], if (fp != lte->file_on_disk_fp) fclose(fp); break; -#if defined(__CYGWIN__) || defined(__WIN32__) +#ifdef __WIN32__ case RESOURCE_WIN32: - wimlib_assert(lte->file_on_disk_fp != NULL); - DEBUG("Calling win32_read_file()"); - ret = win32_read_file(lte->file_on_disk, lte->file_on_disk_fp, - offset, size, buf); + wimlib_assert(lte->win32_file_on_disk_fp != INVALID_HANDLE_VALUE); + ret = win32_read_file(lte->win32_file_on_disk, + lte->win32_file_on_disk_fp, offset, size, + buf); break; #endif case RESOURCE_IN_ATTACHED_BUFFER: @@ -581,7 +595,7 @@ int read_wim_resource(const struct wim_lookup_table_entry *lte, u8 buf[], if (ntfs_attr_pread(lte->attr, offset, size, buf) != size) { ERROR_WITH_ERRNO("Error reading NTFS attribute " "at `%s'", - lte->ntfs_loc->path_utf8); + lte->ntfs_loc->path); ret = WIMLIB_ERR_NTFS_3G; } break; @@ -604,8 +618,9 @@ int read_wim_resource(const struct wim_lookup_table_entry *lte, u8 buf[], * * Returns 0 on success; nonzero on failure. */ -int read_full_wim_resource(const struct wim_lookup_table_entry *lte, u8 buf[], - int flags) +int +read_full_wim_resource(const struct wim_lookup_table_entry *lte, + void *buf, int flags) { return read_wim_resource(lte, buf, wim_resource_size(lte), 0, flags); } @@ -616,10 +631,11 @@ int read_full_wim_resource(const struct wim_lookup_table_entry *lte, u8 buf[], * * @extract_chunk is a function that is called to extract each chunk of the * resource. */ -int extract_wim_resource(const struct wim_lookup_table_entry *lte, - u64 size, - extract_chunk_func_t extract_chunk, - void *extract_chunk_arg) +int +extract_wim_resource(const struct wim_lookup_table_entry *lte, + u64 size, + extract_chunk_func_t extract_chunk, + void *extract_chunk_arg) { u64 bytes_remaining = size; u8 buf[min(WIM_CHUNK_SIZE, bytes_remaining)]; @@ -664,9 +680,10 @@ int extract_wim_resource(const struct wim_lookup_table_entry *lte, * and on short writes. * * Returns short count and set errno on failure. */ -static ssize_t full_write(int fd, const void *buf, size_t n) +static ssize_t +full_write(int fd, const void *buf, size_t n) { - const char *p = buf; + const void *p = buf; ssize_t ret; ssize_t total = 0; @@ -684,7 +701,8 @@ static ssize_t full_write(int fd, const void *buf, size_t n) return total; } -int extract_wim_chunk_to_fd(const u8 *buf, size_t len, u64 offset, void *arg) +int +extract_wim_chunk_to_fd(const void *buf, size_t len, u64 offset, void *arg) { int fd = *(int*)arg; ssize_t ret = full_write(fd, buf, len); @@ -706,7 +724,8 @@ int extract_wim_chunk_to_fd(const u8 *buf, size_t len, u64 offset, void *arg) * * (This function is confusing and should be refactored somehow.) */ -int copy_resource(struct wim_lookup_table_entry *lte, void *wim) +int +copy_resource(struct wim_lookup_table_entry *lte, void *wim) { WIMStruct *w = wim; int ret;