mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-18 07:52:35 +00:00
Make all of this functionality work directly on win32. Properly conditionalize
system specific stuff on HAVE_MKSTEMP git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14051 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b4db5f3e4b
commit
fa5fe7c8b8
@ -13,11 +13,13 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "Support/FileUtilities.h"
|
||||
#include "Support/DataTypes.h"
|
||||
#include "Config/unistd.h"
|
||||
#include "Config/fcntl.h"
|
||||
#include "Config/sys/stat.h"
|
||||
#include "Config/sys/types.h"
|
||||
#include "Config/sys/stat.h"
|
||||
#include "Config/sys/mman.h"
|
||||
#include "Config/alloca.h"
|
||||
#include <cerrno>
|
||||
#include <cstdio>
|
||||
#include <fstream>
|
||||
@ -28,7 +30,7 @@ using namespace llvm;
|
||||
/// name a readable file.
|
||||
///
|
||||
bool llvm::CheckMagic(const std::string &FN, const std::string &Magic) {
|
||||
char buf[1 + Magic.size ()];
|
||||
char *buf = (char*)alloca(1 + Magic.size());
|
||||
std::ifstream f(FN.c_str());
|
||||
f.read(buf, Magic.size());
|
||||
buf[Magic.size()] = '\0';
|
||||
@ -179,8 +181,11 @@ std::string llvm::getUniqueFilename(const std::string &FilenameBase) {
|
||||
strcpy(FNBuffer+FilenameBase.size(), "-XXXXXX");
|
||||
|
||||
// Agree on a temporary file name to use....
|
||||
#if defined(HAVE_MKSTEMP) && !defined(_MSC_VER)
|
||||
int TempFD;
|
||||
if ((TempFD = mkstemp(FNBuffer)) == -1) {
|
||||
// FIXME: this should return an emtpy string or something and allow the
|
||||
// caller to deal with the error!
|
||||
std::cerr << "bugpoint: ERROR: Cannot create temporary file in the current "
|
||||
<< " directory!\n";
|
||||
exit(1);
|
||||
@ -189,18 +194,29 @@ std::string llvm::getUniqueFilename(const std::string &FilenameBase) {
|
||||
// We don't need to hold the temp file descriptor... we will trust that no one
|
||||
// will overwrite/delete the file while we are working on it...
|
||||
close(TempFD);
|
||||
#else
|
||||
// If we don't have mkstemp, use the old and obsolete mktemp function.
|
||||
if (mktemp(FNBuffer) == 0) {
|
||||
// FIXME: this should return an emtpy string or something and allow the
|
||||
// caller to deal with the error!
|
||||
std::cerr << "bugpoint: ERROR: Cannot create temporary file in the current "
|
||||
<< " directory!\n";
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
std::string Result(FNBuffer);
|
||||
delete[] FNBuffer;
|
||||
return Result;
|
||||
}
|
||||
|
||||
static bool AddPermissionsBits (const std::string &Filename, mode_t bits) {
|
||||
static bool AddPermissionsBits (const std::string &Filename, int bits) {
|
||||
// Get the umask value from the operating system. We want to use it
|
||||
// when changing the file's permissions. Since calling umask() sets
|
||||
// the umask and returns its old value, we must call it a second
|
||||
// time to reset it to the user's preference.
|
||||
mode_t mask = umask (0777); // The arg. to umask is arbitrary...
|
||||
umask (mask);
|
||||
int mask = umask(0777); // The arg. to umask is arbitrary.
|
||||
umask(mask); // Restore the umask.
|
||||
|
||||
// Get the file's current mode.
|
||||
struct stat st;
|
||||
@ -259,8 +275,8 @@ unsigned long long llvm::getFileTimestamp(const std::string &Filename) {
|
||||
/// failure, return null.
|
||||
void *llvm::ReadFileIntoAddressSpace(const std::string &Filename,
|
||||
unsigned &Length) {
|
||||
#ifdef HAVE_MMAP_FILE
|
||||
Length = getFileSize(Filename);
|
||||
#if defined(HAVE_MMAP_FILE) && !defined(_MSC_VER)
|
||||
Length = (unsigned)getFileSize(Filename);
|
||||
if ((int)Length == -1) return 0;
|
||||
|
||||
FDHandle FD(open(Filename.c_str(), O_RDONLY));
|
||||
@ -287,7 +303,7 @@ void *llvm::ReadFileIntoAddressSpace(const std::string &Filename,
|
||||
/// UnmapFileFromAddressSpace - Remove the specified file from the current
|
||||
/// address space.
|
||||
void llvm::UnmapFileFromAddressSpace(void *Buffer, unsigned Length) {
|
||||
#ifdef HAVE_MMAP_FILE
|
||||
#if defined(HAVE_MMAP_FILE) && !defined(_MSC_VER)
|
||||
if (Length)
|
||||
munmap((char*)Buffer, Length);
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user