morpheus-base

morpheus base system
git clone git://git.2f30.org/morpheus-base.git
Log | Files | Refs

mkpath.c (510B)


      1 #include <sys/stat.h>
      2 #include <errno.h>
      3 #include <stdio.h>
      4 #include <string.h>
      5 #include <limits.h>
      6 
      7 int
      8 mkpath(const char *path, mode_t mode)
      9 {
     10 	char tmp[PATH_MAX];
     11 	char *p = NULL;
     12 	size_t len;
     13 
     14 	snprintf(tmp, sizeof(tmp),"%s",path);
     15 	len = strlen(tmp);
     16 	if(tmp[len - 1] == '/')
     17 		tmp[len - 1] = 0;
     18 	for(p = tmp + 1; *p; p++)
     19 		if(*p == '/') {
     20 			*p = 0;
     21 			if (mkdir(tmp, mode) < 0 && errno != EEXIST)
     22 				return -1;
     23 			*p = '/';
     24 		}
     25 	if (mkdir(tmp, mode) < 0 && errno != EEXIST)
     26 		return -1;
     27 	return 0;
     28 }
     29