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 | #include <sys/time.h> |
21 | #else |
22 | // Someone decided this was a good place to define timeval..... |
23 | #include <folly/portability/Windows.h> |
24 | struct timezone { |
25 | int tz_minuteswest; |
26 | int tz_dsttime; |
27 | }; |
28 | |
29 | extern "C" { |
30 | // Note that this needs to explicitly be `struct timezone` due to the fact that |
31 | // the python 3 headers `#define timezone _timezone` on Windows. `_timezone` is |
32 | // a global field that contains information on the current timezone. By |
33 | // explicitly specifying that this is a `struct`, we ensure that it's treated as |
34 | // a type, regardless of what name that type actually is :) |
35 | // Note that this will break if `gettimeofday` ever becomes declared as anything |
36 | // other than `extern "C"`, as the mangled name would be dependent on whether |
37 | // python had been included before this header. |
38 | int gettimeofday(timeval* tv, struct timezone*); |
39 | void timeradd(timeval* a, timeval* b, timeval* res); |
40 | void timersub(timeval* a, timeval* b, timeval* res); |
41 | } |
42 | #endif |
43 | |