diff options
Diffstat (limited to 'src/tools/launcher/util/launcher_util.cc')
-rw-r--r-- | src/tools/launcher/util/launcher_util.cc | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/tools/launcher/util/launcher_util.cc b/src/tools/launcher/util/launcher_util.cc index 247c7050c5..bc3eddb284 100644 --- a/src/tools/launcher/util/launcher_util.cc +++ b/src/tools/launcher/util/launcher_util.cc @@ -76,6 +76,15 @@ bool DoesFilePathExist(const char* path) { !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); } +bool DoesDirectoryPathExist(const char* path) { + // TODO(laszlocsomor): convert `path` to (const wchar_t*), add longpath-prefix + // and use GetFileAttributesW. + DWORD dwAttrib = GetFileAttributesA(path); + + return (dwAttrib != INVALID_FILE_ATTRIBUTES && + (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); +} + string GetBinaryPathWithoutExtension(const string& binary) { if (binary.find(".exe", binary.size() - 4) != string::npos) { return binary.substr(0, binary.length() - 4); @@ -120,5 +129,22 @@ string GetEscapedArgument(const string& argument) { return escaped_arg.str(); } +// An environment variable has a maximum size limit of 32,767 characters +// https://msdn.microsoft.com/en-us/library/ms683188.aspx +static const int BUFFER_SIZE = 32767; + +bool GetEnv(const string& env_name, string* value) { + char buffer[BUFFER_SIZE]; + if (!GetEnvironmentVariableA(env_name.c_str(), buffer, BUFFER_SIZE)) { + return false; + } + *value = buffer; + return true; +} + +bool SetEnv(const string& env_name, const string& value) { + return SetEnvironmentVariableA(env_name.c_str(), value.c_str()); +} + } // namespace launcher } // namespace bazel |