-// ANNA - Anna is Not 'N' Anymore
-//
-// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
-//
-// https://bitbucket.org/testillano/anna
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions
-// are met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Authors: eduardo.ramos.testillano@gmail.com
-// cisco.tierra@gmail.com
+// ANNA - Anna is Not Nothingness Anymore //
+// //
+// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
+// //
+// See project site at http://redmine.teslayout.com/projects/anna-suite //
+// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
#include <anna/core/util/Environment.hpp>
LOGMETHOD(TraceMethod tm("Environment", "initialize", ANNA_FILE_LOCATION));
// clear data
a_vars.clear();
- if (!envp) return;
+
+ if(!envp) return;
// register data
std::string assignment, var, val;
- while (*envp) {
- assignment = *envp;
+
+ while(*envp) {
+ assignment = *envp;
std::size_t equalPos = assignment.find("=");
- if (equalPos != string::npos) { // protection
+
+ if(equalPos != string::npos) { // protection
var = assignment.substr(0, equalPos - 1);
val = assignment.substr(equalPos, assignment.size() - 1);
a_vars[var] = val;
}
+
envp++;
}
}
throw RuntimeException("Invalid NULL variable name!", ANNA_FILE_LOCATION);
std::string var = variableName;
-
return getValue(var, exceptionIfMissing);
}
std::string Environment::getValue(const std::string &variableName, bool exceptionIfMissing) throw(RuntimeException) {
std::string result = "";
-
std::map<std::string, std::string>::const_iterator it = a_vars.find(variableName);
if(it == a_vars.end()) {
- char *current = getenv (variableName.c_str());
- if (!current) {
+ char *current = getenv(variableName.c_str());
+
+ if(!current) {
std::string msg = "The variable '";
msg += variableName;
msg += "' is not defined in the environment.";
LOGDEBUG(Logger::debug(msg, ANNA_FILE_LOCATION));
if(exceptionIfMissing) throw RuntimeException(msg, ANNA_FILE_LOCATION);
- }
- else {
+ } else {
// assignment
a_vars[variableName] = current;
result = current;
}
- }
- else {
+ } else {
result = it->second;
}
void Environment::setVariable(const std::string &name, const std::string &value, bool overwrite) throw(RuntimeException) {
+ if(name == "") throw RuntimeException("Must provide non-empty variable name", ANNA_FILE_LOCATION);
- if (name == "") throw RuntimeException("Must provide non-empty variable name", ANNA_FILE_LOCATION);
-
- if(setenv(name.c_str(), value.c_str(), overwrite ? 1:0) != 0) {
+ if(setenv(name.c_str(), value.c_str(), overwrite ? 1 : 0) != 0) {
std::string msg = "Cannot set the environment variable '";
msg += name;
msg += "=\"";
msg += value;
msg += "\"'. The errno is ";
msg += anna::functions::asString(errno);
-
throw RuntimeException(msg, ANNA_FILE_LOCATION);
}
// optimization
- if (overwrite)
+ if(overwrite)
a_vars[name] = value;
}
void Environment::unsetVariable(const std::string &name) throw(RuntimeException) {
-
- if (name == "") throw RuntimeException("Must provide non-empty variable name", ANNA_FILE_LOCATION);
+ if(name == "") throw RuntimeException("Must provide non-empty variable name", ANNA_FILE_LOCATION);
if(unsetenv(name.c_str()) != 0) {
std::string msg = "Cannot unset the environment variable named '";
msg += name;
msg += "'. The errno is ";
msg += anna::functions::asString(errno);
-
throw RuntimeException(msg, ANNA_FILE_LOCATION);
}
std::map<std::string, std::string>::iterator it = a_vars.find(name);
+
if(it != a_vars.end()) a_vars.erase(it);
}