gpo: move mkdir_p to lib/util
authorDavid Mulder <dmulder@suse.com>
Wed, 8 Mar 2017 15:33:56 +0000 (08:33 -0700)
committerGarming Sam <garming@samba.org>
Mon, 20 Nov 2017 20:41:14 +0000 (21:41 +0100)
Move the mkdir_p function to lib/util so it can be used elsewhere

Signed-off-by: David Mulder <dmulder@suse.com>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
ctdb/common/system.h
ctdb/common/system_util.c
lib/util/mkdir_p.c [new file with mode: 0644]
lib/util/mkdir_p.h [new file with mode: 0644]
lib/util/wscript_build

index ae01c58cfed62fe6a5ff38c83ba40a5e26cff188..e6f65b5e621fdaf3e93f57e7f9a7263c494767fe 100644 (file)
@@ -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);
index 63dcd53795b1256280cdb4352353245ca1b636d7..f27eed7038da23e805b80254d322574b87906acb 100644 (file)
@@ -41,6 +41,8 @@
 #include <procinfo.h>
 #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 (file)
index 0000000..290a1f3
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+*/
+#include "replace.h"
+#include <sys/stat.h>
+#include <libgen.h>
+#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 (file)
index 0000000..9281de8
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+*/
+
+int mkdir_p(const char *dir, int mode);
index bb3cdd134ad3eb3094be1e04fa96d7f287e068f0..0b16b6f821667700d241284f51d5c6ffbad515be 100644 (file)
@@ -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)