Merge pull request #85 from hughbe/popen-pclose
Add and use platform abstractions for popen and pclose
diff --git a/include/llbuild/Basic/PlatformUtility.h b/include/llbuild/Basic/PlatformUtility.h
index fcb0c6d..7b92b67 100644
--- a/include/llbuild/Basic/PlatformUtility.h
+++ b/include/llbuild/Basic/PlatformUtility.h
@@ -18,11 +18,15 @@
#ifndef LLBUILD_BASIC_PLATFORMUTILITY_H
#define LLBUILD_BASIC_PLATFORMUTILITY_H
+#include <cstdio>
+
namespace llbuild {
namespace basic {
namespace sys {
- bool chdir(const char *fileName);
- int unlink(const char *fileName);
+bool chdir(const char *fileName);
+int pclose(FILE *stream);
+FILE *popen(const char *command, const char *mode);
+int unlink(const char *fileName);
}
}
}
diff --git a/lib/Basic/PlatformUtility.cpp b/lib/Basic/PlatformUtility.cpp
index d5c7035..5d5f06b 100644
--- a/lib/Basic/PlatformUtility.cpp
+++ b/lib/Basic/PlatformUtility.cpp
@@ -13,6 +13,7 @@
#include "LeanWindows.h"
#include <io.h>
#else
+#include <stdio.h>
#include <unistd.h>
#endif
@@ -27,6 +28,22 @@
#endif
}
+int sys::pclose(FILE *stream) {
+#if defined(_WIN32)
+ return ::_pclose(stream);
+#else
+ return ::pclose(stream);
+#endif
+}
+
+FILE *sys::popen(const char *command, const char *mode) {
+#if defined(_WIN32)
+ return ::_popen(command, mode);
+#else
+ return ::popen(command, mode);
+#endif
+}
+
int sys::unlink(const char *fileName) {
#if defined(_WIN32)
return ::_unlink(fileName);
diff --git a/lib/BuildSystem/SwiftTools.cpp b/lib/BuildSystem/SwiftTools.cpp
index 24a1a82..597fc48 100644
--- a/lib/BuildSystem/SwiftTools.cpp
+++ b/lib/BuildSystem/SwiftTools.cpp
@@ -15,6 +15,7 @@
#include "llbuild/Basic/FileSystem.h"
#include "llbuild/Basic/Hashing.h"
#include "llbuild/Basic/LLVM.h"
+#include "llbuild/Basic/PlatformUtility.h"
#include "llbuild/BuildSystem/BuildExecutionQueue.h"
#include "llbuild/BuildSystem/BuildFile.h"
#include "llbuild/BuildSystem/BuildKey.h"
@@ -126,7 +127,7 @@
commandOS << " " << "--version";
// Read the result.
- FILE *fp = ::popen(commandOS.str().str().c_str(), "r");
+ FILE *fp = basic::sys::popen(commandOS.str().str().c_str(), "r");
SmallString<4096> result;
if (fp) {
char buf[4096];
@@ -138,7 +139,7 @@
}
result.append(StringRef(buf, numRead));
}
- pclose(fp);
+ basic::sys::pclose(fp);
}
// For now, we can get away with just encoding this as a successful