kernel_wrap.h revision bb1529ce867d8845a77ec7cdf3e3003ef1771a40
1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file.
4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef LIBRARIES_NACL_IO_KERNEL_WRAP_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define LIBRARIES_NACL_IO_KERNEL_WRAP_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/types.h>
9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include <stdint.h>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h>
11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "nacl_io/ossocket.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "nacl_io/ostypes.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "nacl_io/osutime.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "sdk_util/macros.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__GLIBC__)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/cdefs.h>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NOTHROW __THROW
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NOTHROW
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int chmod_mode_t;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int getcwd_size_t;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int read_ssize_t;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int write_ssize_t;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NAME(x) _##x
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef mode_t chmod_mode_t;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef size_t getcwd_size_t;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ssize_t read_ssize_t;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ssize_t write_ssize_t;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NAME(x) x
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EXTERN_C_BEGIN
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void kernel_wrap_init();
4158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochvoid kernel_wrap_uninit();
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(access)(const char* path, int amode) NOTHROW;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(chdir)(const char* path) NOTHROW;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(chmod)(const char* path, chmod_mode_t mode) NOTHROW;
46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochint chown(const char* path, uid_t owner, gid_t group) NOTHROW;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(close)(int fd);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(dup)(int oldfd) NOTHROW;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int NAME(dup2)(int oldfd, int newfd) NOTHROW;
50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochint fchown(int fd, uid_t owner, gid_t group) NOTHROW;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _fstat32(int fd, struct _stat32* buf);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _fstat64(int fd, struct _stat64* buf);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _fstat32i64(int fd, struct _stat32i64* buf);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _fstat64i32(int fd, struct _stat64i32* buf);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct stat;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int fstat(int fd, struct stat* buf) NOTHROW;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int fsync(int fd);
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int ftruncate(int fd, off_t length) NOTHROW;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)char* NAME(getcwd)(char* buf, getcwd_size_t size) NOTHROW;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)char* getwd(char* buf) NOTHROW;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int getdents(int fd, void* buf, unsigned int count) NOTHROW;
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochint ioctl(int d, int request, char* argp) NOTHROW;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(isatty)(int fd) NOTHROW;
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochint lchown(const char* path, uid_t owner, gid_t group) NOTHROW;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int link(const char* oldpath, const char* newpath) NOTHROW;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)off_t NAME(lseek)(int fd, off_t offset, int whence) NOTHROW;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _mkdir(const char* path);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int mkdir(const char* path, mode_t mode) NOTHROW;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void* mmap(void* addr, size_t length, int prot, int flags, int fd,
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)           off_t offset) NOTHROW;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int mount(const char* source, const char* target, const char* filesystemtype,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          unsigned long mountflags, const void* data) NOTHROW;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int munmap(void* addr, size_t length) NOTHROW;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(open)(const char* path, int oflag, ...);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)read_ssize_t NAME(read)(int fd, void* buf, size_t nbyte);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int remove(const char* path) NOTHROW;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(rmdir)(const char* path) NOTHROW;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32)
85558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochint setenv(const char* name, const char* value, int overwrite);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _stat32(const char* path, struct _stat32* buf);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _stat64(const char* path, struct _stat64* buf);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _stat32i64(const char* path, struct _stat32i64* buf);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int _stat64i32(const char* path, struct _stat64i32* buf);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int stat(const char* path, struct stat* buf) NOTHROW;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int symlink(const char* oldpath, const char* newpath) NOTHROW;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int umount(const char* path) NOTHROW;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int NAME(unlink)(const char* path) NOTHROW;
96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)uint64_t usec_since_epoch();
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochint utime(const char* filename, const struct utimbuf* times);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)read_ssize_t NAME(write)(int fd, const void* buf, size_t nbyte);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#ifdef PROVIDES_SOCKET_API
101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Socket Functions
102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int accept(int fd, struct sockaddr* addr, socklen_t* len);
103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int bind(int fd, const struct sockaddr* addr, socklen_t len);
104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int connect(int fd, const struct sockaddr* addr, socklen_t len);
105bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochstruct hostent* gethostbyname(const char* name);
106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int getpeername(int fd, struct sockaddr* addr, socklen_t* len);
107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int getsockname(int fd, struct sockaddr* addr, socklen_t* len);
108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int getsockopt(int fd, int lvl, int optname, void* optval, socklen_t* len);
109bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid herror(const char *s);
110bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochconst char *hstrerror(int err);
111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int listen(int fd, int backlog);
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ssize_t recv(int fd, void* buf, size_t len, int flags);
113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ssize_t recvfrom(int fd, void* buf, size_t len, int flags,
114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                 struct sockaddr* addr, socklen_t* addrlen);
115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ssize_t recvmsg(int fd, struct msghdr* msg, int flags);
116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ssize_t send(int fd, const void* buf, size_t len, int flags);
117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ssize_t sendto(int fd, const void* buf, size_t len, int flags,
118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)               const struct sockaddr* addr, socklen_t addrlen);
119a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ssize_t sendmsg(int fd, const struct msghdr* msg, int flags);
120a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int setsockopt(int fd, int lvl, int optname, const void* optval,
121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)               socklen_t len);
122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int shutdown(int fd, int how);
123a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int socket(int domain, int type, int protocol);
124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int socketpair(int domain, int type, int protocl, int* sv);
125bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif  // PROVIDES_SOCKET_API
126ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EXTERN_C_END
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // LIBRARIES_NACL_IO_KERNEL_WRAP_H_
130