mescc: Support gnu toolchain: libtcc1.
[mes.git] / lib / gcc.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * Mes --- Maxwell Equations of Software
3  * Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of Mes.
6  *
7  * Mes is free software; you can redistribute it and/or modify it
8  * under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or (at
10  * your option) any later version.
11  *
12  * Mes is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <libmes.h>
22 #include <stdint.h>
23 #include <time.h>
24 #include <sys/times.h>
25 #include <sys/time.h>
26
27 FILE *
28 freopen (char const *file_name, char const *opentype, FILE *stream)
29 {
30   fclose (stream);
31   return fopen (file_name, opentype);
32 }
33
34 clock_t
35 times (struct tms *buffer)
36 {
37   static int stub = 0;
38   if (__mes_debug () && !stub)
39     eputs ("times stub\n");
40   stub = 1;
41   return 0;
42 }
43
44 unsigned int
45 sleep (unsigned int seconds)
46 {
47   struct timespec requested_time;
48   struct timespec remaining;
49   requested_time.tv_sec = seconds;
50   requested_time.tv_nsec = 0;
51   return nanosleep (&requested_time, &remaining);
52 }
53
54 // gcc-3.4
55 void
56 unsetenv (char const *name)
57 {
58   int length = strlen (name);
59   char **p = environ;
60   while (*p)
61     {
62       if (!strncmp (name, *p, length) && *(*p + length) == '=')
63         {
64           char **q = p;
65           q[0] = q[1];
66           while (*q++)
67             q[0] = q[1];
68         }
69       p++;
70     }
71 }
72
73 // gcc-3.0
74 int
75 atexit (void (*function) (void))
76 {
77   __call_at_exit = function;
78 }
79
80 unsigned int
81 alarm (unsigned int seconds)
82 {
83 #if !__MESC__
84   struct itimerval old;
85   struct itimerval new;
86   new.it_interval.tv_usec = 0;
87   new.it_interval.tv_sec = 0;
88   new.it_value.tv_usec = 0;
89   new.it_value.tv_sec = (long int) seconds;
90   if (setitimer (ITIMER_REAL, &new, &old) < 0)
91     return 0;
92   return old.it_value.tv_sec;
93 #endif
94 }
95
96 // gcc-2.95.3
97
98 struct passwd *
99 getpwnam (const char *NAME)
100 {
101   static int stub = 0;
102   if (__mes_debug () && !stub)
103     eputs ("getpwnam stub\n");
104   stub = 1;
105   errno = 0;
106   return 0;
107 }