mescc: Support binutils-2.10.1: Stubs set errno to 0.
[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   eputs ("chown stub\n");
37   errno = 0;
38   return 0;
39 }
40
41 int
42 ctime (int x)
43 {
44 #if NOISY_TIMES
45   eputs ("ctime stub\n");
46 #endif
47   errno = 0;
48   return 0;
49 }
50
51 char *
52 fdgets (char *s, int count, int fd)
53 {
54   int c = 0;
55   char *p = s;
56   while (--count > 0 && c != '\n')
57     {
58       c = fdgetc (fd);
59       if (c == EOF)
60         break;
61       *p++ = c;
62     }
63   if (p == s && (c == EOF || count == -1))
64     return 0;
65   *p = 0;
66   return s;
67 }
68
69 int
70 feof (FILE *stream)
71 {
72   char c = fgetc (stream);
73   if (c != EOF)
74     ungetc (c, stream);
75   return c == EOF;
76 }
77
78 char *
79 fgets (char *s, int count, FILE *stream)
80 {
81   return fdgets (s, count, (int)stream);
82 }
83
84 int
85 frexp (int x)
86 {
87   eputs ("frexp stub\n");
88   return 0;
89 }
90
91 void
92 perror (char const *message)
93 {
94   fprintf (stderr, "%s: %s\n", strerror (errno), message);
95 }
96
97 int
98 sigsetmask (int x)
99 {
100   eputs ("sigsetmask stub\n");
101   errno = 0;
102   return 0;
103 }
104
105 size_t
106 strcspn (char const *string, char const *stopset)
107 {
108   char *p = string;
109   while (*p)
110     if (strchr (stopset, *p))
111       break;
112     else
113       p++;
114   return p - string;
115 }
116
117 char *
118 strncat (char *to, char const *from, size_t size)
119 {
120   if (size == 0)
121     return to;
122   char *p = strchr (to , '\0');
123   while (*from && size-- > 0)
124     *p++ = *from++;
125   *p = 0;
126   return to;
127 }
128
129 char *
130 strpbrk (char const *string, char const* stopset)
131 {
132   char *p = string;
133   while (*p)
134     if (strchr (stopset, *p))
135       break;
136     else
137       p++;
138   return p;
139 }
140
141 size_t
142 strspn (char const *string, char const *skipset)
143 {
144   char *p = string;
145   while (*p)
146     if (!strchr (skipset, *p))
147       break;
148     else
149       p++;
150   return p - string;
151 }
152
153 int
154 sys_siglist (int x)
155 {
156   eputs ("sys_siglist stub\n");
157   errno = 0;
158   return 0;
159 }
160
161 int
162 umask (int x)
163 {
164   eputs ("umask stub\n");
165   errno = 0;
166   return 0;
167 }
168
169 int
170 utime (int x)
171 {
172 #if NOISY_TIMES
173   eputs ("utime stub\n");
174 #endif
175   errno = 0;
176   return 0;
177 }
178
179 // binutils-2.10.1
180 int
181 fscanf (FILE *stream, char const *template, ...)
182 {
183   eputs ("fscan stub\n");
184   return 0;
185 }
186
187 int
188 isascii (int c)
189 {
190   return c >= 0 && c <= 127;
191 }
192
193 void *
194 #if __MESC__
195 bsearch (void const *key, void const *array, size_t count, size_t size, void (*compare) ())
196 #else
197 bsearch (void const *key, void const *array, size_t count, size_t size, comparison_fn_t compare)
198 #endif
199 {
200   eputs ("bsearch stub\n");
201   return 0;
202 }
203
204 struct tm *
205 gmtime (time_t const *time)
206 {
207 #if NOISY_TIMES
208   eputs ("gmtime stub\n");
209 #endif
210   errno = 0;
211   return localtime (time);
212 }
213
214 #if __SBRK_CHAR_PTRDIFF
215 char *
216 sbrk (ptrdiff_t)
217 #else
218 void *
219 sbrk (intptr_t delta)
220 #endif
221 {
222   if (delta >= 0)
223     return malloc (delta);
224   return g_brk;
225 }