diff options
author | Bertram <bertram@cegetel.net> | 2010-03-03 23:38:18 +0100 |
---|---|---|
committer | Bertram <bertram@cegetel.net> | 2010-03-03 23:38:18 +0100 |
commit | 1e52781e7d425cffcc6a5319b4cb5bf5eebe2ea9 (patch) | |
tree | 596305e9bfd4ad8448efd477a43f86490b1974c5 /src/utils/mkdir.cpp | |
parent | 8cc31b582f372238ce6bd2c86888d312cf1fe5b2 (diff) | |
parent | f5f7a7d5990d1133f714b6cd431aecf6a332fbd5 (diff) | |
download | mana-1e52781e7d425cffcc6a5319b4cb5bf5eebe2ea9.tar.gz mana-1e52781e7d425cffcc6a5319b4cb5bf5eebe2ea9.tar.bz2 mana-1e52781e7d425cffcc6a5319b4cb5bf5eebe2ea9.tar.xz mana-1e52781e7d425cffcc6a5319b4cb5bf5eebe2ea9.zip |
Merge branch 'master' of gitorious.org:mana/mana
Diffstat (limited to 'src/utils/mkdir.cpp')
-rw-r--r-- | src/utils/mkdir.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/utils/mkdir.cpp b/src/utils/mkdir.cpp index 223abe71..43f5264e 100644 --- a/src/utils/mkdir.cpp +++ b/src/utils/mkdir.cpp @@ -24,10 +24,10 @@ #if defined WIN32 #include <windows.h> -#else -#include <sys/stat.h> #endif +#include <sys/stat.h> + #ifdef _MKDIR_TEST_ // compile with -D_MKDIR_TEST_ to get a standalone binary #include <cstdio> @@ -67,12 +67,24 @@ int mkdir_r(const char *pathname) { *p = '/'; continue; } + + // check if the name already exists, but not as directory + struct stat statbuf; + if (!stat(tmp, &statbuf)) + { + if (S_ISDIR(statbuf.st_mode)) + { + *p = '/'; + continue; + } + else + return -1; + } + #if defined WIN32 - if (!CreateDirectory(tmp, 0) && - GetLastError() != ERROR_ALREADY_EXISTS) + if (!CreateDirectory(tmp, 0)) #else - if (mkdir(tmp, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) && - errno != EEXIST) + if (mkdir(tmp, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) #endif { #if defined WIN32 |