mirror of
https://github.com/data61/MP-SPDZ.git
synced 2026-01-09 13:37:58 -05:00
45 lines
1022 B
C++
45 lines
1022 B
C++
#include "Tools/mkpath.h"
|
|
#include <string.h>
|
|
#include <limits.h> /* PATH_MAX */
|
|
#include <sys/stat.h> /* mkdir(2) */
|
|
#include <errno.h>
|
|
|
|
// mkdir -p, from https://gist.github.com/JonathonReinhart/8c0d90191c38af2dcadb102c4e202950
|
|
int mkdir_p(const char *path)
|
|
{
|
|
/* Adapted from http://stackoverflow.com/a/2336245/119527 */
|
|
const size_t len = strlen(path);
|
|
char _path[PATH_MAX];
|
|
char *p;
|
|
|
|
errno = 0;
|
|
|
|
/* Copy string so its mutable */
|
|
if (len > sizeof(_path)-1) {
|
|
errno = ENAMETOOLONG;
|
|
return -1;
|
|
}
|
|
strcpy(_path, path);
|
|
|
|
/* Iterate the string */
|
|
for (p = _path + 1; *p; p++) {
|
|
if (*p == '/') {
|
|
/* Temporarily truncate */
|
|
*p = '\0';
|
|
|
|
if (mkdir(_path, S_IRWXU) != 0) {
|
|
if (errno != EEXIST)
|
|
return -1;
|
|
}
|
|
|
|
*p = '/';
|
|
}
|
|
}
|
|
|
|
if (mkdir(_path, S_IRWXU) != 0) {
|
|
if (errno != EEXIST)
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
} |