diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2000-07-26 18:51:14 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2000-07-26 18:51:14 +0000 |
commit | 0d4c5950ff6bf63e4567aec1413015417017a4a6 (patch) | |
tree | ae0652e703909b431d095d09fabb3a33f7005f0c | |
parent | f489e86b8f70856412603fabbceba3cc8039500c (diff) | |
download | newlib-0d4c5950ff6bf63e4567aec1413015417017a4a6.zip newlib-0d4c5950ff6bf63e4567aec1413015417017a4a6.tar.gz newlib-0d4c5950ff6bf63e4567aec1413015417017a4a6.tar.bz2 |
* environ.cc (posify): Revert previous patch.
(_addenv): Remove check_null_empty_path from here.
(putenv): Call check_nullempty_path.
(setenv): Call check_nullempty_path for name as well here.
Don't report an error if value is empty string.
(environ_init): Revert usage of newp.
-rw-r--r-- | winsup/cygwin/ChangeLog | 9 | ||||
-rw-r--r-- | winsup/cygwin/environ.cc | 46 |
2 files changed, 37 insertions, 18 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 99afaf9..20f14e7 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +Wed Jul 26 20:44:00 2000 Corinna Vinschen <corinna@vinschen.de> + + * environ.cc (posify): Revert previous patch. + (_addenv): Remove check_null_empty_path from here. + (putenv): Call check_nullempty_path. + (setenv): Call check_nullempty_path for name as well here. + Don't report an error if value is empty string. + (environ_init): Revert usage of newp. + Wed Jul 26 14:32:38 2000 Egor Duda <deo@logos-m.ru> * syscalls.cc (stat_worker): Make stat return correct st_blocks for diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index ccf6151..03ea634 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -121,6 +121,7 @@ posify (int already_posix, char **here, const char *value) debug_printf ("env var converted to %s", outenv); *here = outenv; + free (src); } } @@ -180,13 +181,6 @@ _addenv (const char *name, const char *value, int overwrite) int offset; char *p; - int res; - if ((res = check_null_empty_path (name))) - { - set_errno (res); - return -1; - } - unsigned int valuelen = strlen (value); if ((p = my_findenv (name, &offset))) { /* Already exists. */ @@ -259,6 +253,14 @@ _addenv (const char *name, const char *value, int overwrite) extern "C" int putenv (const char *str) { + int res; + if ((res = check_null_empty_path (str))) + { + if (res == ENOENT) + return 0; + set_errno (res); + return -1; + } char *eq = strchr (str, '='); if (eq) return _addenv (str, eq + 1, -1); @@ -278,8 +280,15 @@ extern "C" int setenv (const char *name, const char *value, int overwrite) { int res; - if ((res = check_null_empty_path (value))) + if ((res = check_null_empty_path (value)) == EFAULT) + { + set_errno (res); + return -1; + } + if ((res = check_null_empty_path (name))) { + if (res == ENOENT) + return 0; set_errno (res); return -1; } @@ -493,7 +502,7 @@ environ_init (int already_posix) char *rawenv = GetEnvironmentStrings (); int envsize, i; char *p; - char **envp; + char *newp, **envp; int sawTERM = 0; static char cygterm[] = "TERM=cygwin"; @@ -516,21 +525,22 @@ environ_init (int already_posix) eventually want to use them). */ for (i = 0, p = rawenv; *p != '\0'; p = strchr (p, '\0') + 1, i++) { + newp = strdup (p); if (i >= envsize) envp = (char **) realloc (envp, (4 + (envsize += 100)) * sizeof (char *)); - envp[i] = p; - if (*p == '=') - *p = '!'; + envp[i] = newp; + if (*newp == '=') + *newp = '!'; char *eq; - if ((eq = strchr (p, '=')) == NULL) - eq = strchr (p, '\0'); + if ((eq = strchr (newp, '=')) == NULL) + eq = strchr (newp, '\0'); if (!parent_alive) - ucenv (p, eq); - if (strncmp (p, "TERM=", 5) == 0) + ucenv (newp, eq); + if (strncmp (newp, "TERM=", 5) == 0) sawTERM = 1; - if (strncmp (p, "CYGWIN=", sizeof("CYGWIN=") - 1) == 0) - parse_options (p + sizeof("CYGWIN=") - 1); + if (strncmp (newp, "CYGWIN=", sizeof("CYGWIN=") - 1) == 0) + parse_options (newp + sizeof("CYGWIN=") - 1); if (*eq) posify (already_posix, envp + i, *++eq ? eq : --eq); debug_printf ("%s", envp[i]); |