1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef LIBRARIES_NACL_IO_KERNEL_WRAP_H_
6 #define LIBRARIES_NACL_IO_KERNEL_WRAP_H_
12 #include <sys/fcntl.h>
13 #include <sys/ioctl.h>
14 #include <sys/types.h>
16 #include "nacl_io/ossocket.h"
17 #include "nacl_io/ostypes.h"
18 #include "nacl_io/osutime.h"
19 #include "sdk_util/macros.h"
21 #if defined(__GLIBC__)
22 #include <sys/cdefs.h>
23 #define NOTHROW __THROW
28 // Most kernel intercept functions (ki_*) return -1 and set the global errno.
29 // However, the IRT wrappers are expected to return errno on failure. These
30 // macros are used in the wrappers to check that the ki_ function actually
31 // set errno and to its value.
32 #define RTN_ERRNO_IF(cond) \
38 #define ERRNO_RTN(cond) \
39 RTN_ERRNO_IF(cond < 0); \
43 typedef int chmod_mode_t
;
44 typedef int getcwd_size_t
;
45 typedef int read_ssize_t
;
46 typedef int write_ssize_t
;
49 typedef mode_t chmod_mode_t
;
50 typedef size_t getcwd_size_t
;
51 typedef ssize_t read_ssize_t
;
52 typedef ssize_t write_ssize_t
;
58 void kernel_wrap_init(void);
59 void kernel_wrap_uninit(void);
61 int NAME(access
)(const char* path
, int amode
) NOTHROW
;
62 int NAME(chdir
)(const char* path
) NOTHROW
;
63 int NAME(chmod
)(const char* path
, chmod_mode_t mode
) NOTHROW
;
64 int chown(const char* path
, uid_t owner
, gid_t group
) NOTHROW
;
65 int NAME(close
)(int fd
);
66 int NAME(dup
)(int oldfd
) NOTHROW
;
67 int NAME(dup2
)(int oldfd
, int newfd
) NOTHROW
;
68 int fchown(int fd
, uid_t owner
, gid_t group
) NOTHROW
;
70 int _fstat32(int fd
, struct _stat32
* buf
);
71 int _fstat64(int fd
, struct _stat64
* buf
);
72 int _fstat32i64(int fd
, struct _stat32i64
* buf
);
73 int _fstat64i32(int fd
, struct _stat64i32
* buf
);
74 #elif !defined(__linux__)
76 extern int fstat(int fd
, struct stat
* buf
) NOTHROW
;
79 int ftruncate(int fd
, off_t length
) NOTHROW
;
80 char* NAME(getcwd
)(char* buf
, getcwd_size_t size
) NOTHROW
;
81 char* getwd(char* buf
) NOTHROW
;
82 #if !defined(__BIONIC__)
83 int getdents(int fd
, void* buf
, unsigned int count
) NOTHROW
;
86 int getdents(unsigned int fd
, struct dirent
* buf
, unsigned int count
) NOTHROW
;
88 int NAME(isatty
)(int fd
) NOTHROW
;
89 int lchown(const char* path
, uid_t owner
, gid_t group
) NOTHROW
;
90 int link(const char* oldpath
, const char* newpath
) NOTHROW
;
91 off_t
NAME(lseek
)(int fd
, off_t offset
, int whence
) NOTHROW
;
93 int _mkdir(const char* path
);
95 int mkdir(const char* path
, mode_t mode
) NOTHROW
;
97 void* mmap(void* addr
, size_t length
, int prot
, int flags
, int fd
,
98 off_t offset
) NOTHROW
;
99 int mount(const char* source
, const char* target
, const char* filesystemtype
,
100 unsigned long mountflags
, const void* data
) NOTHROW
;
101 int munmap(void* addr
, size_t length
) NOTHROW
;
102 int NAME(open
)(const char* path
, int oflag
, ...);
103 read_ssize_t
NAME(read
)(int fd
, void* buf
, size_t nbyte
);
104 int remove(const char* path
) NOTHROW
;
105 int NAME(rmdir
)(const char* path
) NOTHROW
;
106 sighandler_t
sigset(int sig
, sighandler_t disp
);
108 int setenv(const char* name
, const char* value
, int overwrite
);
109 int _stat32(const char* path
, struct _stat32
* buf
);
110 int _stat64(const char* path
, struct _stat64
* buf
);
111 int _stat32i64(const char* path
, struct _stat32i64
* buf
);
112 int _stat64i32(const char* path
, struct _stat64i32
* buf
);
113 #elif !defined(__linux__)
114 extern int stat(const char* path
, struct stat
* buf
) NOTHROW
;
116 int symlink(const char* oldpath
, const char* newpath
) NOTHROW
;
117 int umount(const char* path
) NOTHROW
;
118 int NAME(unlink
)(const char* path
) NOTHROW
;
119 int utime(const char* filename
, const struct utimbuf
* times
);
120 read_ssize_t
NAME(write
)(int fd
, const void* buf
, size_t nbyte
);
122 #ifdef PROVIDES_SOCKET_API
124 int accept(int fd
, struct sockaddr
* addr
, socklen_t
* len
);
125 int bind(int fd
, const struct sockaddr
* addr
, socklen_t len
);
126 int connect(int fd
, const struct sockaddr
* addr
, socklen_t len
);
127 struct hostent
* gethostbyname(const char* name
);
128 int getpeername(int fd
, struct sockaddr
* addr
, socklen_t
* len
);
129 int getsockname(int fd
, struct sockaddr
* addr
, socklen_t
* len
);
130 int getsockopt(int fd
, int lvl
, int optname
, void* optval
, socklen_t
* len
);
131 int listen(int fd
, int backlog
);
132 ssize_t
recv(int fd
, void* buf
, size_t len
, int flags
);
133 ssize_t
recvfrom(int fd
,
137 struct sockaddr
* addr
,
139 ssize_t
recvmsg(int fd
, struct msghdr
* msg
, int flags
);
140 ssize_t
send(int fd
, const void* buf
, size_t len
, int flags
);
141 ssize_t
sendto(int fd
,
145 const struct sockaddr
* addr
,
147 ssize_t
sendmsg(int fd
, const struct msghdr
* msg
, int flags
);
148 int setsockopt(int fd
, int lvl
, int optname
, const void* optval
, socklen_t len
);
149 int shutdown(int fd
, int how
);
150 int socket(int domain
, int type
, int protocol
);
151 int socketpair(int domain
, int type
, int protocl
, int* sv
);
152 #endif // PROVIDES_SOCKET_API
156 #endif // LIBRARIES_NACL_IO_KERNEL_WRAP_H_