Moved _zip_set_win32_error() - now a static function in zip_source_win32file.c
diff --git a/lib/zip_source_win32a.c b/lib/zip_source_win32a.c index 25e11ac..95699e9 100644 --- a/lib/zip_source_win32a.c +++ b/lib/zip_source_win32a.c
@@ -111,10 +111,8 @@ int _win32_rename_temp_a(_zip_source_win32_read_file_t *ctx) { - if (!MoveFileExA(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) { - zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_set_win32_error(GetLastError(), &ctx->win32err)); + if (!MoveFileExA(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) return -1; - } return 0; }
diff --git a/lib/zip_source_win32file.c b/lib/zip_source_win32file.c index 9d1992d..e9cff27 100644 --- a/lib/zip_source_win32file.c +++ b/lib/zip_source_win32file.c
@@ -45,6 +45,7 @@ static int _zip_filetime_to_time_t(FILETIME ft, time_t *t); static int _zip_seek_win32_u(void *h, zip_uint64_t offset, int whence, zip_error_t *error, unsigned long *win32errptr); static int _zip_seek_win32(void *h, zip_int64_t offset, int whence, zip_error_t *error, unsigned long *win32errptr); +static int _zip_set_win32_error(unsigned long win32err, unsigned long *win32errptr); static int _zip_stat_win32(void *h, zip_stat_t *st, _zip_source_win32_read_file_t *ctx); ZIP_EXTERN zip_source_t * @@ -68,6 +69,7 @@ return _zip_source_win32_handle_or_name(NULL, h, start, length, 1, NULL, NULL, error); } + zip_source_t * _zip_source_win32_handle_or_name(const void *fname, HANDLE h, zip_uint64_t start, zip_int64_t len, int closep, const zip_stat_t *st, _zip_source_win32_file_ops_t *ops, zip_error_t *error) { @@ -136,6 +138,7 @@ return zs; } + zip_int64_t _win32_read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) { @@ -161,7 +164,11 @@ zip_error_set(&ctx->error, ZIP_ER_WRITE, _zip_set_win32_error(GetLastError(), &ctx->win32err)); } ctx->hout = INVALID_HANDLE_VALUE; - return ctx->ops->op_rename_temp(ctx); + if (ctx->ops->op_rename_temp(ctx) < 0) { + zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_set_win32_error(GetLastError(), &ctx->win32err)); + return -1; + } + return 0; } case ZIP_SOURCE_CLOSE: @@ -391,6 +398,7 @@ } } + int _win32_create_temp_file(_zip_source_win32_read_file_t *ctx) { @@ -422,6 +430,7 @@ return 0; } + int _zip_seek_win32_u(HANDLE h, zip_uint64_t offset, int whence, zip_error_t *error, DWORD *win32errptr) { @@ -465,6 +474,36 @@ int +_zip_set_win32_error(DWORD win32err, DWORD *win32errptr) +{ + /* + Note: This list isn't exhaustive, but should cover common cases. + */ + if (win32errptr != NULL) { + *win32errptr = win32err; + } + switch (win32err) { + case ERROR_INVALID_PARAMETER: + return EINVAL; + case ERROR_FILE_NOT_FOUND: + return ENOENT; + case ERROR_INVALID_HANDLE: + return EBADF; + case ERROR_ACCESS_DENIED: + return EACCES; + case ERROR_FILE_EXISTS: + return EEXIST; + case ERROR_TOO_MANY_OPEN_FILES: + return EMFILE; + case ERROR_DISK_FULL: + return ENOSPC; + default: + return 0; + } +} + + +int _zip_stat_win32(HANDLE h, zip_stat_t *st, _zip_source_win32_read_file_t *ctx) { FILETIME mtimeft; @@ -502,35 +541,6 @@ int -_zip_set_win32_error(DWORD win32err, DWORD *win32errptr) -{ - /* - Note: This list isn't exhaustive, but should cover common cases. - */ - if (win32errptr != NULL) { - *win32errptr = win32err; - } - switch (win32err) { - case ERROR_INVALID_PARAMETER: - return EINVAL; - case ERROR_FILE_NOT_FOUND: - return ENOENT; - case ERROR_INVALID_HANDLE: - return EBADF; - case ERROR_ACCESS_DENIED: - return EACCES; - case ERROR_FILE_EXISTS: - return EEXIST; - case ERROR_TOO_MANY_OPEN_FILES: - return EMFILE; - case ERROR_DISK_FULL: - return ENOSPC; - default: - return 0; - } -} - -int _zip_filetime_to_time_t(FILETIME ft, time_t *t) { /*
diff --git a/lib/zip_source_win32w.c b/lib/zip_source_win32w.c index aeb6542..e5e8ceb 100644 --- a/lib/zip_source_win32w.c +++ b/lib/zip_source_win32w.c
@@ -111,10 +111,8 @@ int _win32_rename_temp_w(_zip_source_win32_read_file_t *ctx) { - if (!MoveFileExW(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) { - zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_set_win32_error(GetLastError(), &ctx->win32err)); + if (!MoveFileExW(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING)) return -1; - } return 0; }
diff --git a/lib/zipint.h b/lib/zipint.h index 0570d16..589a1ef 100644 --- a/lib/zipint.h +++ b/lib/zipint.h
@@ -608,7 +608,6 @@ int _zip_write(zip_t *za, const void *data, zip_uint64_t length); #ifdef _WIN32 -int _zip_set_win32_error(unsigned long win32err, unsigned long *win32errptr); zip_source_t *_zip_source_win32_handle_or_name(const void *fname, void *h, zip_uint64_t start, zip_int64_t len, int closep, const zip_stat_t *st, _zip_source_win32_file_ops_t *ops, zip_error_t *error); #endif