1bcc0a7caf3117e090f74aef9baa7a3b77993b81
[mes.git] / lib / libc-gcc.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * Mes --- Maxwell Equations of Software
3  * Copyright © 2016,2017 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 <mlibc.h>
22 #include <stdio.h>
23
24 #include <mlibc.h>
25 #include <stdarg.h>
26 #include <stdlib.h>
27 #include <unistd.h>
28
29 #include <fcntl.h>
30 #include <assert.h>
31
32 #include <linux-mini-gcc.c>
33 #include <libc-mini.c>
34 #include <linux-gcc.c>
35 #include <libc.c>
36
37 #if POSIX
38
39 int
40 putchar (int c)
41 {
42   write (STDOUT, (char*)&c, 1);
43   return 0;
44 }
45
46 int ungetc_char = -1;
47 char ungetc_buf[2];
48
49 int
50 getchar ()
51 {
52   char c;
53   int i;
54   if (ungetc_char == -1)
55     {
56       int r = read (g_stdin, &c, 1);
57       if (r < 1) return -1;
58       i = c;
59     }
60   else
61     i = ungetc_buf[ungetc_char--];
62
63   if (i < 0) i += 256;
64
65   return i;
66 }
67
68 int
69 fdungetc (int c, int fd)
70 {
71   assert (ungetc_char < 2);
72   ungetc_buf[++ungetc_char] = c;
73   return c;
74 }
75
76 #endif // POSIX