mescc: Support gcc-3.4.0: unsetenv.

* lib/gcc.c (unsetenv): New function.
This commit is contained in:
Jan Nieuwenhuizen 2018-06-06 19:43:32 +02:00
parent 4f6f79973e
commit f60cac6e1d
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
4 changed files with 62 additions and 0 deletions

View file

@ -138,6 +138,7 @@ t
91-fseek
92-stat
93-fread-fwrite
94-unsetenv
"
# 90: needs GNU, fails for mescc, passes for tcc

View 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);

View file

@ -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++;
}
}

View file

@ -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;
}