1 /*
2 * librdkafka - Apache Kafka C library
3 *
4 * Copyright (c) 2012-2019 Magnus Edenhill
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright notice,
11 * this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #pragma once
30
31 /**
32 * Porting
33 */
34
35 #ifdef _MSC_VER
36 /* Windows win32 native */
37
38 #define WIN32_MEAN_AND_LEAN
39 #include <Windows.h>
40
41 #define RD_NORETURN
42 #define RD_UNUSED
43
44 /* MSVC loves prefixing POSIX functions with underscore */
45 #define _COMPAT(FUNC) _ ## FUNC
46
47 #define STDIN_FILENO 0
48
49 typedef SSIZE_T ssize_t;
50
51 ssize_t getdelim (char **bufptr, size_t *n,
52 int delim, FILE *fp);
53
54
55 /**
56 * @brief gettimeofday() for win32
57 */
58 static RD_UNUSED
rd_gettimeofday(struct timeval * tv,struct timezone * tz)59 int rd_gettimeofday (struct timeval *tv, struct timezone *tz) {
60 SYSTEMTIME st;
61 FILETIME ft;
62 ULARGE_INTEGER d;
63
64 GetSystemTime(&st);
65 SystemTimeToFileTime(&st, &ft);
66 d.HighPart = ft.dwHighDateTime;
67 d.LowPart = ft.dwLowDateTime;
68 tv->tv_sec = (long)((d.QuadPart - 116444736000000000llu) / 10000000L);
69 tv->tv_usec = (long)(st.wMilliseconds * 1000);
70
71 return 0;
72 }
73
74
75 #else
76 /* POSIX */
77
78 #define RD_NORETURN __attribute__((noreturn))
79 #define RD_UNUSED __attribute__((unused))
80
81 #define _COMPAT(FUNC) FUNC
82
83 #define rd_gettimeofday(tv,tz) gettimeofday(tv,tz)
84 #endif
85
86
87 #ifndef MAX
88 #define MAX(A,B) ((A) > (B) ? (A) : (B))
89 #endif
90
91 #ifndef MIN
92 #define MIN(A,B) ((A) < (B) ? (A) : (B))
93 #endif
94