ef0ac469464a5a1e13a2140d43c720da8dfa1079
[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.2
55 double
56 __divdi3 (double a, double b)
57 {
58   static int stub = 0;
59   if (__mes_debug () && !stub)
60     eputs ("__divdi3 stub\n");
61   stub = 1;
62   return ((int)a / (int)b);
63 }
64
65 double
66 __moddi3 (double a, double b)
67 {
68   static int stub = 0;
69   if (__mes_debug () && !stub)
70     eputs ("__moddi3 stub\n");
71   stub = 1;
72   return ((int) a %(int)b);
73 }
74
75 // gcc-3.4
76 void
77 unsetenv (char const *name)
78 {
79   int length = strlen (name);
80   char **p = environ;
81   while (*p)
82     {
83       if (!strncmp (name, *p, length) && *(*p + length) == '=')
84         {
85           char **q = p;
86           q[0] = q[1];
87           while (*q++)
88             q[0] = q[1];
89         }
90       p++;
91     }
92 }
93
94 // gcc-3.0
95 int
96 atexit (void (*function) (void))
97 {
98   __call_at_exit = function;
99 }
100
101 unsigned int
102 alarm (unsigned int seconds)
103 {
104 #if !__MESC__
105   struct itimerval old;
106   struct itimerval new;
107   new.it_interval.tv_usec = 0;
108   new.it_interval.tv_sec = 0;
109   new.it_value.tv_usec = 0;
110   new.it_value.tv_sec = (long int) seconds;
111   if (setitimer (ITIMER_REAL, &new, &old) < 0)
112     return 0;
113   return old.it_value.tv_sec;
114 #endif
115 }
116
117 // gcc-2.95.3
118
119 struct passwd *
120 getpwnam (const char *NAME)
121 {
122   static int stub = 0;
123   if (__mes_debug () && !stub)
124     eputs ("getpwnam stub\n");
125   stub = 1;
126   errno = 0;
127   return 0;
128 }