From 7151fbe498a3dd47a6d3e3dcb2f6e2a3ff5625da Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Wed, 3 Oct 2018 15:03:11 +0200 Subject: [PATCH] implement epicsEnvUnset --- src/libCom/iocsh/libComRegister.c | 16 ++++++++++++++++ src/libCom/osi/os/Darwin/osdEnv.c | 10 ++++++++++ src/libCom/osi/os/default/osdEnv.c | 12 ++++++++++++ src/libCom/osi/os/iOS/osdEnv.c | 10 ++++++++++ src/libCom/osi/os/vxWorks/osdEnv.c | 19 +++++++++++++++++++ 5 files changed, 67 insertions(+) diff --git a/src/libCom/iocsh/libComRegister.c b/src/libCom/iocsh/libComRegister.c index d3a5cfac4..d8429fa9f 100644 --- a/src/libCom/iocsh/libComRegister.c +++ b/src/libCom/iocsh/libComRegister.c @@ -110,6 +110,21 @@ static void epicsEnvSetCallFunc(const iocshArgBuf *args) epicsEnvSet (name, value); } +/* epicsEnvUnset */ +static const iocshArg epicsEnvUnsetArg0 = { "name",iocshArgString}; +static const iocshArg * const epicsEnvUnsetArgs[1] = {&epicsEnvUnsetArg0}; +static const iocshFuncDef epicsEnvUnsetFuncDef = {"epicsEnvUnset",1,epicsEnvUnsetArgs}; +static void epicsEnvUnsetCallFunc(const iocshArgBuf *args) +{ + char *name = args[0].sval; + + if (name == NULL) { + fprintf(stderr, "Missing environment variable name argument.\n"); + return; + } + epicsEnvUnset (name); +} + /* epicsParamShow */ static const iocshFuncDef epicsParamShowFuncDef = {"epicsParamShow",0,NULL}; static void epicsParamShowCallFunc(const iocshArgBuf *args) @@ -367,6 +382,7 @@ void epicsShareAPI libComRegister(void) iocshRegister(&pwdFuncDef, pwdCallFunc); iocshRegister(&epicsEnvSetFuncDef, epicsEnvSetCallFunc); + iocshRegister(&epicsEnvUnsetFuncDef, epicsEnvUnsetCallFunc); iocshRegister(&epicsParamShowFuncDef, epicsParamShowCallFunc); iocshRegister(&epicsPrtEnvParamsFuncDef, epicsPrtEnvParamsCallFunc); iocshRegister(&epicsEnvShowFuncDef, epicsEnvShowCallFunc); diff --git a/src/libCom/osi/os/Darwin/osdEnv.c b/src/libCom/osi/os/Darwin/osdEnv.c index ab3f93644..f7ff12ced 100644 --- a/src/libCom/osi/os/Darwin/osdEnv.c +++ b/src/libCom/osi/os/Darwin/osdEnv.c @@ -39,6 +39,16 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val setenv(name, value, 1); } +/* + * Unset an environment variable + */ + +epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name) +{ + iocshEnvClear(name); + unsetenv(name); +} + /* * Show the value of the specified, or all, environment variables */ diff --git a/src/libCom/osi/os/default/osdEnv.c b/src/libCom/osi/os/default/osdEnv.c index 682bcc934..27cb1efd2 100644 --- a/src/libCom/osi/os/default/osdEnv.c +++ b/src/libCom/osi/os/default/osdEnv.c @@ -55,6 +55,18 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val } } +/* + * Unset an environment variable + * Using putenv with a an exsiting name but without "=..." deletes the variable. + */ + +epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name) +{ + iocshEnvClear(name); + if (getenv(name) != NULL) + putenv(name); +} + /* * Show the value of the specified, or all, environment variables */ diff --git a/src/libCom/osi/os/iOS/osdEnv.c b/src/libCom/osi/os/iOS/osdEnv.c index a32cce5ef..0c256725c 100644 --- a/src/libCom/osi/os/iOS/osdEnv.c +++ b/src/libCom/osi/os/iOS/osdEnv.c @@ -36,6 +36,16 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val setenv(name, value, 1); } +/* + * Unset an environment variable + */ + +epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name) +{ + iocshEnvClear(name); + unsetenv(name); +} + /* * Show the value of the specified, or all, environment variables */ diff --git a/src/libCom/osi/os/vxWorks/osdEnv.c b/src/libCom/osi/os/vxWorks/osdEnv.c index c81f49316..f09897681 100644 --- a/src/libCom/osi/os/vxWorks/osdEnv.c +++ b/src/libCom/osi/os/vxWorks/osdEnv.c @@ -51,6 +51,25 @@ epicsShareFunc void epicsShareAPI epicsEnvSet (const char *name, const char *val } } +/* + * Unset an environment variable + * Basically destroy the name of that variable because vxWorks does not + * support to really uset an environment variable. + */ + +epicsShareFunc void epicsShareAPI epicsEnvUnset (const char *name) +{ + char* var; + + if (!name) return; + iocshEnvClear(name); + var = getenv(name); + if (!var) return; + var -= strlen(name); + var --; + *var = 0; +} + /* * Show the value of the specified, or all, environment variables */