Merge pull request #130 from hughbe/mkdir-windows
Fix mkdir usage on Windows
diff --git a/include/llbuild/Basic/PlatformUtility.h b/include/llbuild/Basic/PlatformUtility.h
index 8bf877d..c78d4a9 100644
--- a/include/llbuild/Basic/PlatformUtility.h
+++ b/include/llbuild/Basic/PlatformUtility.h
@@ -33,6 +33,7 @@
bool chdir(const char *fileName);
int close(int fileHandle);
int lstat(const char *fileName, StatStruct *buf);
+bool mkdir(const char *fileName);
int pclose(FILE *stream);
int pipe(int ptHandles[2]);
FILE *popen(const char *command, const char *mode);
diff --git a/lib/Basic/FileSystem.cpp b/lib/Basic/FileSystem.cpp
index 59bc7fb..39dc7fe 100644
--- a/lib/Basic/FileSystem.cpp
+++ b/lib/Basic/FileSystem.cpp
@@ -11,6 +11,7 @@
//===----------------------------------------------------------------------===//
#include "llbuild/Basic/FileSystem.h"
+#include "llbuild/Basic/PlatformUtility.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Path.h"
@@ -18,7 +19,6 @@
#include <cassert>
#include <cstring>
-#include <sys/stat.h>
using namespace llbuild;
using namespace llbuild::basic;
@@ -46,7 +46,7 @@
virtual bool
createDirectory(const std::string& path) override {
- if (::mkdir(path.c_str(), S_IRWXU | S_IRWXG | S_IRWXO) == -1) {
+ if (!sys::mkdir(path.c_str())) {
if (errno != EEXIST) {
return false;
}
diff --git a/lib/Basic/PlatformUtility.cpp b/lib/Basic/PlatformUtility.cpp
index b4d5230..0ebd529 100644
--- a/lib/Basic/PlatformUtility.cpp
+++ b/lib/Basic/PlatformUtility.cpp
@@ -11,6 +11,7 @@
#if defined(_WIN32)
#include "LeanWindows.h"
+#include <direct.h>
#include <io.h>
#else
#include <stdio.h>
@@ -46,6 +47,14 @@
#endif
}
+bool sys::mkdir(const char* fileName) {
+#if defined(_WIN32)
+ return _mkdir(fileName) == 0;
+#else
+ return ::mkdir(fileName, S_IRWXU | S_IRWXG | S_IRWXO) == 0;
+#endif
+}
+
int sys::pclose(FILE *stream) {
#if defined(_WIN32)
return ::_pclose(stream);