1/*
2 * Copyright 2016-present Facebook, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#ifndef _WIN32
20
21#include <unistd.h>
22
23#else
24
25#include <cstdint>
26
27#include <sys/locking.h> // @manual
28
29#include <folly/portability/SysTypes.h>
30
31// This is different from the normal headers because there are a few cases,
32// such as close(), where we need to override the definition of an existing
33// function. To avoid conflicts at link time, everything here is in a namespace
34// which is then used globally.
35
36#define _SC_PAGESIZE 1
37#define _SC_PAGE_SIZE _SC_PAGESIZE
38#define _SC_NPROCESSORS_ONLN 2
39#define _SC_NPROCESSORS_CONF 2
40
41// Windows doesn't define these, but these are the correct values
42// for Windows.
43#define STDIN_FILENO 0
44#define STDOUT_FILENO 1
45#define STDERR_FILENO 2
46
47// Windows is weird and doesn't actually defined these
48// for the parameters to access, so we have to do it ourselves -_-...
49#define F_OK 0
50#define X_OK F_OK
51#define W_OK 2
52#define R_OK 4
53#define RW_OK 6
54
55#define F_LOCK _LK_LOCK
56#define F_ULOCK _LK_UNLCK
57
58namespace folly {
59namespace portability {
60namespace unistd {
61int access(char const* fn, int am);
62int chdir(const char* path);
63int close(int fh);
64int dup(int fh);
65int dup2(int fhs, int fhd);
66int fsync(int fd);
67int ftruncate(int fd, off_t len);
68char* getcwd(char* buf, int sz);
69int getdtablesize();
70int getgid();
71pid_t getpid();
72pid_t getppid();
73int getuid();
74int isatty(int fh);
75int lockf(int fd, int cmd, off_t len);
76off_t lseek(int fh, off_t off, int orig);
77ssize_t read(int fh, void* buf, size_t mcc);
78int rmdir(const char* path);
79int pipe(int pth[2]);
80ssize_t pread(int fd, void* buf, size_t count, off_t offset);
81ssize_t pwrite(int fd, const void* buf, size_t count, off_t offset);
82ssize_t readlink(const char* path, char* buf, size_t buflen);
83void* sbrk(intptr_t i);
84unsigned int sleep(unsigned int seconds);
85long sysconf(int tp);
86int truncate(const char* path, off_t len);
87int usleep(unsigned int ms);
88ssize_t write(int fh, void const* buf, size_t count);
89} // namespace unistd
90} // namespace portability
91} // namespace folly
92
93/* using override */ using namespace folly::portability::unistd;
94
95#endif
96