Rename GET-ERRNO/SET-ERRNO to %SYS-ERRNO/(SETF %SYS-ERRNO).
[iolib/alendvai.git] / syscalls / ffi-wrappers-unix.lisp
blobaa6cbf759905d07b1a4bde588d0d7d2ed98ba2c1
1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; indent-tabs-mode: nil -*-
2 ;;;
3 ;;; --- FFI wrappers.
4 ;;;
6 (in-package :iolib.syscalls)
8 (define "_XOPEN_SOURCE" 600)
9 (c "#if defined(__linux__)")
10 (define "_LARGEFILE_SOURCE")
11 (define "_LARGEFILE64_SOURCE")
12 (define "_FILE_OFFSET_BITS" 64)
13 (c "#endif")
15 (include "string.h" "errno.h" "sys/types.h" "sys/stat.h"
16 "unistd.h" "sys/mman.h")
19 ;;;-----------------------------------------------------------------------------
20 ;;; Large-file support
21 ;;;-----------------------------------------------------------------------------
23 ;;; FIXME: this is only necessary on Linux right?
25 (defwrapper ("lseek" %sys-lseek)
26 ("off_t" (return-wrapper off-t :error-generator signal-posix-error))
27 (fildes :int)
28 (offset off-t)
29 (whence :int))
31 (defwrapper ("truncate" %sys-truncate)
32 ("int" (return-wrapper :int :error-generator signal-posix-error/restart))
33 (path ("const char*" filename-designator))
34 (length off-t))
36 (defwrapper ("ftruncate" %sys-ftruncate)
37 ("int" (return-wrapper :int :error-generator signal-posix-error/restart))
38 (fd :int)
39 (length off-t))
41 (defwrapper ("mmap" %sys-mmap)
42 ("void*" (return-wrapper :pointer :error-generator signal-posix-error))
43 (start :pointer)
44 (length size-t)
45 (prot :int)
46 (flags :int)
47 (fd :int)
48 (offset off-t))
50 (defwrapper ("stat" %%sys-stat)
51 ("int" (return-wrapper :int :error-generator signal-posix-error))
52 (file-name ("const char*" filename-designator))
53 (buf ("struct stat*" :pointer)))
55 (defwrapper ("fstat" %%sys-fstat)
56 ("int" (return-wrapper :int :error-generator signal-posix-error))
57 (filedes :int)
58 (buf ("struct stat*" :pointer)))
60 (defwrapper ("lstat" %%sys-lstat)
61 ("int" (return-wrapper :int :error-generator signal-posix-error))
62 (file-name ("const char*" filename-designator))
63 (buf ("struct stat*" :pointer)))
65 (defwrapper ("pread" %sys-pread)
66 ("ssize_t" (return-wrapper ssize-t :error-generator signal-posix-error/restart))
67 (fd :int)
68 (buf :pointer)
69 (count size-t)
70 (offset off-t))
72 (defwrapper ("pwrite" %sys-pwrite)
73 ("ssize_t" (return-wrapper ssize-t :error-generator signal-posix-error/restart))
74 (fd :int)
75 (buf :pointer)
76 (count size-t)
77 (offset off-t))
80 ;;;-----------------------------------------------------------------------------
81 ;;; ERRNO-related functions
82 ;;;-----------------------------------------------------------------------------
84 (defwrapper* ("iolib_get_errno" %sys-errno) :int
86 "return errno;")
88 (defwrapper* ("iolib_set_errno" %%sys-set-errno) :int
89 ((value :int))
90 "errno = value;"
91 "return errno;")
93 (defwrapper ("strerror_r" %sys-strerror-r)
94 ("int" (return-wrapper :int :error-generator signal-posix-error))
95 (errnum :int)
96 (buf :string)
97 (buflen size-t))