1// Copyright (c) 2013 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.
4
5// The Chromium build system defines __linux__ even for native client builds,
6// so guard against __native_client__ being defined as well.
7#if defined(WIN32) || (defined(__linux__) && !defined(__native_client__))
8
9#include <errno.h>
10
11#include "nacl_io/kernel_wrap.h"
12#include "nacl_io/kernel_wrap_real.h"
13
14// "real" functions, i.e. the unwrapped original functions. For Windows/Linux
15// host builds we don't wrap, so the real functions aren't accessible. In most
16// cases, we just fail.
17
18int _real_close(int fd) {
19  return ENOSYS;
20}
21
22int _real_fstat(int fd, struct stat* buf) {
23  return 0;
24}
25
26int _real_getdents(int fd, void* nacl_buf, size_t nacl_count, size_t* nread) {
27  return ENOSYS;
28}
29
30int _real_lseek(int fd, off_t offset, int whence, off_t* new_offset) {
31  return ENOSYS;
32}
33
34int _real_mkdir(const char* pathname, mode_t mode) {
35  return ENOSYS;
36}
37
38int _real_mmap(void** addr,
39               size_t length,
40               int prot,
41               int flags,
42               int fd,
43               off_t offset) {
44  return ENOSYS;
45}
46
47int _real_munmap(void* addr, size_t length) {
48  return ENOSYS;
49}
50
51int _real_open(const char* pathname, int oflag, mode_t mode, int* newfd) {
52  return ENOSYS;
53}
54
55int _real_open_resource(const char* file, int* fd) {
56  return ENOSYS;
57}
58
59int _real_read(int fd, void* buf, size_t count, size_t* nread) {
60  *nread = count;
61  return 0;
62}
63
64int _real_rmdir(const char* pathname) {
65  return ENOSYS;
66}
67
68int _real_write(int fd, const void* buf, size_t count, size_t* nwrote) {
69  int rtn = write(fd, buf, count);
70  if (rtn < 0)
71    return -1;
72
73  *nwrote = rtn;
74  return 0;
75}
76
77void _real_exit(int status) {
78  exit(status);
79}
80
81int _real_getcwd(char* pathname, size_t len) {
82  return ENOSYS;
83}
84
85#endif
86
87// The Chromium build system defines __linux__ even for native client builds,
88// so guard against __native_client__ being defined as well.
89#if defined(__linux__) && !defined(__native_client__)
90
91void kernel_wrap_init() {
92}
93
94void kernel_wrap_uninit() {
95}
96
97#endif
98