[PATCH v2 3/6] Cygwin: Implement the GNU extension clearenv
Ken Brown
kbrown@cornell.edu
Wed Jun 6 15:46:00 GMT 2018
---
winsup/cygwin/common.din | 1 +
winsup/cygwin/environ.cc | 20 ++++++++++++++++++++
winsup/cygwin/include/cygwin/stdlib.h | 3 +++
3 files changed, 24 insertions(+)
diff --git a/winsup/cygwin/common.din b/winsup/cygwin/common.din
index 6e8bf9185..426cf172c 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 06e1ced01..bbe539816 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 845d2d81b..e274b8b94 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);
--
2.17.0
More information about the Cygwin-patches
mailing list