summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp')
-rw-r--r--lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp
new file mode 100644
index 0000000..62894eb
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/System/StdC/NptStdcEnvironment.cpp
@@ -0,0 +1,80 @@
+/*****************************************************************
+|
+| Neptune - Environment variables: StdC Implementation
+|
+| (c) 2002-2006 Gilles Boccon-Gibod
+| Author: Gilles Boccon-Gibod (bok@bok.net)
+|
+ ****************************************************************/
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include <stdlib.h>
+
+#include "NptConfig.h"
+#include "NptUtils.h"
+#include "NptResults.h"
+
+/*----------------------------------------------------------------------
+| NPT_Environment::Get
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Environment::Get(const char* name, NPT_String& value)
+{
+ char* env = nullptr;
+
+ /* default value */
+ value.SetLength(0);
+
+#if defined(NPT_CONFIG_HAVE_GETENV)
+ env = getenv(name);
+ if (env) {
+ value = env;
+ return NPT_SUCCESS;
+ } else {
+ return NPT_ERROR_NO_SUCH_ITEM;
+ }
+#elif defined(NPT_CONFIG_HAVE_DUPENV_S)
+ if (dupenv_s(&env, NULL, name) != 0) {
+ return NPT_FAILURE;
+ } else if (env != NULL) {
+ value = env;
+ free(env);
+ return NPT_SUCCESS;
+ } else {
+ return NPT_ERROR_NO_SUCH_ITEM;
+ }
+#else
+ return NPT_ERROR_NOT_SUPPORTED;
+#endif
+}
+
+/*----------------------------------------------------------------------
+| NPT_Environment::Set
++---------------------------------------------------------------------*/
+NPT_Result
+NPT_Environment::Set(const char* name, const char* value)
+{
+ if (value) {
+#if defined(NPT_CONFIG_HAVE_SETENV)
+ // set the variable
+ setenv(name, value, 1); // ignore return value (some platforms have this function as void)
+ return NPT_SUCCESS;
+#elif defined(NPT_CONFIG_HAVE_PUTENV_S)
+ return putenv_s(name, value)==0?NPT_SUCCESS:NPT_FAILURE;
+#else
+ return NPT_ERROR_NOT_SUPPORTED;
+#endif
+ } else {
+ // remove the variable
+#if defined(NPT_CONFIG_HAVE_UNSETENV)
+ unsetenv(name); // ignore return value (some platforms have this function as void)
+ return NPT_SUCCESS;
+#elif defined(NPT_CONFIG_HAVE_PUTENV_S)
+ return putenv_s(name, "")==0?NPT_SUCCESS:NPT_FAILURE;
+#else
+ return NPT_ERROR_NOT_SUPPORTED;
+#endif
+ }
+}