diff options
author | Ken Brown <kbrown@cornell.edu> | 2018-06-06 11:45:56 -0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2018-06-07 09:42:36 +0200 |
commit | defaa2ca31cd3e407451d55ea8414f30d7dddf65 (patch) | |
tree | 8165cf77c3608bc9a5719557138bb2be8019f541 /winsup/cygwin | |
parent | 9234545e3d84a873e1c1a6faff28cfb55320a248 (diff) | |
download | newlib-defaa2ca31cd3e407451d55ea8414f30d7dddf65.zip newlib-defaa2ca31cd3e407451d55ea8414f30d7dddf65.tar.gz newlib-defaa2ca31cd3e407451d55ea8414f30d7dddf65.tar.bz2 |
Cygwin: Implement the GNU extension clearenv
Diffstat (limited to 'winsup/cygwin')
-rw-r--r-- | winsup/cygwin/common.din | 1 | ||||
-rw-r--r-- | winsup/cygwin/environ.cc | 20 | ||||
-rw-r--r-- | winsup/cygwin/include/cygwin/stdlib.h | 3 |
3 files changed, 24 insertions, 0 deletions
diff --git a/winsup/cygwin/common.din b/winsup/cygwin/common.din index 6e8bf91..426cf17 100644 --- a/winsup/cygwin/common.din +++ b/winsup/cygwin/common.din @@ -306,6 +306,7 @@ cimag NOSIGFE cimagf NOSIGFE cimagl NOSIGFE cleanup_glue NOSIGFE +clearenv SIGFE clearerr SIGFE clearerr_unlocked SIGFE clock SIGFE diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index 06e1ced..bbe5398 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -720,6 +720,26 @@ unsetenv (const char *name) return -1; } +/* Clear the environment. */ +extern "C" int +clearenv (void) +{ + __try + { + if (cur_environ () == lastenviron) + { + free (lastenviron); + lastenviron = NULL; + } + __cygwin_environ = NULL; + update_envptrs (); + return 0; + } + __except (EFAULT) {} + __endtry + return -1; +} + /* Minimal list of Windows vars which must be converted to uppercase. Either for POSIX compatibility of for backward compatibility with existing applications. */ diff --git a/winsup/cygwin/include/cygwin/stdlib.h b/winsup/cygwin/include/cygwin/stdlib.h index 845d2d8..e274b8b 100644 --- a/winsup/cygwin/include/cygwin/stdlib.h +++ b/winsup/cygwin/include/cygwin/stdlib.h @@ -26,6 +26,9 @@ char *canonicalize_file_name (const char *); #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 int unsetenv (const char *); #endif +#if __MISC_VISIBLE +int clearenv (void); +#endif #if __XSI_VISIBLE char *ptsname (int); int grantpt (int); |