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