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