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