diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-06-15 18:13:26 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2023-06-15 18:13:26 +0200 |
commit | 8bff2715bfdfd2e6ce0c707f1310b169d4e454d0 (patch) | |
tree | 50c4dfdb2e4daa5b8c94697261ff8081389b449c /lib/sqfs/src/win32/io_file.c | |
parent | c9f37f069c6e294e58c64c9f5ad94f0bd3e2fd02 (diff) |
libcompat: Add a helper to get/set OS error state
On Unix like OSes, this saves/restores errno, on Windows both errno
and GetLastError state are saved/restored.
This should make it simpler to preserve that across function calls.
Additionally, while tracking down uses of GetLastError, some places
where the error code was printed out directly where replaced with
instances of w32_perror.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/sqfs/src/win32/io_file.c')
-rw-r--r-- | lib/sqfs/src/win32/io_file.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/sqfs/src/win32/io_file.c b/lib/sqfs/src/win32/io_file.c index dbd80d8..4d76b94 100644 --- a/lib/sqfs/src/win32/io_file.c +++ b/lib/sqfs/src/win32/io_file.c @@ -60,7 +60,9 @@ static sqfs_object_t *stdio_copy(const sqfs_object_t *base) 0, FALSE, DUPLICATE_SAME_ACCESS); if (!ret) { + os_error_t err = get_os_error_state(); free(copy); + set_os_error_state(err); return NULL; } @@ -163,7 +165,8 @@ int sqfs_open_native_file(sqfs_file_handle_t *out, const char *filename, { int access_flags, creation_mode, share_mode; WCHAR *wpath = NULL; - DWORD length, err; + os_error_t err; + DWORD length; *out = INVALID_HANDLE_VALUE; @@ -209,9 +212,9 @@ int sqfs_open_native_file(sqfs_file_handle_t *out, const char *filename, creation_mode, FILE_ATTRIBUTE_NORMAL, NULL); - err = GetLastError(); + err = get_os_error_state(); free(wpath); - SetLastError(err); + set_os_error_state(err); } return (*out == INVALID_HANDLE_VALUE) ? SQFS_ERROR_IO : 0; @@ -223,7 +226,7 @@ sqfs_file_t *sqfs_open_file(const char *filename, sqfs_u32 flags) size_t namelen, total; LARGE_INTEGER size; sqfs_file_t *base; - DWORD err; + os_error_t err; namelen = strlen(filename); total = sizeof(*file) + 1; @@ -259,10 +262,10 @@ sqfs_file_t *sqfs_open_file(const char *filename, sqfs_u32 flags) base->get_filename = stdio_get_filename; return base; fail: - err = GetLastError(); + err = get_os_error_state(); if (file->fd != INVALID_HANDLE_VALUE) CloseHandle(file->fd); free(file); - SetLastError(err); + set_os_error_state(err); return NULL; } |