MINOR: tools: add an unsetenv() implementation
Older Solaris and AIX versions do not have unsetenv(). This adds a fairly simple implementation which scans the environment, for use with those systems. It will simply require to pass the define in the "DEFINE" macro at build time like this : DEFINE="-Dunsetenv=my_unsetenv"
This commit is contained in:
parent
e0609f5f49
commit
9d22e56178
|
@ -1224,6 +1224,16 @@ char *memprintf(char **out, const char *format, ...)
|
|||
*/
|
||||
char *indent_msg(char **out, int level);
|
||||
|
||||
/* removes environment variable <name> from the environment as found in
|
||||
* environ. This is only provided as an alternative for systems without
|
||||
* unsetenv() (old Solaris and AIX versions). THIS IS NOT THREAD SAFE.
|
||||
* The principle is to scan environ for each occurence of variable name
|
||||
* <name> and to replace the matching pointers with the last pointer of
|
||||
* the array (since variables are not ordered).
|
||||
* It always returns 0 (success).
|
||||
*/
|
||||
int my_unsetenv(const char *name);
|
||||
|
||||
/* Convert occurrences of environment variables in the input string to their
|
||||
* corresponding value. A variable is identified as a series of alphanumeric
|
||||
* characters or underscores following a '$' sign. The <in> string must be
|
||||
|
|
|
@ -3699,6 +3699,38 @@ char *indent_msg(char **out, int level)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* removes environment variable <name> from the environment as found in
|
||||
* environ. This is only provided as an alternative for systems without
|
||||
* unsetenv() (old Solaris and AIX versions). THIS IS NOT THREAD SAFE.
|
||||
* The principle is to scan environ for each occurence of variable name
|
||||
* <name> and to replace the matching pointers with the last pointer of
|
||||
* the array (since variables are not ordered).
|
||||
* It always returns 0 (success).
|
||||
*/
|
||||
int my_unsetenv(const char *name)
|
||||
{
|
||||
extern char **environ;
|
||||
char **p = environ;
|
||||
int vars;
|
||||
int next;
|
||||
int len;
|
||||
|
||||
len = strlen(name);
|
||||
for (vars = 0; p[vars]; vars++)
|
||||
;
|
||||
next = 0;
|
||||
while (next < vars) {
|
||||
if (strncmp(p[next], name, len) != 0 || p[next][len] != '=') {
|
||||
next++;
|
||||
continue;
|
||||
}
|
||||
if (next < vars - 1)
|
||||
p[next] = p[vars - 1];
|
||||
p[--vars] = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Convert occurrences of environment variables in the input string to their
|
||||
* corresponding value. A variable is identified as a series of alphanumeric
|
||||
* characters or underscores following a '$' sign. The <in> string must be
|
||||
|
|
Loading…
Reference in New Issue