0f0425d3ab495be5da813a1256ccdffcbe811afa
[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 #define SYS_link      0x09
22 #define SYS_getpid    0x14
23 #define SYS_getuid    0x18
24 #define SYS_kill      0x25
25 #define SYS_rename    0x26
26 #define SYS_mkdir     0x27
27 #define SYS_dup       0x29
28 #define SYS_pipe      0x2a
29 #define SYS_getgid    0x2f
30 #define SYS_signal    0x30
31 #define SYS_fcntl     0x37
32 #define SYS_dup2      0x3f
33 #define SYS_getrusage 0x4d
34 #define SYS_lstat     0x6b
35 #define SYS_setitimer 0x68
36 #define SYS_fstat     0x6c
37 #define SYS_nanosleep 0xa2
38
39 #include <sys/resource.h>
40
41 int
42 link (char const *old_name, char const *new_name)
43 {
44   return _sys_call2 (SYS_link, (int)old_name, (int)new_name);
45 }
46
47 pid_t
48 getpid ()
49 {
50   return _sys_call (SYS_getpid);
51 }
52
53 uid_t
54 getuid ()
55 {
56   return _sys_call (SYS_getuid);
57 }
58
59 int
60 kill (pid_t pid, int signum)
61 {
62   return _sys_call2 (SYS_kill, (int)pid, (int)signum);
63 }
64
65 int
66 rename (char const *old_name, char const *new_name)
67 {
68   return _sys_call2 (SYS_rename, (int)old_name, (int)new_name);
69 }
70
71 int
72 mkdir (char const *file_name, mode_t mode)
73 {
74   return _sys_call2 (SYS_mkdir, (int)file_name, (int)mode);
75 }
76
77 int
78 dup (int old)
79 {
80   return _sys_call1 (SYS_dup, (int)old);
81 }
82
83 gid_t
84 getgid ()
85 {
86   return _sys_call (SYS_getgid);
87 }
88
89 #if __MESC__
90 void *
91 signal (int signum, void * action)
92 #else
93 sighandler_t
94 signal (int signum, sighandler_t action)
95 #endif
96 {
97   return _sys_call2 (SYS_signal, signum, action);
98 }
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, (int)filedes, (int)command, (int)data);
107   va_end (ap);
108   return r;
109 }
110
111 int
112 pipe (int filedes[2])
113 {
114   return _sys_call1 (SYS_pipe, (int)filedes);
115 }
116
117 int
118 dup2 (int old, int new)
119 {
120   return _sys_call2 (SYS_dup2, (int)old, (int)new);
121 }
122
123 int
124 getrusage (int processes, struct rusage *rusage)
125 {
126   return _sys_call2 (SYS_getrusage, (int)processes, (int)rusage);
127 }
128
129 int
130 lstat (char const *file_name, struct stat *statbuf)
131 {
132   return _sys_call2 (SYS_lstat, (int)file_name, (int)statbuf);
133 }
134
135 int
136 nanosleep (const struct timespec *requested_time,
137            struct timespec *remaining)
138 {
139   return _sys_call2 (SYS_nanosleep, (int)requested_time, (int)remaining);
140 }
141
142 int
143 setitimer (int which, struct itimerval const *new,
144           struct itimerval *old)
145 {
146   return _sys_call3 (SYS_setitimer, (int)which, (int)new, (int)old);
147 }
148
149 int
150 fstat (int fd, struct stat *statbuf)
151 {
152   return _sys_call2 (SYS_fstat, (int)fd, (int)statbuf);
153 }