| Index: base/env_var.cc
|
| ===================================================================
|
| --- base/env_var.cc (revision 0)
|
| +++ base/env_var.cc (revision 0)
|
| @@ -0,0 +1,80 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/env_var.h"
|
| +
|
| +#if defined(OS_POSIX)
|
| +#include <stdlib.h>
|
| +#elif defined(OS_WIN)
|
| +#include <windows.h>
|
| +#endif
|
| +
|
| +#include "base/string_util.h"
|
| +
|
| +#if defined(OS_WIN)
|
| +#include "base/scoped_ptr.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#endif
|
| +
|
| +namespace {
|
| +
|
| +class EnvVarGetterImpl
|
| + : public base::EnvVarGetter {
|
| + public:
|
| + virtual bool GetEnv(const char* variable_name, std::string* result) {
|
| + if (GetEnvImpl(variable_name, result))
|
| + return true;
|
| +
|
| + // Some commonly used variable names are uppercase while others
|
| + // are lowercase, which is inconsistent. Let's try to be helpful
|
| + // and look for a variable name with the reverse case.
|
| + // I.e. HTTP_PROXY may be http_proxy for some users/systems.
|
| + char first_char = variable_name[0];
|
| + std::string alternate_case_var;
|
| + if (first_char >= 'a' && first_char <= 'z')
|
| + alternate_case_var = StringToUpperASCII(std::string(variable_name));
|
| + else if (first_char >= 'A' && first_char <= 'Z')
|
| + alternate_case_var = StringToLowerASCII(std::string(variable_name));
|
| + else
|
| + return false;
|
| + return GetEnvImpl(alternate_case_var.c_str(), result);
|
| + }
|
| + private:
|
| + bool GetEnvImpl(const char* variable_name, std::string* result) {
|
| +#if defined(OS_POSIX)
|
| + const char* env_value = getenv(variable_name);
|
| + if (!env_value)
|
| + return false;
|
| + // Note that the variable may be defined but empty.
|
| + if (result)
|
| + *result = env_value;
|
| + return true;
|
| +#elif defined(OS_WIN)
|
| + DWORD value_length = ::GetEnvironmentVariable(
|
| + UTF8ToWide(variable_name).c_str(), NULL, 0);
|
| + if (value_length == 0)
|
| + return false;
|
| + if (result) {
|
| + scoped_array<wchar_t> value(new wchar_t[value_length]);
|
| + ::GetEnvironmentVariable(UTF8ToWide(variable_name).c_str(), value.get(),
|
| + value_length);
|
| + *result = WideToUTF8(value.get());
|
| + }
|
| + return true;
|
| +#else
|
| +#error need to port
|
| +#endif
|
| + }
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +namespace base {
|
| +
|
| +// static
|
| +EnvVarGetter* EnvVarGetter::Create() {
|
| + return new EnvVarGetterImpl();
|
| +}
|
| +
|
| +} // namespace base
|
|
|
| Property changes on: base/env_var.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|