aboutsummaryrefslogtreecommitdiffhomepage
path: root/absl/time
diff options
context:
space:
mode:
Diffstat (limited to 'absl/time')
-rw-r--r--absl/time/clock_benchmark.cc2
-rw-r--r--absl/time/duration.cc4
-rw-r--r--absl/time/duration_test.cc4
-rw-r--r--absl/time/internal/cctz/src/time_zone_format.cc10
-rw-r--r--absl/time/time.cc4
-rw-r--r--absl/time/time.h9
-rw-r--r--absl/time/time_test.cc4
7 files changed, 36 insertions, 1 deletions
diff --git a/absl/time/clock_benchmark.cc b/absl/time/clock_benchmark.cc
index a69fe00..c5c795e 100644
--- a/absl/time/clock_benchmark.cc
+++ b/absl/time/clock_benchmark.cc
@@ -15,6 +15,8 @@
#if !defined(_WIN32)
#include <sys/time.h>
+#else
+#include <winsock2.h>
#endif // _WIN32
#include <cstdio>
diff --git a/absl/time/duration.cc b/absl/time/duration.cc
index 67791fe..a3ac61a 100644
--- a/absl/time/duration.cc
+++ b/absl/time/duration.cc
@@ -49,6 +49,10 @@
//
// Arithmetic overflows/underflows to +/- infinity and saturates.
+#if defined(_MSC_VER)
+#include <winsock2.h> // for timeval
+#endif
+
#include <algorithm>
#include <cassert>
#include <cctype>
diff --git a/absl/time/duration_test.cc b/absl/time/duration_test.cc
index e3cede6..5dce9ac 100644
--- a/absl/time/duration_test.cc
+++ b/absl/time/duration_test.cc
@@ -12,6 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+#if defined(_MSC_VER)
+#include <winsock2.h> // for timeval
+#endif
+
#include <chrono> // NOLINT(build/c++11)
#include <cmath>
#include <cstdint>
diff --git a/absl/time/internal/cctz/src/time_zone_format.cc b/absl/time/internal/cctz/src/time_zone_format.cc
index 2585098..aa88987 100644
--- a/absl/time/internal/cctz/src/time_zone_format.cc
+++ b/absl/time/internal/cctz/src/time_zone_format.cc
@@ -18,8 +18,18 @@
# endif
#endif
+#if defined(HAS_STRPTIME) && HAS_STRPTIME
+# if !defined(_XOPEN_SOURCE)
+# define _XOPEN_SOURCE // Definedness suffices for strptime.
+# endif
+#endif
+
#include "absl/time/internal/cctz/include/cctz/time_zone.h"
+// Include time.h directly since, by C++ standards, ctime doesn't have to
+// declare strptime.
+#include <time.h>
+
#include <cctype>
#include <chrono>
#include <cstddef>
diff --git a/absl/time/time.cc b/absl/time/time.cc
index 977a951..338c452 100644
--- a/absl/time/time.cc
+++ b/absl/time/time.cc
@@ -33,6 +33,10 @@
#include "absl/time/time.h"
+#if defined(_MSC_VER)
+#include <winsock2.h> // for timeval
+#endif
+
#include <cstring>
#include <ctime>
#include <limits>
diff --git a/absl/time/time.h b/absl/time/time.h
index 594396c..0534780 100644
--- a/absl/time/time.h
+++ b/absl/time/time.h
@@ -65,7 +65,14 @@
#if !defined(_MSC_VER)
#include <sys/time.h>
#else
-#include <winsock2.h>
+// We don't include `winsock2.h` because it drags in `windows.h` and friends,
+// and they define conflicting macros like OPAQUE, ERROR, and more. This has the
+// potential to break Abseil users.
+//
+// Instead we only forward declare `timeval` and require Windows users include
+// `winsock2.h` themselves. This is both inconsistent and troublesome, but so is
+// including 'windows.h' so we are picking the lesser of two evils here.
+struct timeval;
#endif
#include <chrono> // NOLINT(build/c++11)
#include <cmath>
diff --git a/absl/time/time_test.cc b/absl/time/time_test.cc
index 4d791f4..e2b2f80 100644
--- a/absl/time/time_test.cc
+++ b/absl/time/time_test.cc
@@ -14,6 +14,10 @@
#include "absl/time/time.h"
+#if defined(_MSC_VER)
+#include <winsock2.h> // for timeval
+#endif
+
#include <chrono> // NOLINT(build/c++11)
#include <cstring>
#include <ctime>