From 6159b8eb6a6df0743c35c9cf533c4cc1883c72c2 Mon Sep 17 00:00:00 2001 From: David Mulder Date: Wed, 8 Mar 2017 08:33:56 -0700 Subject: [PATCH] gpo: move mkdir_p to lib/util Move the mkdir_p function to lib/util so it can be used elsewhere Signed-off-by: David Mulder Reviewed-by: Garming Sam Reviewed-by: Andrew Bartlett --- ctdb/common/system.h | 1 - ctdb/common/system_util.c | 49 ++------------------------- lib/util/mkdir_p.c | 70 +++++++++++++++++++++++++++++++++++++++ lib/util/mkdir_p.h | 21 ++++++++++++ lib/util/wscript_build | 2 +- 5 files changed, 94 insertions(+), 49 deletions(-) create mode 100644 lib/util/mkdir_p.c create mode 100644 lib/util/mkdir_p.h diff --git a/ctdb/common/system.h b/ctdb/common/system.h index ae01c58cfed..e6f65b5e621 100644 --- a/ctdb/common/system.h +++ b/ctdb/common/system.h @@ -53,7 +53,6 @@ bool parse_ip_mask(const char *str, const char *ifaces, ctdb_sock_addr *addr, void lockdown_memory(bool valgrinding); -int mkdir_p(const char *dir, int mode); void mkdir_p_or_die(const char *dir, int mode); void ctdb_wait_for_process_to_exit(pid_t pid); diff --git a/ctdb/common/system_util.c b/ctdb/common/system_util.c index 63dcd53795b..f27eed7038d 100644 --- a/ctdb/common/system_util.c +++ b/ctdb/common/system_util.c @@ -41,6 +41,8 @@ #include #endif +#include "lib/util/mkdir_p.h" + /* if possible, make this task real time */ @@ -272,53 +274,6 @@ void lockdown_memory(bool valgrinding) #endif } -int mkdir_p(const char *dir, int mode) -{ - char t[PATH_MAX]; - ssize_t len; - int ret; - - if (strcmp(dir, "/") == 0) { - return 0; - } - - if (strcmp(dir, ".") == 0) { - return 0; - } - - /* Try to create directory */ - ret = mkdir(dir, mode); - /* Succeed if that worked or if it already existed */ - if (ret == 0 || errno == EEXIST) { - return 0; - } - /* Fail on anything else except ENOENT */ - if (errno != ENOENT) { - return ret; - } - - /* Create ancestors */ - len = strlen(dir); - if (len >= PATH_MAX) { - errno = ENAMETOOLONG; - return -1; - } - strncpy(t, dir, len+1); - - ret = mkdir_p(dirname(t), mode); - if (ret != 0) { - return ret; - } - - /* Create directory */ - ret = mkdir(dir, mode); - if ((ret == -1) && (errno == EEXIST)) { - ret = 0; - } - - return ret; -} - void mkdir_p_or_die(const char *dir, int mode) { int ret; diff --git a/lib/util/mkdir_p.c b/lib/util/mkdir_p.c new file mode 100644 index 00000000000..290a1f39520 --- /dev/null +++ b/lib/util/mkdir_p.c @@ -0,0 +1,70 @@ +/* + mkdir -p + + Copyright (C) Amitay Isaacs 2014 + Copyright (C) Martin Schwenke 2014 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . +*/ +#include "replace.h" +#include +#include +#include "mkdir_p.h" + +int mkdir_p(const char *dir, int mode) +{ + char t[PATH_MAX]; + ssize_t len; + int ret; + + if (strcmp(dir, "/") == 0) { + return 0; + } + + if (strcmp(dir, ".") == 0) { + return 0; + } + + /* Try to create directory */ + ret = mkdir(dir, mode); + /* Succeed if that worked or if it already existed */ + if (ret == 0 || errno == EEXIST) { + return 0; + } + /* Fail on anything else except ENOENT */ + if (errno != ENOENT) { + return ret; + } + + /* Create ancestors */ + len = strlen(dir); + if (len >= PATH_MAX) { + errno = ENAMETOOLONG; + return -1; + } + strncpy(t, dir, len+1); + + ret = mkdir_p(dirname(t), mode); + if (ret != 0) { + return ret; + } + + /* Create directory */ + ret = mkdir(dir, mode); + if ((ret == -1) && (errno == EEXIST)) { + ret = 0; + } + + return ret; +} diff --git a/lib/util/mkdir_p.h b/lib/util/mkdir_p.h new file mode 100644 index 00000000000..9281de8cb91 --- /dev/null +++ b/lib/util/mkdir_p.h @@ -0,0 +1,21 @@ +/* + mkdir -p + + Copyright (C) Amitay Isaacs 2014 + Copyright (C) Martin Schwenke 2014 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . +*/ + +int mkdir_p(const char *dir, int mode); diff --git a/lib/util/wscript_build b/lib/util/wscript_build index bb3cdd134ad..0b16b6f8216 100644 --- a/lib/util/wscript_build +++ b/lib/util/wscript_build @@ -72,7 +72,7 @@ bld.SAMBA_SUBSYSTEM('samba-util-core', signal.c util.c idtree.c fault.c substitute.c util_process.c util_strlist.c strv_util.c bitmap.c select.c pidfile.c - become_daemon.c ''', + become_daemon.c mkdir_p.c''', deps='''time-basic samba-debug socket-blocking talloc tevent execinfo pthread strv''', local_include=False) -- 2.34.1