diff options
Diffstat (limited to 'test/test_filesystem.c')
-rw-r--r-- | test/test_filesystem.c | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/test/test_filesystem.c b/test/test_filesystem.c index 4a1ad4f..40fc9a2 100644 --- a/test/test_filesystem.c +++ b/test/test_filesystem.c @@ -1,13 +1,13 @@ -// Copyright 2020-2023 David Robillard <d@drobilla.net> +// Copyright 2020-2024 David Robillard <d@drobilla.net> // SPDX-License-Identifier: ISC #undef NDEBUG -#include "zix/allocator.h" -#include "zix/filesystem.h" -#include "zix/path.h" -#include "zix/status.h" -#include "zix/string_view.h" +#include <zix/allocator.h> +#include <zix/filesystem.h> +#include <zix/path.h> +#include <zix/status.h> +#include <zix/string_view.h> #ifndef _WIN32 # include <unistd.h> @@ -64,6 +64,10 @@ test_canonical_path(void) char* const temp_dir = create_temp_dir("zixXXXXXX"); assert(temp_dir); + char* const sub_dir = zix_path_join(NULL, temp_dir, "sub"); + assert(!zix_create_directory(sub_dir)); + assert(zix_file_type(temp_dir) == ZIX_FILE_TYPE_DIRECTORY); + char* const file_path = zix_path_join(NULL, temp_dir, "zix_test_file"); assert(file_path); @@ -96,10 +100,10 @@ test_canonical_path(void) // Test dot segment resolution - char* const parent_dir_1 = zix_path_join(NULL, temp_dir, ".."); + char* const parent_dir_1 = zix_path_join(NULL, sub_dir, ".."); assert(parent_dir_1); - const ZixStringView parent_view = zix_path_parent_path(temp_dir); + const ZixStringView parent_view = zix_path_parent_path(sub_dir); char* const parent_dir_2 = zix_string_view_copy(NULL, parent_view); assert(parent_dir_2); assert(parent_dir_2[0]); @@ -120,6 +124,7 @@ test_canonical_path(void) // Clean everything up assert(!zix_remove(file_path)); + assert(!zix_remove(sub_dir)); assert(!zix_remove(temp_dir)); free(real_parent_dir_2); @@ -127,6 +132,7 @@ test_canonical_path(void) free(parent_dir_2); free(parent_dir_1); free(file_path); + free(sub_dir); free(temp_dir); } @@ -161,16 +167,19 @@ test_file_type(void) if (sock >= 0) { const socklen_t addr_len = sizeof(struct sockaddr_un); struct sockaddr_un* const addr = (struct sockaddr_un*)calloc(1, addr_len); + assert(addr); - addr->sun_family = AF_UNIX; - strncpy(addr->sun_path, file_path, sizeof(addr->sun_path) - 1); + if (strlen(file_path) < sizeof(addr->sun_path)) { + addr->sun_family = AF_UNIX; + strncpy(addr->sun_path, file_path, sizeof(addr->sun_path) - 1); - const int fd = bind(sock, (struct sockaddr*)addr, addr_len); - if (fd >= 0) { - assert(zix_file_type(file_path) == ZIX_FILE_TYPE_SOCKET); - assert(!zix_remove(file_path)); - close(fd); - } + const int fd = bind(sock, (struct sockaddr*)addr, addr_len); + if (fd >= 0) { + assert(zix_file_type(file_path) == ZIX_FILE_TYPE_SOCKET); + assert(!zix_remove(file_path)); + close(fd); + } + } // otherwise, TMPDIR is oddly long, skip test close(sock); free(addr); @@ -241,7 +250,8 @@ write_to_path(const char* const path, const char* const contents) const size_t len = strlen(contents); fwrite(contents, 1, len, f); - ret = fflush(f) ? errno : ferror(f) ? EBADF : fclose(f) ? errno : 0; + ret = fflush(f) ? errno : ferror(f) ? EBADF : 0; + ret = (fclose(f) && !ret) ? errno : ret; } return ret; @@ -257,9 +267,7 @@ test_copy_file(const char* data_file_path) assert(tmp_file_path); assert(copy_path); - if (!data_file_path) { - data_file_path = tmp_file_path; - } + data_file_path = data_file_path ? data_file_path : tmp_file_path; assert(!write_to_path(tmp_file_path, "test\n")); @@ -391,6 +399,7 @@ visit(const char* const path, const char* const name, void* const data) if (new_names) { char* const name_copy = (char*)calloc(name_len + 1, 1); + assert(name_copy); memcpy(name_copy, name, name_len + 1); file_list->names = new_names; @@ -691,10 +700,11 @@ int main(const int argc, char** const argv) { // Try to find some existing data file that's ideally not on a tmpfs - const char* data_file_path = (argc > 1) ? argv[1] : "build.ninja"; - if (zix_file_type(data_file_path) != ZIX_FILE_TYPE_REGULAR) { - data_file_path = NULL; - } + const char* const default_file_path = (argc > 1) ? argv[1] : "build.ninja"; + const char* const data_file_path = + (zix_file_type(default_file_path) == ZIX_FILE_TYPE_REGULAR) + ? default_file_path + : NULL; test_temp_directory_path(); test_current_path(); |