1 /* -*-comment-start: "//";comment-end:""-*-
2 * Mes --- Maxwell Equations of Software
3 * Copyright © 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
5 * This file is part of Mes.
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.
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.
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/>.
33 dlclose (void *handle)
39 dlopen (char const *filename, int flags)
45 execvp (char const *file, char *const argv[])
47 eputs ("execvp stub\n");
59 fdopen (int fd, char const *mode)
68 if (fd == -1) return -1;
75 eputs ("fflush stub\n");
80 fprintf (FILE *stream, char const *format, ...)
83 va_start (ap, format);
84 int r = vfprintf (stream, format, ap);
90 fread (void *ptr, size_t size, size_t nmemb, FILE *stream)
92 eputs ("fread stub\n");
97 fseek (FILE *stream, long offset, int whence)
99 eputs ("fseek stub\n");
106 eputs ("ftell stub\n");
111 fwrite (void const *ptr, size_t size, size_t nmemb, FILE *stream)
113 int fd = (int)stream;
114 return write (fd, ptr, size * nmemb);
118 gettimeofday (struct timeval *tv, struct timezone *tz)
124 ldexp (double x, int exp)
126 eputs ("ldexp stub\n");
131 localtime (time_t const *timep)
133 eputs ("localtime stub\n");
138 memmove (void *dest, void const *src, size_t n)
141 return memcpy (dest, src, n);
143 char const *q = src +n;
150 memset (void *s, int c, size_t n)
153 while (n--) *p++ = c;
158 memcmp (void const *s1, void const *s2, size_t n)
162 while (*a == *b && --n) {a++;b++;}
167 mprotect (void *addr, size_t len, int prot)
173 qswap (void *a, void *b, size_t size)
176 memcpy (buf, a, size);
178 memcpy (b, buf, size);
182 qpart (void *base, size_t count, size_t size, int (*compare)(void const *, void const *))
184 void* p = base + count*size;
186 for (size_t j = 0; j < count; j++)
188 if (compare (base+j*size, p) < 0)
190 qswap (base+i*size, base+j*size, size);
194 if (compare (base+count*size, base+i*size) < 0)
195 qswap (base+i*size, base+count*size, size);
200 qsort (void *base, size_t count, size_t size, int (*compare)(void const *, void const *))
204 int p = qpart (base, count-1, size, compare);
205 qsort (base, p, size, compare);
206 qsort (base+p*size, count-p, size, compare);
211 remove (char const *file_name)
213 eputs ("remove stub\n");
218 sigaction (int signum, struct sigaction const *act, struct sigaction *oldact)
224 sigemptyset (sigset_t *set)
230 snprintf(char *str, size_t size, char const *format, ...)
233 va_start (ap, format);
234 int r = vsprintf (str, format, ap);
240 sscanf (char const *str, const char *format, ...)
242 eputs ("sscanf stub\n");
247 strcat (char *dest, char const *src)
249 char *p = strchr (dest, '\0');
250 while (*src++) *p++ = *src++;
256 strchr (char const *s, int c)
261 if (c == *p) return p;
268 strncpy (char *dest, char const *src, size_t length)
271 while (*src && length--)
281 strrchr (char const *s, int c)
285 char const *p = s + n - 1;
288 if (c == *p) return p;
295 strstr (char const *haystack, char const *needle)
297 eputs ("strstr stub\n");
302 strtod (char const *nptr, char **endptr)
304 eputs ("strtoul stub\n");
308 strtof (char const *nptr, char **endptr)
310 return strtod (nptr, endptr);
314 strtold (char const *nptr, char **endptr)
316 return strtod (nptr, endptr);
320 strtol (char const *nptr, char **endptr, int base)
322 if (!strncmp (nptr, "0x", 2))
324 char const *p = nptr + 2;
325 return abtoi (&p, 16);
327 return abtoi (&nptr, base);
331 strtoll (char const *nptr, char **endptr, int base)
333 eputs ("strtoll stub\n");
338 strtoul (char const *nptr, char **endptr, int base)
340 eputs ("strtoul stub\n");
345 strtoull (char const *p, char **endptr, int base)
348 return abtoi (endptr, base);
351 time_t time (time_t *tloc)
357 vsnprintf (char *str, size_t size, char const *format, va_list ap)
359 return vsprintf (str, format, ap);
363 calloc (size_t nmemb, size_t size)
365 size_t count = nmemb * size;
366 void *p = malloc (count);
367 memset (p, 0, count);
372 vfprintf (FILE* f, char const* format, va_list ap)
375 char const *p = format;
385 case '%': {fputc (*p, fd); break;}
386 case 'c': {char c; c = va_arg (ap, char); fputc (c, fd); break;}
387 case 'd': {int d; d = va_arg (ap, int); fputs (itoa (d), fd); break;}
388 case 's': {char *s; s = va_arg (ap, char *); fputs (s, fd); break;}
389 default: {fputc (*p, fd); break;}