1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// The Chromium build system defines __linux__ even for native client builds, 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// so guard against __native_client__ being defined as well. 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(WIN32) || (defined(__linux__) && !defined(__native_client__)) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <errno.h> 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "nacl_io/kernel_wrap.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "nacl_io/kernel_wrap_real.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// "real" functions, i.e. the unwrapped original functions. For Windows/Linux 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// host builds we don't wrap, so the real functions aren't accessible. In most 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// cases, we just fail. 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int _real_close(int fd) { 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)int _real_fstat(int fd, struct stat* buf) { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return 0; 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)int _real_getdents(int fd, void* nacl_buf, size_t nacl_count, size_t* nread) { 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int _real_lseek(int fd, off_t offset, int whence, off_t* new_offset) { 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int _real_mkdir(const char* pathname, mode_t mode) { 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)int _real_mmap(void** addr, 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) size_t length, 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int prot, 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int flags, 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int fd, 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) off_t offset) { 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int _real_munmap(void* addr, size_t length) { 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint _real_open(const char* pathname, int oflag, mode_t mode, int* newfd) { 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int _real_open_resource(const char* file, int* fd) { 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)int _real_read(int fd, void* buf, size_t count, size_t* nread) { 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *nread = count; 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return 0; 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int _real_rmdir(const char* pathname) { 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ENOSYS; 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)int _real_write(int fd, const void* buf, size_t count, size_t* nwrote) { 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int rtn = write(fd, buf, count); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (rtn < 0) 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return -1; 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *nwrote = rtn; 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return 0; 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid _real_exit(int status) { 780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch exit(status); 790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)int _real_getcwd(char* pathname, size_t len) { 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return ENOSYS; 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// The Chromium build system defines __linux__ even for native client builds, 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// so guard against __native_client__ being defined as well. 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(__linux__) && !defined(__native_client__) 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void kernel_wrap_init() { 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void kernel_wrap_uninit() { 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 98