mescc: Refactor debug and stub printing.
[mes.git] / lib / binutils.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 <stdlib.h>
24
25 int
26 abs (int x)
27 {
28   if (x < 0)
29     return -x;
30   return x;
31 }
32
33 int
34 chown (char const *file_name, uid_t owner, gid_t group)
35 {
36   static int stub = 0;
37   if (__mes_debug () && !stub)
38     eputs ("chown stub\n");
39   stub = 1;
40   errno = 0;
41   return 0;
42 }
43
44 int
45 ctime (int x)
46 {
47   static int stub = 0;
48   if (__mes_debug () && !stub)
49     eputs ("ctime stub\n");
50   stub = 1;
51   errno = 0;
52   return 0;
53 }
54
55 char *
56 fdgets (char *s, int count, int fd)
57 {
58   int c = 0;
59   char *p = s;
60   while (--count > 0 && c != '\n')
61     {
62       c = fdgetc (fd);
63       if (c == EOF)
64         break;
65       *p++ = c;
66     }
67   if (p == s && (c == EOF || count == -1))
68     return 0;
69   *p = 0;
70   return s;
71 }
72
73 int
74 feof (FILE *stream)
75 {
76   char c = fgetc (stream);
77   if (c != EOF)
78     ungetc (c, stream);
79   return c == EOF;
80 }
81
82 char *
83 fgets (char *s, int count, FILE *stream)
84 {
85   return fdgets (s, count, (int)stream);
86 }
87
88 int
89 frexp (int x)
90 {
91   static int stub = 0;
92   if (__mes_debug () && !stub)
93     eputs ("frexp stub\n");
94   stub = 1;
95   return 0;
96 }
97
98 void
99 perror (char const *message)
100 {
101   fprintf (stderr, "%s: %s\n", strerror (errno), message);
102 }
103
104 int
105 sigsetmask (int x)
106 {
107   static int stub = 0;
108   if (__mes_debug () && !stub)
109     eputs ("sigsetmask stub\n");
110   stub = 1;
111   errno = 0;
112   return 0;
113 }
114
115 size_t
116 strcspn (char const *string, char const *stopset)
117 {
118   char *p = string;
119   while (*p)
120     if (strchr (stopset, *p))
121       break;
122     else
123       p++;
124   return p - string;
125 }
126
127 char *
128 strncat (char *to, char const *from, size_t size)
129 {
130   if (size == 0)
131     return to;
132   char *p = strchr (to , '\0');
133   while (*from && size-- > 0)
134     *p++ = *from++;
135   *p = 0;
136   return to;
137 }
138
139 char *
140 strpbrk (char const *string, char const* stopset)
141 {
142   char *p = string;
143   while (*p)
144     if (strchr (stopset, *p))
145       break;
146     else
147       p++;
148   return p;
149 }
150
151 size_t
152 strspn (char const *string, char const *skipset)
153 {
154   char *p = string;
155   while (*p)
156     if (!strchr (skipset, *p))
157       break;
158     else
159       p++;
160   return p - string;
161 }
162
163 int
164 sys_siglist (int x)
165 {
166   static int stub = 0;
167   if (__mes_debug () && !stub)
168     eputs ("sys_siglist stub\n");
169   stub = 1;
170   errno = 0;
171   return 0;
172 }
173
174 int
175 umask (int x)
176 {
177   static int stub = 0;
178   if (__mes_debug () && !stub)
179     eputs ("umask stub\n");
180   stub = 1;
181   errno = 0;
182   return 0;
183 }
184
185 int
186 utime (int x)
187 {
188   static int stub = 0;
189   if (__mes_debug () && !stub)
190     eputs ("utime stub\n");
191   errno = 0;
192   return 0;
193 }
194
195 // binutils-2.10.1
196 int
197 fscanf (FILE *stream, char const *template, ...)
198 {
199   static int stub = 0;
200   if (__mes_debug () && !stub)
201     eputs ("fscan stub\n");
202   stub = 1;
203   return 0;
204 }
205
206 int
207 isascii (int c)
208 {
209   return c >= 0 && c <= 127;
210 }
211
212 void *
213 #if __MESC__
214 bsearch (void const *key, void const *array, size_t count, size_t size, void (*compare) ())
215 #else
216 bsearch (void const *key, void const *array, size_t count, size_t size, comparison_fn_t compare)
217 #endif
218 {
219   static int stub = 0;
220   if (__mes_debug () && !stub)
221     eputs ("bsearch stub\n");
222   stub = 1;
223   return 0;
224 }
225
226 struct tm *
227 gmtime (time_t const *time)
228 {
229   static int stub = 0;
230   if (__mes_debug () && !stub)
231     eputs ("gmtime stub\n");
232   stub = 1;
233   errno = 0;
234   return localtime (time);
235 }
236
237 #if __SBRK_CHAR_PTRDIFF
238 char *
239 sbrk (ptrdiff_t)
240 #else
241 void *
242 sbrk (intptr_t delta)
243 #endif
244 {
245   if (delta >= 0)
246     return malloc (delta);
247   return g_brk;
248 }
249
250 // binutils 2.30
251 char *
252 strdup (char const *s)
253 {
254   size_t length = strlen (s) + 1;
255   char *p = (char*)malloc (length);
256   if (p)
257     return memcpy (p, s, length);
258   return 0;
259 }
260
261 int
262 raise (int signum)
263 {
264   kill (getpid (), signum);
265 }
266
267 size_t
268 strftime (char *s, size_t size, char const *template,
269           struct tm const *brokentime)
270 {
271   static int stub = 0;
272   if (__mes_debug () && !stub)
273     eputs ("strftime stub\n");
274   stub = 1;
275   return template;
276 }
277
278 #if !__MESC__
279 typedef char wchar_t[];
280
281 size_t
282 mbstowcs (wchar_t *wstring, char const *string,
283           size_t size)
284 {
285   static int stub = 0;
286   if (__mes_debug () && !stub)
287     eputs ("mbstowcs stub\n");
288   stub = 1;
289   strcpy (wstring, string);
290   return strlen (string);
291 }
292 #endif
293
294 void
295 clearerr (FILE *stream)
296 {
297   errno = 0;
298 }
299
300 double
301 fabs (double number)
302 {
303   if (number < 0)
304     return -number;
305   return number;
306 }