diff options
author | rdivacky <rdivacky@FreeBSD.org> | 2010-04-02 08:54:30 +0000 |
---|---|---|
committer | rdivacky <rdivacky@FreeBSD.org> | 2010-04-02 08:54:30 +0000 |
commit | 20e856b2a58d12231aa42d5d13888b15ac03e5a4 (patch) | |
tree | cf5763d092b81cecc168fa28032247ee495d06e2 /lib/System | |
parent | 2f2afc1aae898651e26987a5c71f3febb19bca98 (diff) | |
download | FreeBSD-src-20e856b2a58d12231aa42d5d13888b15ac03e5a4.zip FreeBSD-src-20e856b2a58d12231aa42d5d13888b15ac03e5a4.tar.gz |
Update LLVM to r100181.
Diffstat (limited to 'lib/System')
-rw-r--r-- | lib/System/Unix/Mutex.inc | 6 | ||||
-rw-r--r-- | lib/System/Unix/Path.inc | 4 | ||||
-rw-r--r-- | lib/System/Win32/Program.inc | 34 | ||||
-rw-r--r-- | lib/System/Win32/Signals.inc | 1 |
4 files changed, 31 insertions, 14 deletions
diff --git a/lib/System/Unix/Mutex.inc b/lib/System/Unix/Mutex.inc index 10e7ecb..4a5e28d 100644 --- a/lib/System/Unix/Mutex.inc +++ b/lib/System/Unix/Mutex.inc @@ -29,12 +29,6 @@ MutexImpl::~MutexImpl() } bool -MutexImpl::MutexImpl() -{ - return true; -} - -bool MutexImpl::release() { return true; diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc index a99720c..52253b3 100644 --- a/lib/System/Unix/Path.inc +++ b/lib/System/Unix/Path.inc @@ -454,7 +454,7 @@ Path::canWrite() const { bool Path::isRegularFile() const { - // Get the status so we can determine if its a file or directory + // Get the status so we can determine if it's a file or directory struct stat buf; if (0 != stat(path.c_str(), &buf)) @@ -736,7 +736,7 @@ Path::createTemporaryFileOnDisk(bool reuse_current, std::string* ErrMsg) { bool Path::eraseFromDisk(bool remove_contents, std::string *ErrStr) const { - // Get the status so we can determine if its a file or directory + // Get the status so we can determine if it's a file or directory. struct stat buf; if (0 != stat(path.c_str(), &buf)) { MakeErrMsg(ErrStr, path + ": can't get status of file"); diff --git a/lib/System/Win32/Program.inc b/lib/System/Win32/Program.inc index a3b40d0..16bb28e 100644 --- a/lib/System/Win32/Program.inc +++ b/lib/System/Win32/Program.inc @@ -138,6 +138,24 @@ static bool ArgNeedsQuotes(const char *Str) { return Str[0] == '\0' || strchr(Str, ' ') != 0; } + +/// ArgLenWithQuotes - Check whether argument needs to be quoted when calling +/// CreateProcess and returns length of quoted arg with escaped quotes +static unsigned int ArgLenWithQuotes(const char *Str) { + unsigned int len = ArgNeedsQuotes(Str) ? 2 : 0; + + while (*Str != '\0') { + if (*Str == '\"') + ++len; + + ++len; + ++Str; + } + + return len; +} + + bool Program::Execute(const Path& path, const char** args, @@ -165,9 +183,7 @@ Program::Execute(const Path& path, // First, determine the length of the command line. unsigned len = 0; for (unsigned i = 0; args[i]; i++) { - len += strlen(args[i]) + 1; - if (ArgNeedsQuotes(args[i])) - len += 2; + len += ArgLenWithQuotes(args[i]) + 1; } // Now build the command line. @@ -176,12 +192,18 @@ Program::Execute(const Path& path, for (unsigned i = 0; args[i]; i++) { const char *arg = args[i]; - size_t len = strlen(arg); + bool needsQuoting = ArgNeedsQuotes(arg); if (needsQuoting) *p++ = '"'; - memcpy(p, arg, len); - p += len; + + while (*arg != '\0') { + if (*arg == '\"') + *p++ = '\\'; + + *p++ = *arg++; + } + if (needsQuoting) *p++ = '"'; *p++ = ' '; diff --git a/lib/System/Win32/Signals.inc b/lib/System/Win32/Signals.inc index dba2218..f2b72ca 100644 --- a/lib/System/Win32/Signals.inc +++ b/lib/System/Win32/Signals.inc @@ -163,6 +163,7 @@ void sys::AddSignalHandler(void (*FnPtr)(void *), void *Cookie) { CallBacksToRun = new std::vector<std::pair<void(*)(void*), void*> >(); CallBacksToRun->push_back(std::make_pair(FnPtr, Cookie)); RegisterHandler(); + LeaveCriticalSection(&CriticalSection); } } |