mescc: Support gcc-3.4.0: unsetenv.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 6 Jun 2018 17:43:32 +0000 (19:43 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 6 Jun 2018 17:43:32 +0000 (19:43 +0200)
* lib/gcc.c (unsetenv): New function.

build-aux/check-mescc.sh
include/stdlib.h
lib/gcc.c
scaffold/tests/94-unsetenv.c [new file with mode: 0644]

index 6d7c6099eb16a5454fb195bc8ff97173b5de3831..83d6736274f9753ab34e78ce70d85ea4c2d2e158 100755 (executable)
@@ -138,6 +138,7 @@ t
 91-fseek
 92-stat
 93-fread-fwrite
+94-unsetenv
 "
 
 # 90: needs GNU, fails for mescc, passes for tcc
index 5e2078a9057f66f9ee5564974cd0a11da193071f..36c21d8dc962de9b8328a58e98373a70be49193c 100644 (file)
@@ -40,6 +40,7 @@ void exit (int);
 void free (void *ptr);
 char* getenv (char const* s);
 int setenv (char const* s, char const* v, int overwrite_p);
+void unsetenv (char const *name);
 void *malloc (size_t);
 void qsort (void *base, size_t nmemb, size_t size, int (*compar)(void const *, void const *));
 void *realloc (void *p, size_t size);
index 351385addcc2e09a0db30fb476b0106f5158625d..45fa72fdc3f1009b7f5de06d7c8855109f21e647 100644 (file)
--- a/lib/gcc.c
+++ b/lib/gcc.c
@@ -61,3 +61,22 @@ __moddi3 (double a, double b)
   eputs ("__moddi3 stub\n");
   return ((int) a %(int)b);
 }
+
+// gcc-3.4
+void
+unsetenv (char const *name)
+{
+  int length = strlen (name);
+  char **p = environ;
+  while (*p)
+    {
+      if (!strncmp (name, *p, length) && *(*p + length) == '=')
+        {
+          char **q = p;
+          q[0] = q[1];
+          while (*q++)
+            q[0] = q[1];
+        }
+      p++;
+    }
+}
diff --git a/scaffold/tests/94-unsetenv.c b/scaffold/tests/94-unsetenv.c
new file mode 100644 (file)
index 0000000..7a2cc3a
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * Mes --- Maxwell Equations of Software
+ * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of Mes.
+ *
+ * Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <libmes.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int
+main ()
+{
+  eputs ("setenv\n");
+  setenv ("FOO", "BAR", 1);
+  if (strcmp (getenv ("FOO"), "BAR"))
+    return 1;
+  eputs ("unsetenv\n");
+  unsetenv ("FOO");
+  if (getenv ("FOO"))
+    return 2;
+
+  return 0;
+}