mescc: Mes C Library: Support make: Add chdir, getlogin, setvbuf, sigblock.
[mes.git] / lib / linux / gnu.c
1 /* -*-comment-start: "//";comment-end:""-*-
2  * GNU Mes --- Maxwell Equations of Software
3  * Copyright © 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 <sys/resource.h>
22
23 int
24 chdir (char const *file_name)
25 {
26   return _sys_call1 (SYS_chdir, (long)file_name);
27 }
28
29 int
30 link (char const *old_name, char const *new_name)
31 {
32   return _sys_call2 (SYS_link, (long)old_name, (long)new_name);
33 }
34
35 pid_t
36 getpid ()
37 {
38   return _sys_call (SYS_getpid);
39 }
40
41 uid_t
42 getuid ()
43 {
44   return _sys_call (SYS_getuid);
45 }
46
47 int
48 kill (pid_t pid, int signum)
49 {
50   return _sys_call2 (SYS_kill, (long)pid, (long)signum);
51 }
52
53 int
54 rename (char const *old_name, char const *new_name)
55 {
56   return _sys_call2 (SYS_rename, (long)old_name, (long)new_name);
57 }
58
59 int
60 mkdir (char const *file_name, mode_t mode)
61 {
62   return _sys_call2 (SYS_mkdir, (long)file_name, (long)mode);
63 }
64
65 int
66 dup (int old)
67 {
68   return _sys_call1 (SYS_dup, (long)old);
69 }
70
71 gid_t
72 getgid ()
73 {
74   return _sys_call (SYS_getgid);
75 }
76
77 #if __i386__
78 #if __MESC__
79 void *
80 signal (int signum, void * action)
81 #else
82 sighandler_t
83 signal (int signum, sighandler_t action)
84 #endif
85 {
86   return _sys_call2 (SYS_signal, signum, action);
87 }
88 #elif __x86_64__
89 sighandler_t
90 signal (int signum, sighandler_t action)
91 {
92   sighandler_t old;
93   _sys_call3 (SYS_rt_sigaction, signum, action, &old);
94   return old;
95 }
96 #else
97 #error arch not supported
98 #endif
99
100 int
101 fcntl (int filedes, int command, ...)
102 {
103   va_list ap;
104   va_start (ap, command);
105   int data = va_arg (ap, int);
106   int r = _sys_call3 (SYS_fcntl, (long)filedes, (long)command, (long)data);
107   va_end (ap);
108   return r;
109 }
110
111 int
112 pipe (int filedes[2])
113 {
114   return _sys_call1 (SYS_pipe, (long)filedes);
115 }
116
117 int
118 dup2 (int old, int new)
119 {
120   return _sys_call2 (SYS_dup2, (long)old, (long)new);
121 }
122
123 int
124 getrusage (int processes, struct rusage *rusage)
125 {
126   return _sys_call2 (SYS_getrusage, (long)processes, (long)rusage);
127 }
128
129 int
130 lstat (char const *file_name, struct stat *statbuf)
131 {
132   return _sys_call2 (SYS_lstat, (long)file_name, (long)statbuf);
133 }
134
135 int
136 nanosleep (const struct timespec *requested_time,
137            struct timespec *remaining)
138 {
139   return _sys_call2 (SYS_nanosleep, (long)requested_time, (long)remaining);
140 }
141
142 int
143 setitimer (int which, struct itimerval const *new,
144           struct itimerval *old)
145 {
146   return _sys_call3 (SYS_setitimer, (long)which, (long)new, (long)old);
147 }
148
149 int
150 fstat (int fd, struct stat *statbuf)
151 {
152   return _sys_call2 (SYS_fstat, (long)fd, (long)statbuf);
153 }
154
155 int
156 getdents (long filedes, char *buffer, size_t nbytes)
157 {
158   return _sys_call3 (SYS_getdents, (long)filedes, (long)buffer, (long)nbytes);
159 }