From 10ab81a0de97513d82d05945c12bff87b02ede27 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sat, 2 Jul 2022 21:10:49 +0200 Subject: Cleanup: move mkdir_p from libcommon to libutil Signed-off-by: David Oberhollenzer --- lib/common/Makemodule.am | 3 +- lib/common/mkdir_p.c | 170 ----------------------------------------------- 2 files changed, 1 insertion(+), 172 deletions(-) delete mode 100644 lib/common/mkdir_p.c (limited to 'lib/common') diff --git a/lib/common/Makemodule.am b/lib/common/Makemodule.am index dd0a0d0..326f831 100644 --- a/lib/common/Makemodule.am +++ b/lib/common/Makemodule.am @@ -3,8 +3,7 @@ libcommon_a_SOURCES += lib/common/print_version.c lib/common/data_reader_dump.c libcommon_a_SOURCES += lib/common/compress.c lib/common/comp_opt.c libcommon_a_SOURCES += lib/common/data_writer.c include/common.h libcommon_a_SOURCES += lib/common/get_path.c lib/common/data_writer_ostream.c -libcommon_a_SOURCES += lib/common/perror.c -libcommon_a_SOURCES += lib/common/mkdir_p.c lib/common/parse_size.c +libcommon_a_SOURCES += lib/common/perror.c lib/common/parse_size.c libcommon_a_SOURCES += lib/common/print_size.c include/simple_writer.h libcommon_a_SOURCES += include/compress_cli.h libcommon_a_SOURCES += lib/common/writer/init.c lib/common/writer/cleanup.c diff --git a/lib/common/mkdir_p.c b/lib/common/mkdir_p.c deleted file mode 100644 index d250763..0000000 --- a/lib/common/mkdir_p.c +++ /dev/null @@ -1,170 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * mkdir_p.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "common.h" - -#include -#include -#include -#include - -#ifdef _WIN32 -/* - Supported paths: - - :\ - - \\\\ - - \\?\:\ - - \\?\UNC\\\ - - Relative path not starting with '\' - */ - -static WCHAR *skip_unc_path(WCHAR *ptr) -{ - /* server */ - if (*ptr == '\0' || *ptr == '\\') - return NULL; - - while (*ptr != '\0' && *ptr != '\\') - ++ptr; - - if (*(ptr++) != '\\') - return NULL; - - /* share */ - if (*ptr == '\0' || *ptr == '\\') - return NULL; - - while (*ptr != '\0' && *ptr != '\\') - ++ptr; - - return (*ptr == '\\') ? (ptr + 1) : ptr; -} - -static WCHAR *skip_prefix(WCHAR *ptr) -{ - if (isalpha(ptr[0]) && ptr[1] == ':' && ptr[2] == '\\') - return ptr + 3; - - if (ptr[0] == '\\' && ptr[1] == '\\') { - if (ptr[2] == '?') { - if (ptr[3] != '\\') - return NULL; - - ptr += 4; - - if ((ptr[0] == 'u' || ptr[0] == 'U') && - (ptr[1] == 'n' || ptr[1] == 'N') && - (ptr[2] == 'c' || ptr[2] == 'C') && - ptr[3] == '\\') { - ptr += 4; - - return skip_unc_path(ptr); - } - - if (isalpha(ptr[0]) && ptr[1] == ':' && ptr[2] == '\\') - return ptr + 3; - - return NULL; - } - - return skip_unc_path(ptr); - } - - if (ptr[0] == '\\') - return NULL; - - return ptr; -} - -int mkdir_p(const char *path) -{ - WCHAR *wpath, *ptr, *end; - DWORD error; - bool done; - - - wpath = path_to_windows(path); - if (wpath == NULL) - return -1; - - ptr = skip_prefix(wpath); - if (ptr == NULL) { - fprintf(stderr, "Illegal or unsupported path: %s\n", path); - goto fail; - } - - while (*ptr != '\0') { - if (*ptr == '\\') { - ++ptr; - continue; - } - - for (end = ptr; *end != '\0' && *end != '\\'; ++end) - ++end; - - if (*end == '\\') { - done = false; - *end = '\0'; - } else { - done = true; - } - - if (!CreateDirectoryW(wpath, NULL)) { - error = GetLastError(); - - if (error != ERROR_ALREADY_EXISTS) { - fprintf(stderr, "Creating %s: %ld\n", - path, error); - goto fail; - } - } - - if (!done) - *end = '\\'; - - ptr = done ? end : (end + 1); - } - - free(wpath); - return 0; -fail: - free(wpath); - return -1; -} -#else -int mkdir_p(const char *path) -{ - size_t i, len; - char *buffer; - - while (path[0] == '/' && path[1] == '/') - ++path; - - if (*path == '\0' || (path[0] == '/' && path[1] == '\0')) - return 0; - - len = strlen(path) + 1; - buffer = alloca(len); - - for (i = 0; i < len; ++i) { - if (i > 0 && (path[i] == '/' || path[i] == '\0')) { - buffer[i] = '\0'; - - if (mkdir(buffer, 0755) != 0) { - if (errno != EEXIST) { - fprintf(stderr, "mkdir %s: %s\n", - buffer, strerror(errno)); - return -1; - } - } - } - - buffer[i] = path[i]; - } - - return 0; -} -#endif -- cgit v1.2.3