b4aa79f92ba7a22d613c00e66e80cc5719bde6e0
[mes.git] / lib / libc-mini.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * GNU Mes --- Maxwell Equations of Software
3  * Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4  *
5  * This file is part of GNU Mes.
6  *
7  * GNU 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  * GNU 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 GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <errno.h>
22
23 #ifndef _SIZE_T
24 #define _SIZE_T
25 #ifndef __SIZE_T
26 #define __SIZE_T
27 #ifndef __MES_SIZE_T
28 #define __MES_SIZE_T
29 #undef size_t
30 typedef unsigned long size_t;
31 #endif
32 #endif
33 #endif
34
35 #ifndef _SSIZE_T
36 #define _SSIZE_T
37 #ifndef __SSIZE_T
38 #define __SSIZE_T
39 #ifndef __MES_SSIZE_T
40 #define __MES_SSIZE_T
41 #undef ssize_t
42 typedef long ssize_t;
43 #endif
44 #endif
45 #endif
46
47 ssize_t write (int filedes, void const *buffer, size_t size);
48
49 size_t
50 strlen (char const* s)
51 {
52   int i = 0;
53   while (s[i]) i++;
54   return i;
55 }
56
57 int
58 eputs (char const* s)
59 {
60   int i = strlen (s);
61   write (2, s, i);
62   return 0;
63 }
64
65 int
66 oputs (char const* s)
67 {
68   int i = strlen (s);
69   write (1, s, i);
70   return 0;
71 }
72
73 int
74 puts (char const* s)
75 {
76   oputs (s);
77   return oputs ("\n");
78 }
79
80 #if __GNU__
81 #include <hurd/libc-mini.c>
82 #elif __linux__
83 #include <linux/libc-mini.c>
84 #else
85 #error both __GNU__ and _linux__ are undefined, choose one
86 #endif
87
88 void (*__call_at_exit) (void);
89
90 void
91 exit (int code)
92 {
93   if (__call_at_exit)
94     (*__call_at_exit) ();
95   _exit (code);
96 }