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 | #include <cstdlib> |
20 | |
21 | #if defined(__APPLE__) |
22 | #if __has_include(<crt_externs.h>) |
23 | #include <crt_externs.h> // @manual |
24 | #endif |
25 | #endif |
26 | |
27 | extern "C" { |
28 | #ifdef _WIN32 |
29 | // These are technically supposed to be defined linux/limits.h and |
30 | // sys/param.h respectively, but Windows defines _MAX_PATH in stdlib.h, |
31 | // so, instead of creating two headers for a single define each, we put |
32 | // them here, where they are likely to already have been included in the |
33 | // code that needs them. |
34 | #define PATH_MAX _MAX_PATH |
35 | #define MAXPATHLEN _MAX_PATH |
36 | |
37 | char* mktemp(char* tn); |
38 | char* mkdtemp(char* tn); |
39 | int mkstemp(char* tn); |
40 | char* realpath(const char* path, char* resolved_path); |
41 | int setenv(const char* name, const char* value, int overwrite); |
42 | int unsetenv(const char* name); |
43 | #elif defined(__APPLE__) |
44 | // environ doesn't work well with dylibs, so use _NSGetEnviron instead. |
45 | #if !__has_include(<crt_externs.h>) |
46 | char*** _NSGetEnviron(void); |
47 | #endif |
48 | #define environ (*_NSGetEnviron()) |
49 | #endif |
50 | |
51 | #if !__linux__ && !FOLLY_MOBILE |
52 | int clearenv(); |
53 | #endif |
54 | } |
55 | |