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);