PROCESS-WAIT: return only the return status
[iolib.git] / src / syscalls / pkgdcl.lisp
bloba08504b09a9dd9a69de44da41e175f931aa1968d
1 ;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*-
2 ;;;
3 ;;; --- Package definition
4 ;;;
6 (in-package :common-lisp-user)
8 (defpackage :iolib.syscalls
9 (:nicknames #:isys)
10 (:use :iolib.base :cffi)
11 (:shadow #:open #:close #:read #:write #:listen
12 #:truncate #:ftruncate #:time)
13 ;; Specials
14 (:export
15 #:*environ*)
16 ;; Simple POSIX Types
17 (:export
18 #:bool
19 #:size-t
20 #:ssize-t
21 #:intptr-t
22 #:uintptr-t
23 #:pid-t
24 #:gid-t
25 #:uid-t
26 #:off-t
27 #:mode-t
28 #:time-t
29 #:useconds-t
30 #:suseconds-t
31 #:dev-t
32 #:ino-t
33 #:nlink-t
34 #:blksize-t
35 #:blkcnt-t
36 #:nfds-t
37 #:rlim-t
38 #:id-t
39 #:clockid-t)
41 ;;-----------------------------------------
42 ;; Error conditions, wrappers and definers
43 ;;-----------------------------------------
44 (:export
46 #:iolib-condition #:iolib-error #:syscall-error
47 #:code-of #:identifier-of #:message-of #:handle-of #:handle2-of
48 #:make-syscall-error #:syscall-error-p #:get-syscall-error-condition
49 #:signal-syscall-error #:signal-syscall-error/restart
50 #:poll-error #:event-type-of #:poll-timeout
52 ;; Syscall return wrapper
53 #:syscall-wrapper
54 #:error-predicate-of
55 #:error-location-of
56 #:return-filter-of
57 #:error-generator-of
58 #:syscall-restart-p
59 #:base-type-of
60 #:never-fails
61 #:signal-syscall-error
62 #:signal-syscall-error-kw
63 #:signal-syscall-error/restart
65 ;; Syscall definers
66 #:defentrypoint
67 #:defcfun*
68 #:defsyscall
70 ;; CFFI Type Designators
71 #:pointer-or-nil
72 #:pointer-or-nil-designator
73 #:bool
74 #:bool-designator
76 ;; SSTRING <-> CSTRING
77 #:+cstring-path-max+
78 #:cstring-to-sstring
79 #:sstring-to-cstring
80 #:with-cstring-to-sstring
81 #:with-sstring-to-cstring
83 ;; Misc
84 #:repeat-upon-condition
85 #:repeat-upon-eintr
86 #:repeat-decreasing-timeout
87 #:repeat-upon-condition-decreasing-timeout)
89 ;;--------------------------------
90 ;; Structs, slots and C constants
91 ;;--------------------------------
92 (:export ;; errno.h
93 #:errno-values
94 #:e2big #:eacces #:eaddrinuse #:eaddrnotavail
95 #:eafnosupport #:ealready #:ebadf #:ebadmsg #:ebusy #:ecanceled
96 #:echild #:econnaborted #:econnrefused #:econnreset #:edeadlk
97 #:edestaddrreq #:edom #:edquot #:eexist #:efault #:efbig #:ehostdown
98 #:ehostunreach #:eidrm #:eilseq #:einprogress #:eintr #:einval #:eio
99 #:eisconn #:eisdir #:eloop #:emfile #:emlink #:emsgsize #:emultihop
100 #:enametoolong #:enetdown #:enetreset #:enetunreach #:enfile
101 #:enobufs #:enodata #:enodev #:enoent #:enoexec #:enolck #:enolink
102 #:enomem #:enomsg #:enonet #:enoprotoopt #:enospc #:enosr #:enostr
103 #:enosys #:enotconn #:enotdir #:enotempty #:enotsock #:enotsup #:enotty
104 #:enxio #:eopnotsupp #:eoverflow #:eperm #:epipe #:eproto
105 #:eprotonosupport #:eprototype #:erange #:erofs #:eshutdown #:espipe
106 #:esrch #:estale #:etime #:etimedout #:etxtbsy #:ewouldblock #:exdev
107 #:ebug)
108 (:export ;; fcntl.h
109 ;; Open()
110 #:o-rdonly
111 #:o-wronly
112 #:o-rdwr
113 #:o-creat
114 #:o-excl
115 #:o-trunc
116 #:o-append
117 #:o-noctty
118 #:o-nonblock
119 #:o-ndelay
120 #:o-sync
121 #:o-nofollow
122 #:o-async
123 #:o-cloexec
124 ;; Fcntl()
125 #:f-dupfd
126 #:f-getfd
127 #:f-setfd
128 #:f-getfl
129 #:f-setfl
130 #:f-getlk
131 #:f-setlk
132 #:f-setlkw
133 #:f-getown
134 #:f-setown
135 #:f-rdlck
136 #:f-wrlck
137 #:f-unlck
138 #+linux #:f-getsig
139 #+linux #:f-setsig
140 #+linux #:f-setlease
141 #+linux #:f-getlease)
142 (:export ;; unistd.h
143 ;; Lseek()
144 #:seek-set
145 #:seek-cur
146 #:seek-end
147 ;; Access()
148 #:r-ok
149 #:w-ok
150 #:x-ok
151 #:f-ok)
152 (:export ;; time.h
153 ;; struct timespec
154 #:timespec
155 #:sec #:nsec
156 ;; Clock_gettime() et al.
157 #:clock-realtime
158 #:clock-monotonic)
159 (:export ;; sys/stat.h
160 #:path-max
161 ;; struct stat
162 #:stat
163 #:dev #:stat-dev
164 #:ino #:stat-ino
165 #:mode #:stat-mode
166 #:nlink #:stat-nlink
167 #:uid #:stat-uid
168 #:gid #:stat-gid
169 #:rdev #:stat-rdev
170 #:size #:stat-size
171 #:blksize #:stat-blksize
172 #:blocks #:stat-blocks
173 #:atime #:stat-atime
174 #:mtime #:stat-mtime
175 #:ctime #:stat-ctime
176 ;; Stat()
177 #:s-irwxu
178 #:s-irusr
179 #:s-iwusr
180 #:s-ixusr
181 #:s-ifmt
182 #:s-ififo
183 #:s-ifchr
184 #:s-ifdir
185 #:s-ifblk
186 #:s-ifreg
187 #:s-ifwht
188 #:s-iread
189 #:s-iwrite
190 #:s-iexec
191 #:s-irwxg
192 #:s-irgrp
193 #:s-iwgrp
194 #:s-ixgrp
195 #:s-irwxo
196 #:s-iroth
197 #:s-iwoth
198 #:s-ixoth
199 #:s-isuid
200 #:s-isgid
201 #:s-isvtx
202 #:s-iflnk
203 #:s-ifsock)
204 (:export ;; sys/ioctl.h
205 #:fionbio
206 #:fionread)
207 (:export ;; sys/wait.h
208 ;; Waitpid()
209 #:wnohang
210 #:wuntraced
211 #:wcontinued)
212 (:export ;; signal.h
213 ;; Kill()
214 #:signal
215 #:sighup
216 #:sigint
217 #:sigquit
218 #:sigill
219 #:sigabrt
220 #:sigfpe
221 #:sigkill
222 #:sigsegv
223 #:sigpipe
224 #:sigalrm
225 #:sigterm
226 #:sigusr1
227 #:sigusr2
228 #:sigchld
229 #:sigcont
230 #:sigstop
231 #:sigtstp
232 #:sigttin
233 #:sigttou
234 #:sigbus
235 #:sigpoll
236 #:sigprof
237 #:sigsys
238 #:sigtrap
239 #:sigurg
240 #:sigvtalrm
241 #:sigxcpu
242 #:sigxfsz
243 #:sigemt
244 #:sigio
245 #:sigcld
246 #:sigpwr
247 #:siginfo
248 #:siglost
249 #:sigwinch
250 #:sig-ign
251 #:sig-dfl
252 ;; struct sigaction
253 #:sigaction
254 #:handler
255 ;; Sigaction()
256 #:sig-ign
257 #:sig-dfl
258 #:sa-nocldstop
259 #:sa-nocldwait
260 #:sa-nodefer
261 #:sa-onstack
262 #:sa-resethand
263 #:sa-restart
264 #:sa-siginfo)
265 (:export ;; sys/mman.h
266 ;; Mmap()
267 #:prot-none
268 #:prot-read
269 #:prot-write
270 #:prot-exec
271 #:map-shared
272 #:map-private
273 #:map-fixed
274 #:map-failed)
275 (:export ;; sys/select.h
276 ;; fd_set
277 #:fd-set
278 #:fd-setsize
279 ;; struct timeval
280 #:timeval
281 #:sec #:usec)
282 (:export ;; sys/poll.h
283 ;; struct pollfd
284 #:pollfd
285 #:fd #:events #:revents
286 ;; Poll()
287 #:pollin
288 #:pollrdnorm
289 #:pollrdband
290 #:pollpri
291 #:pollout
292 #:pollwrnorm
293 #:pollwrband
294 #:pollerr
295 #:pollrdhup
296 #:pollhup
297 #:pollnval)
298 (:export ;; dirent.h
299 ;; struct dirent
300 #:dirent
301 #:fileno #:type #:name
302 ;; Readdir()
303 #:dt-unknown
304 #:dt-fifo
305 #:dt-chr
306 #:dt-dir
307 #:dt-blk
308 #:dt-reg
309 #:dt-lnk
310 #:dt-sock
311 #:dt-wht)
312 (:export ;; sys/resource.h
313 ;; struct rlimit
314 #:rlimit
315 #:cur #:max
316 ;; struct rusage
317 #:rusage
318 #:utime #:stime #:maxrss #:ixrss #:idrss #:isrss
319 #:minflt #:majflt #:nswap #:inblock #:outblock
320 #:msgsnd #:msgrcv #:nsignals #:nvcsw #:nivcsw
321 ;; Getrlimit()
322 #:prio-process
323 #:prio-pgrp
324 #:prio-user
325 #:rlim-infinity
326 #:rusage-self
327 #:rusage-children
328 #:rlimit-as
329 #:rlimit-core
330 #:rlimit-cpu
331 #:rlimit-data
332 #:rlimit-fsize
333 #:rlimit-memlock
334 #:rlimit-nofile
335 #:rlimit-nproc
336 #:rlimit-rss
337 #:rlimit-stack
338 #+linux #:rlim-saved-max
339 #+linux #:rlim-saved-cur
340 #+linux #:rlimit-locks
341 #+linux #:rlimit-msgqueue
342 #+linux #:rlimit-nlimits
343 #+linux #:rlimit-nice
344 #+linux #:rlimit-rtprio
345 #+linux #:rlimit-sigpending
346 #+bsd #:rlimit-sbsize)
347 (:export ;; sys/utsname.h
348 ;; struct utsname
349 #:utsname
350 #:sysname #:nodename #:release #:version #:machine)
351 (:export ;; pwd.h
352 ;; struct passwd
353 #:passwd
354 #:name #:passwd #:uid #:gid #:gecos #:dir #:shell)
355 (:export ;; grp.h
356 ;; struct group
357 #:group
358 #:name #:passwd #:gid #:mem)
359 #+linux
360 (:export ;; sys/epoll.h
361 ;; union epoll_data_t
362 #:epoll-data
363 #:ptr #:fd #:u32 #:u64
364 ;; struct epoll_event
365 #:epoll-event
366 #:events #:data
367 ;; Epoll_ctl()
368 #:epoll-ctl-add
369 #:epoll-ctl-del
370 #:epoll-ctl-mod
371 #:epollin
372 #:epollrdnorm
373 #:epollrdband
374 #:epollpri
375 #:epollout
376 #:epollwrnorm
377 #:epollwrband
378 #:epollerr
379 #:epollhup
380 #:epollmsg
381 #:epolloneshot
382 #:epollet)
383 #+bsd
384 (:export ;; sys/event.h
385 ;; struct kevent
386 #:kevent
387 #:ident #:filter #:flags #:fflags #:data #:udata
388 ;; Kevent()
389 #+bsd #:ev-add
390 #+bsd #:ev-enable
391 #+bsd #:ev-disable
392 #+bsd #:ev-delete
393 #+bsd #:ev-oneshot
394 #+bsd #:ev-clear
395 #+bsd #:ev-eof
396 #+bsd #:ev-error
397 #+bsd #:evfilt-read
398 #+bsd #:evfilt-write
399 #+bsd #:evfilt-aio
400 #+bsd #:evfilt-vnode
401 #+bsd #:evfilt-proc
402 #+bsd #:evfilt-signal
403 #+bsd #:evfilt-timer
404 #-darwin #:evfilt-netdev
405 #+bsd #:note-delete
406 #+bsd #:note-write
407 #+bsd #:note-extend
408 #+bsd #:note-attrib
409 #+bsd #:note-link
410 #+bsd #:note-rename
411 #+bsd #:note-revoke
412 #+bsd #:note-exit
413 #+bsd #:note-fork
414 #+bsd #:note-exec
415 #+bsd #:note-track
416 #+bsd #:note-trackerr
417 #-darwin #:note-linkup
418 #-darwin #:note-linkdown
419 #-darwin #:note-linkinv)
421 (:export ;; CFFI additions
422 #:sizeof)
424 ;;;----------
425 ;;; Syscalls
426 ;;;----------
427 (:export ;; Errno-related functions
428 #:errno
429 #:strerror)
430 (:export ;; Memory manipulation functions
431 #:memset
432 #:bzero
433 #:memcpy
434 #:memmove)
435 (:export ;; Files
436 #:open
437 #:creat
438 #:pipe
439 #:mkfifo
440 #:umask
441 #:lseek
442 #:access
443 #:truncate
444 #:ftruncate
445 #:rename
446 #:link
447 #:symlink
448 #:readlink
449 #:realpath
450 #:unlink
451 #:chown
452 #:fchown
453 #:lchown
454 #:chmod
455 #:fchmod)
456 (:export ;; I/O
457 #:read
458 #:write
459 #:readv
460 #:writev
461 #:pread
462 #:pwrite)
463 (:export ;; Stat
464 #:stat
465 #:fstat
466 #:lstat
467 #:sync
468 #:fsync
469 #:mkstemp)
470 (:export ;; Directories
471 #:mkdir
472 #:rmdir
473 #:chdir
474 #:fchdir
475 #:getcwd
476 #:mkdtemp)
477 (:export ;; File descriptors
478 #:close
479 #:dup
480 #:dup2
481 #:fcntl
482 #:ioctl
483 #:fd-cloexec-p
484 #:fd-nonblock-p
485 #:fd-open-p)
486 (:export ;; TTYs
487 #:posix-openpt
488 #:grantpt
489 #:unlockpt
490 #:ptsname)
491 (:export ;; I/O Polling
492 #:select
493 #:copy-fd-set
494 #:fd-clr
495 #:fd-isset
496 #:fd-set
497 #:fd-zero
498 #:poll
499 #+linux #:epoll-create
500 #+linux #:epoll-ctl
501 #+linux #:epoll-wait
502 #+bsd #:kqueue
503 #+bsd #:kevent
504 #+bsd #:ev-set)
505 (:export ;; Socket message readers
506 #:cmsg.firsthdr
507 #:cmsg.nxthdr
508 #:cmsg.space
509 #:cmsg.len
510 #:cmsg.data)
511 (:export ;; Directory walking
512 #:opendir
513 #:closedir
514 #:readdir
515 #:rewinddir
516 #:seekdir
517 #:telldir)
518 (:export ;; Memory mapping
519 #:mmap
520 #:munmap)
521 (:export ;; Process creation and info
522 #:waitpid
523 #:getpid
524 #:getppid
525 #+linux #:gettid
526 #:getuid
527 #:setuid
528 #:geteuid
529 #:seteuid
530 #:getgid
531 #:setgid
532 #:getegid
533 #:setegid
534 #:setreuid
535 #:setregid
536 #:getpgid
537 #:setpgid
538 #:getpgrp
539 #:setpgrp
540 #:setsid
541 #:getrlimit
542 #:setrlimit
543 #:getrusage
544 #:getpriority
545 #:setpriority
546 #:nice
547 #:exit)
548 (:export ;; Signals
549 #:kill
550 #:sigaction
551 #:wifexited
552 #:wexitstatus
553 #:wifsignaled
554 #:wtermsig
555 #:wcoredump
556 #:wifstopped
557 #:wstopsig
558 #:wifcontinued)
559 (:export ;; Time
560 #:usleep
561 #:clock-getres
562 #:clock-gettime
563 #:clock-settime
564 #:get-monotonic-time)
565 (:export ;; Environment
566 #:getenv
567 #:setenv
568 #:unsetenv
569 #:clearenv)
570 (:export ;; Hostname info
571 #:gethostname
572 #:getdonainname
573 #:uname)
574 (:export ;; User info
575 #:getpwuid
576 #:getpwnam)
577 (:export ;; Group info
578 #:getgrgid
579 #:getgrnam))