Introduction
Introduction Statistics Contact Development Disclaimer Help
Add mkpath() - a recursive mkdir() implementation - smdev - suckless mdev
git clone git://git.suckless.org/smdev
Log
Files
Refs
README
LICENSE
---
commit faf4f4295234ab591507c2782b40efbffb74b5c0
parent 09854b708feef2a61cb9b56197c03d4b4a1e55fc
Author: sin <[email protected]>
Date: Wed, 21 Aug 2013 09:29:53 +0100
Add mkpath() - a recursive mkdir() implementation
The code was taken from ii[1].
[1] http://git.suckless.org/ii
Diffstat:
M Makefile | 1 +
A mkpath.h | 2 ++
M smdev.c | 3 ++-
A util/mkpath.c | 29 +++++++++++++++++++++++++++++
4 files changed, 34 insertions(+), 1 deletion(-)
---
diff --git a/Makefile b/Makefile
@@ -9,6 +9,7 @@ LIB = \
util/dev.o \
util/eprintf.o \
util/estrtol.o \
+ util/mkpath.o \
util/recurse.o
SRC = smdev.c
diff --git a/mkpath.h b/mkpath.h
@@ -0,0 +1,2 @@
+/* See LICENSE file for copyright and license details. */
+int mkpath(const char *path, mode_t mode);
diff --git a/smdev.c b/smdev.c
@@ -12,6 +12,7 @@
#include <limits.h>
#include <regex.h>
#include "config.h"
+#include "mkpath.h"
#include "util.h"
static int create_dev(const char *path);
@@ -117,7 +118,7 @@ create_dev(const char *path)
case '=':
if (Rules[i].path[strlen(Rules[i].path) - 1] =…
snprintf(devpath, sizeof(devpath), "/d…
- if (mkdir(devpath, 0755) < 0)
+ if (mkpath(devpath, 0755) < 0)
eprintf("mkdir %s:", devpath);
strcat(devpath, devname);
} else {
diff --git a/util/mkpath.c b/util/mkpath.c
@@ -0,0 +1,29 @@
+#include <sys/stat.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+
+int
+mkpath(const char *path, mode_t mode)
+{
+ char tmp[PATH_MAX];
+ char *p = NULL;
+ size_t len;
+
+ snprintf(tmp, sizeof(tmp),"%s",path);
+ len = strlen(tmp);
+ if(tmp[len - 1] == '/')
+ tmp[len - 1] = 0;
+ for(p = tmp + 1; *p; p++)
+ if(*p == '/') {
+ *p = 0;
+ if (mkdir(tmp, mode) < 0 && errno != EEXIST)
+ return -1;
+ *p = '/';
+ }
+ if (mkdir(tmp, mode) < 0 && errno != EEXIST)
+ return -1;
+ return 0;
+}
+
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.