Library of Assembled Shared Sources
environment.cpp
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2024 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43#include "lass_common.h"
44#include "environment.h"
45
46#if HAVE_CONFIG_H
47# include "lass_auto_config.h"
48#endif
49#include <stdlib.h>
50
51#if LASS_PLATFORM_TYPE == LASS_PLATFORM_TYPE_WIN32
52# define LASS_UTIL_IMPL_HAVE_ENV_S
53#endif
54
55namespace lass
56{
57namespace util
58{
59namespace impl
60{
61
62const std::string lass_getenv(const std::string& iName)
63{
64#ifdef LASS_UTIL_IMPL_HAVE_ENV_S
65 size_t size;
66 LASS_ENFORCE_CLIB_RC(getenv_s(&size, 0, 0, iName.c_str()));
67 if (size == 0)
68 {
69 LASS_THROW("Could not find environment variable '" << iName << "'.");
70 }
71 std::vector<char> buffer(size);
72 LASS_ENFORCE_CLIB_RC(getenv_s(&size, &buffer[0], size, iName.c_str()));
73 return std::string(&buffer[0]);
74#else
75 const char* result = getenv(iName.c_str());
76 if (!result)
77 {
78 LASS_THROW("Could not find environment variable '" << iName << "'.");
79 }
80 return std::string(result);
81#endif
82}
83
84void lass_putenv(const std::string& iName, const std::string& iValue)
85{
86#ifdef LASS_UTIL_IMPL_HAVE_ENV_S
87 LASS_ENFORCE_CLIB_RC(_putenv_s(iName.c_str(), iValue.c_str()));
88#else
89 std::stringstream buffer;
90 buffer << iName << "=" << iValue;
91 LASS_ENFORCE_CLIB_RC(putenv(const_cast<char*>(buffer.str().c_str())));
92#endif
93}
94
95}
96}
97}
98
99// EOF
void putenv(const std::string &key, const std::string &value)
os.environ[key] = value
general utility, debug facilities, ...
Library for Assembled Shared Sources.
Definition config.h:53