summaryrefslogtreecommitdiff
path: root/src/utils/mkdir.cpp
diff options
context:
space:
mode:
authorBertram <bertram@cegetel.net>2010-03-03 23:38:18 +0100
committerBertram <bertram@cegetel.net>2010-03-03 23:38:18 +0100
commit1e52781e7d425cffcc6a5319b4cb5bf5eebe2ea9 (patch)
tree596305e9bfd4ad8448efd477a43f86490b1974c5 /src/utils/mkdir.cpp
parent8cc31b582f372238ce6bd2c86888d312cf1fe5b2 (diff)
parentf5f7a7d5990d1133f714b6cd431aecf6a332fbd5 (diff)
downloadmana-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.cpp24
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