From 526a70a6d75c4d4e0b4296375d2242d94eb8235f Mon Sep 17 00:00:00 2001 From: Arkshine Date: Tue, 29 Jul 2014 11:42:29 +0200 Subject: [PATCH] Geoip: Fix compilation #1 MSVC doesn't fully implement C99, ssize_t, stdbool.h, etc have to be provided manually. Most of fixes are casting type and unpacking structure. --- dlls/geoip/GeoIP2/inttypes.h | 305 ++++++++++++++++++++++ dlls/geoip/GeoIP2/maxminddb-compat-util.h | 6 +- dlls/geoip/GeoIP2/maxminddb.c | 126 ++++----- dlls/geoip/GeoIP2/maxminddb.h | 7 +- dlls/geoip/GeoIP2/stdbool.h | 46 ++++ 5 files changed, 417 insertions(+), 73 deletions(-) create mode 100644 dlls/geoip/GeoIP2/inttypes.h create mode 100644 dlls/geoip/GeoIP2/stdbool.h diff --git a/dlls/geoip/GeoIP2/inttypes.h b/dlls/geoip/GeoIP2/inttypes.h new file mode 100644 index 00000000..0e8af69c --- /dev/null +++ b/dlls/geoip/GeoIP2/inttypes.h @@ -0,0 +1,305 @@ +// ISO C9x compliant inttypes.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _MSC_VER // [ +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif // _MSC_VER ] + +#ifndef _MSC_INTTYPES_H_ // [ +#define _MSC_INTTYPES_H_ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include + +// 7.8 Format conversion of integer types + +typedef struct { + intmax_t quot; + intmax_t rem; +} imaxdiv_t; + +// 7.8.1 Macros for format specifiers + +#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 + +// The fprintf macros for signed integers are: +#define PRId8 "d" +#define PRIi8 "i" +#define PRIdLEAST8 "d" +#define PRIiLEAST8 "i" +#define PRIdFAST8 "d" +#define PRIiFAST8 "i" + +#define PRId16 "hd" +#define PRIi16 "hi" +#define PRIdLEAST16 "hd" +#define PRIiLEAST16 "hi" +#define PRIdFAST16 "hd" +#define PRIiFAST16 "hi" + +#define PRId32 "I32d" +#define PRIi32 "I32i" +#define PRIdLEAST32 "I32d" +#define PRIiLEAST32 "I32i" +#define PRIdFAST32 "I32d" +#define PRIiFAST32 "I32i" + +#define PRId64 "I64d" +#define PRIi64 "I64i" +#define PRIdLEAST64 "I64d" +#define PRIiLEAST64 "I64i" +#define PRIdFAST64 "I64d" +#define PRIiFAST64 "I64i" + +#define PRIdMAX "I64d" +#define PRIiMAX "I64i" + +#define PRIdPTR "Id" +#define PRIiPTR "Ii" + +// The fprintf macros for unsigned integers are: +#define PRIo8 "o" +#define PRIu8 "u" +#define PRIx8 "x" +#define PRIX8 "X" +#define PRIoLEAST8 "o" +#define PRIuLEAST8 "u" +#define PRIxLEAST8 "x" +#define PRIXLEAST8 "X" +#define PRIoFAST8 "o" +#define PRIuFAST8 "u" +#define PRIxFAST8 "x" +#define PRIXFAST8 "X" + +#define PRIo16 "ho" +#define PRIu16 "hu" +#define PRIx16 "hx" +#define PRIX16 "hX" +#define PRIoLEAST16 "ho" +#define PRIuLEAST16 "hu" +#define PRIxLEAST16 "hx" +#define PRIXLEAST16 "hX" +#define PRIoFAST16 "ho" +#define PRIuFAST16 "hu" +#define PRIxFAST16 "hx" +#define PRIXFAST16 "hX" + +#define PRIo32 "I32o" +#define PRIu32 "I32u" +#define PRIx32 "I32x" +#define PRIX32 "I32X" +#define PRIoLEAST32 "I32o" +#define PRIuLEAST32 "I32u" +#define PRIxLEAST32 "I32x" +#define PRIXLEAST32 "I32X" +#define PRIoFAST32 "I32o" +#define PRIuFAST32 "I32u" +#define PRIxFAST32 "I32x" +#define PRIXFAST32 "I32X" + +#define PRIo64 "I64o" +#define PRIu64 "I64u" +#define PRIx64 "I64x" +#define PRIX64 "I64X" +#define PRIoLEAST64 "I64o" +#define PRIuLEAST64 "I64u" +#define PRIxLEAST64 "I64x" +#define PRIXLEAST64 "I64X" +#define PRIoFAST64 "I64o" +#define PRIuFAST64 "I64u" +#define PRIxFAST64 "I64x" +#define PRIXFAST64 "I64X" + +#define PRIoMAX "I64o" +#define PRIuMAX "I64u" +#define PRIxMAX "I64x" +#define PRIXMAX "I64X" + +#define PRIoPTR "Io" +#define PRIuPTR "Iu" +#define PRIxPTR "Ix" +#define PRIXPTR "IX" + +// The fscanf macros for signed integers are: +#define SCNd8 "d" +#define SCNi8 "i" +#define SCNdLEAST8 "d" +#define SCNiLEAST8 "i" +#define SCNdFAST8 "d" +#define SCNiFAST8 "i" + +#define SCNd16 "hd" +#define SCNi16 "hi" +#define SCNdLEAST16 "hd" +#define SCNiLEAST16 "hi" +#define SCNdFAST16 "hd" +#define SCNiFAST16 "hi" + +#define SCNd32 "ld" +#define SCNi32 "li" +#define SCNdLEAST32 "ld" +#define SCNiLEAST32 "li" +#define SCNdFAST32 "ld" +#define SCNiFAST32 "li" + +#define SCNd64 "I64d" +#define SCNi64 "I64i" +#define SCNdLEAST64 "I64d" +#define SCNiLEAST64 "I64i" +#define SCNdFAST64 "I64d" +#define SCNiFAST64 "I64i" + +#define SCNdMAX "I64d" +#define SCNiMAX "I64i" + +#ifdef _WIN64 // [ +# define SCNdPTR "I64d" +# define SCNiPTR "I64i" +#else // _WIN64 ][ +# define SCNdPTR "ld" +# define SCNiPTR "li" +#endif // _WIN64 ] + +// The fscanf macros for unsigned integers are: +#define SCNo8 "o" +#define SCNu8 "u" +#define SCNx8 "x" +#define SCNX8 "X" +#define SCNoLEAST8 "o" +#define SCNuLEAST8 "u" +#define SCNxLEAST8 "x" +#define SCNXLEAST8 "X" +#define SCNoFAST8 "o" +#define SCNuFAST8 "u" +#define SCNxFAST8 "x" +#define SCNXFAST8 "X" + +#define SCNo16 "ho" +#define SCNu16 "hu" +#define SCNx16 "hx" +#define SCNX16 "hX" +#define SCNoLEAST16 "ho" +#define SCNuLEAST16 "hu" +#define SCNxLEAST16 "hx" +#define SCNXLEAST16 "hX" +#define SCNoFAST16 "ho" +#define SCNuFAST16 "hu" +#define SCNxFAST16 "hx" +#define SCNXFAST16 "hX" + +#define SCNo32 "lo" +#define SCNu32 "lu" +#define SCNx32 "lx" +#define SCNX32 "lX" +#define SCNoLEAST32 "lo" +#define SCNuLEAST32 "lu" +#define SCNxLEAST32 "lx" +#define SCNXLEAST32 "lX" +#define SCNoFAST32 "lo" +#define SCNuFAST32 "lu" +#define SCNxFAST32 "lx" +#define SCNXFAST32 "lX" + +#define SCNo64 "I64o" +#define SCNu64 "I64u" +#define SCNx64 "I64x" +#define SCNX64 "I64X" +#define SCNoLEAST64 "I64o" +#define SCNuLEAST64 "I64u" +#define SCNxLEAST64 "I64x" +#define SCNXLEAST64 "I64X" +#define SCNoFAST64 "I64o" +#define SCNuFAST64 "I64u" +#define SCNxFAST64 "I64x" +#define SCNXFAST64 "I64X" + +#define SCNoMAX "I64o" +#define SCNuMAX "I64u" +#define SCNxMAX "I64x" +#define SCNXMAX "I64X" + +#ifdef _WIN64 // [ +# define SCNoPTR "I64o" +# define SCNuPTR "I64u" +# define SCNxPTR "I64x" +# define SCNXPTR "I64X" +#else // _WIN64 ][ +# define SCNoPTR "lo" +# define SCNuPTR "lu" +# define SCNxPTR "lx" +# define SCNXPTR "lX" +#endif // _WIN64 ] + +#endif // __STDC_FORMAT_MACROS ] + +// 7.8.2 Functions for greatest-width integer types + +// 7.8.2.1 The imaxabs function +#define imaxabs _abs64 + +// 7.8.2.2 The imaxdiv function + +// This is modified version of div() function from Microsoft's div.c found +// in %MSVC.NET%\crt\src\div.c +#ifdef STATIC_IMAXDIV // [ +static +#else // STATIC_IMAXDIV ][ +_inline +#endif // STATIC_IMAXDIV ] +imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) +{ + imaxdiv_t result; + + result.quot = numer / denom; + result.rem = numer % denom; + + if (numer < 0 && result.rem > 0) { + // did division wrong; must fix up + ++result.quot; + result.rem -= denom; + } + + return result; +} + +// 7.8.2.3 The strtoimax and strtoumax functions +#define strtoimax _strtoi64 +#define strtoumax _strtoui64 + +// 7.8.2.4 The wcstoimax and wcstoumax functions +#define wcstoimax _wcstoi64 +#define wcstoumax _wcstoui64 + + +#endif // _MSC_INTTYPES_H_ ] diff --git a/dlls/geoip/GeoIP2/maxminddb-compat-util.h b/dlls/geoip/GeoIP2/maxminddb-compat-util.h index e3f0320f..e781c219 100644 --- a/dlls/geoip/GeoIP2/maxminddb-compat-util.h +++ b/dlls/geoip/GeoIP2/maxminddb-compat-util.h @@ -59,7 +59,7 @@ mmdb_memmem(const void *l, size_t l_len, const void *s, size_t s_len) /* special case where s_len == 1 */ if (s_len == 1) - return memchr(l, (int)*cs, l_len); + return (void *)memchr(l, (int)*cs, l_len); /* the last position where its possible to find "s" in "l" */ last = (char *)cl + l_len - s_len; @@ -145,7 +145,7 @@ mmdb_strdup(const char *str) char *copy; len = strlen(str) + 1; - if ((copy = malloc(len)) == NULL) + if ((copy = (char *)malloc(len)) == NULL) return (NULL); memcpy(copy, str, len); return (copy); @@ -158,7 +158,7 @@ mmdb_strndup(const char *str, size_t n) char *copy; len = mmdb_strnlen(str, n); - if ((copy = malloc(len + 1)) == NULL) + if ((copy = (char *)malloc(len + 1)) == NULL) return (NULL); memcpy(copy, str, len); copy[len] = '\0'; diff --git a/dlls/geoip/GeoIP2/maxminddb.c b/dlls/geoip/GeoIP2/maxminddb.c index d4ad1fef..47684d6c 100644 --- a/dlls/geoip/GeoIP2/maxminddb.c +++ b/dlls/geoip/GeoIP2/maxminddb.c @@ -4,11 +4,13 @@ #include "maxminddb.h" #include "maxminddb-compat-util.h" #include -#include #include #include #include +#define __STDC_FORMAT_MACROS /* Arkshine: Force to use C99 format macros */ +#include /* MSVC doesn't fully support C99, so we provide the file */ + #ifdef _WIN32 #include #include @@ -120,10 +122,10 @@ LOCAL const uint8_t *find_metadata(const uint8_t *file_content, ssize_t file_size, uint32_t *metadata_size); LOCAL int read_metadata(MMDB_s *mmdb); LOCAL MMDB_s make_fake_metadata_db(MMDB_s *mmdb); -LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, char *key); -LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, char *key); -LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, char *key); -LOCAL char *value_for_key_as_string(MMDB_entry_s *start, char *key); +LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, const char *key); +LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, const char *key); +LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, const char *key); +LOCAL char *value_for_key_as_string(MMDB_entry_s *start, const char *key); LOCAL int populate_languages_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, MMDB_entry_s *metadata_start); LOCAL int populate_description_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, @@ -152,8 +154,8 @@ LOCAL uint32_t get_ptr_from(uint8_t ctrl, uint8_t const *const ptr, int ptr_size); LOCAL int get_entry_data_list(MMDB_s *mmdb, uint32_t offset, MMDB_entry_data_list_s *const entry_data_list); -LOCAL float get_ieee754_float(const uint8_t *restrict p); -LOCAL double get_ieee754_double(const uint8_t *restrict p); +LOCAL float get_ieee754_float(const uint8_t *__restrict p); +LOCAL double get_ieee754_double(const uint8_t *__restrict p); LOCAL uint32_t get_uint32(const uint8_t *p); LOCAL uint32_t get_uint24(const uint8_t *p); LOCAL uint32_t get_uint16(const uint8_t *p); @@ -299,7 +301,7 @@ LOCAL const uint8_t *find_metadata(const uint8_t *file_content, uint8_t *search_area = (uint8_t *)(file_content + (file_size - max_size)); uint8_t *tmp = search_area; do { - tmp = mmdb_memmem(search_area, max_size, + tmp = (uint8_t *)mmdb_memmem(search_area, max_size, METADATA_MARKER, strlen(METADATA_MARKER)); if (NULL != tmp) { @@ -322,10 +324,9 @@ LOCAL int read_metadata(MMDB_s *mmdb) values. */ MMDB_s metadata_db = make_fake_metadata_db(mmdb); - MMDB_entry_s metadata_start = { - .mmdb = &metadata_db, - .offset = 0 - }; + MMDB_entry_s metadata_start; + metadata_start.mmdb = &metadata_db; + metadata_start.offset = 0; mmdb->metadata.node_count = value_for_key_as_uint32(&metadata_start, "node_count"); @@ -407,15 +408,14 @@ LOCAL int read_metadata(MMDB_s *mmdb) LOCAL MMDB_s make_fake_metadata_db(MMDB_s *mmdb) { - MMDB_s fake_metadata_db = { - .data_section = mmdb->metadata_section, - .data_section_size = mmdb->metadata_section_size - }; + MMDB_s fake_metadata_db; + fake_metadata_db.data_section = mmdb->metadata_section; + fake_metadata_db.data_section_size = mmdb->metadata_section_size; return fake_metadata_db; } -LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, char *key) +LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, const char *key) { MMDB_entry_data_s entry_data; const char *path[] = { key, NULL }; @@ -423,7 +423,7 @@ LOCAL uint16_t value_for_key_as_uint16(MMDB_entry_s *start, char *key) return entry_data.uint16; } -LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, char *key) +LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, const char *key) { MMDB_entry_data_s entry_data; const char *path[] = { key, NULL }; @@ -431,7 +431,7 @@ LOCAL uint32_t value_for_key_as_uint32(MMDB_entry_s *start, char *key) return entry_data.uint32; } -LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, char *key) +LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, const char *key) { MMDB_entry_data_s entry_data; const char *path[] = { key, NULL }; @@ -439,7 +439,7 @@ LOCAL uint64_t value_for_key_as_uint64(MMDB_entry_s *start, char *key) return entry_data.uint64; } -LOCAL char *value_for_key_as_string(MMDB_entry_s *start, char *key) +LOCAL char *value_for_key_as_string(MMDB_entry_s *start, const char *key) { MMDB_entry_data_s entry_data; const char *path[] = { key, NULL }; @@ -459,10 +459,9 @@ LOCAL int populate_languages_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, return MMDB_INVALID_METADATA_ERROR; } - MMDB_entry_s array_start = { - .mmdb = metadata_db, - .offset = entry_data.offset - }; + MMDB_entry_s array_start; + array_start.mmdb = metadata_db; + array_start.offset = entry_data.offset; MMDB_entry_data_list_s *member; MMDB_get_entry_data_list(&array_start, &member); @@ -471,7 +470,7 @@ LOCAL int populate_languages_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, uint32_t array_size = member->entry_data.data_size; mmdb->metadata.languages.count = 0; - mmdb->metadata.languages.names = malloc(array_size * sizeof(char *)); + mmdb->metadata.languages.names = (const char **)malloc(array_size * sizeof(char *)); if (NULL == mmdb->metadata.languages.names) { return MMDB_OUT_OF_MEMORY_ERROR; } @@ -511,10 +510,9 @@ LOCAL int populate_description_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, return MMDB_INVALID_METADATA_ERROR; } - MMDB_entry_s map_start = { - .mmdb = metadata_db, - .offset = entry_data.offset - }; + MMDB_entry_s map_start; + map_start.mmdb = metadata_db; + map_start.offset = entry_data.offset; MMDB_entry_data_list_s *member; MMDB_get_entry_data_list(&map_start, &member); @@ -524,14 +522,14 @@ LOCAL int populate_description_metadata(MMDB_s *mmdb, MMDB_s *metadata_db, uint32_t map_size = member->entry_data.data_size; mmdb->metadata.description.count = 0; mmdb->metadata.description.descriptions = - malloc(map_size * sizeof(MMDB_description_s *)); + (MMDB_description_s **)malloc(map_size * sizeof(MMDB_description_s *)); if (NULL == mmdb->metadata.description.descriptions) { return MMDB_OUT_OF_MEMORY_ERROR; } for (uint32_t i = 0; i < map_size; i++) { mmdb->metadata.description.descriptions[i] = - malloc(sizeof(MMDB_description_s)); + (MMDB_description_s *)malloc(sizeof(MMDB_description_s)); if (NULL == mmdb->metadata.description.descriptions[i]) { return MMDB_OUT_OF_MEMORY_ERROR; } @@ -579,14 +577,11 @@ MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, int *const gai_error, int *const mmdb_error) { - MMDB_lookup_result_s result = { - .found_entry = false, - .netmask = 0, - .entry = { - .mmdb = mmdb, - .offset = 0 - } - }; + MMDB_lookup_result_s result; + result.found_entry = false; + result.netmask = 0; + result.entry.mmdb = mmdb; + result.entry.offset = 0; struct addrinfo *addresses = NULL; *gai_error = resolve_any_address(ipstr, &addresses); @@ -615,9 +610,8 @@ MMDB_lookup_result_s MMDB_lookup_string(MMDB_s *const mmdb, LOCAL int resolve_any_address(const char *ipstr, struct addrinfo **addresses) { - struct addrinfo hints = { - .ai_socktype = SOCK_STREAM - }; + struct addrinfo hints; + hints.ai_socktype = SOCK_STREAM; int gai_status; if (NULL != strchr(ipstr, ':')) { @@ -644,14 +638,11 @@ MMDB_lookup_result_s MMDB_lookup_sockaddr( const struct sockaddr *const sockaddr, int *const mmdb_error) { - MMDB_lookup_result_s result = { - .found_entry = false, - .netmask = 0, - .entry = { - .mmdb = mmdb, - .offset = 0 - } - }; + MMDB_lookup_result_s result; + result.found_entry = false; + result.netmask = 0; + result.entry.mmdb = mmdb; + result.entry.offset = 0; uint8_t mapped_address[16], *address; if (mmdb->metadata.ip_version == 4) { @@ -754,10 +745,9 @@ LOCAL int find_address_in_search_tree(MMDB_s *mmdb, uint8_t *address, LOCAL record_info_s record_info_for_database(MMDB_s *mmdb) { - record_info_s record_info = { - .record_length = mmdb->full_record_byte_size, - .right_record_offset = 0 - }; + record_info_s record_info; + record_info.record_length = mmdb->full_record_byte_size; + record_info.right_record_offset = 0; if (record_info.record_length == 6) { record_info.left_record_getter = &get_uint24; @@ -877,7 +867,7 @@ int MMDB_vget_value(MMDB_entry_s *const start, int i = 0; const char *path_elem; while (NULL != (path_elem = va_arg(va_path, char *))) { - path = realloc(path, sizeof(const char *) * (i + 1)); + path = (const char **)realloc(path, sizeof(const char *) * (i + 1)); if (NULL == path) { return MMDB_OUT_OF_MEMORY_ERROR; } @@ -889,7 +879,7 @@ int MMDB_vget_value(MMDB_entry_s *const start, i++; } - path = realloc(path, sizeof(char *) * (i + 1)); + path = (const char **)realloc(path, sizeof(char *) * (i + 1)); if (NULL == path) { return MMDB_OUT_OF_MEMORY_ERROR; } @@ -1273,10 +1263,9 @@ int MMDB_get_metadata_as_entry_data_list( { MMDB_s metadata_db = make_fake_metadata_db(mmdb); - MMDB_entry_s metadata_start = { - .mmdb = &metadata_db, - .offset = 0 - }; + MMDB_entry_s metadata_start; + metadata_start.mmdb = &metadata_db; + metadata_start.offset = 0; return MMDB_get_entry_data_list(&metadata_start, entry_data_list); } @@ -1398,10 +1387,10 @@ LOCAL int get_entry_data_list(MMDB_s *mmdb, uint32_t offset, return MMDB_SUCCESS; } -LOCAL float get_ieee754_float(const uint8_t *restrict p) +LOCAL float get_ieee754_float(const uint8_t *__restrict p) { volatile float f; - uint8_t *q = (void *)&f; + uint8_t *q = (uint8_t *)(void *)&f; #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ q[3] = p[0]; q[2] = p[1]; @@ -1413,10 +1402,10 @@ LOCAL float get_ieee754_float(const uint8_t *restrict p) return f; } -LOCAL double get_ieee754_double(const uint8_t *restrict p) +LOCAL double get_ieee754_double(const uint8_t *__restrict p) { volatile double d; - uint8_t *q = (void *)&d; + uint8_t *q = (uint8_t *)(void *)&d; #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ q[7] = p[0]; q[6] = p[1]; @@ -1467,7 +1456,7 @@ LOCAL MMDB_entry_data_list_s *new_entry_data_list(void) { /* We need calloc here in order to ensure that the ->next pointer in the * struct doesn't point to some random address. */ - return calloc(1, sizeof(MMDB_entry_data_list_s)); + return (MMDB_entry_data_list_s *)calloc(1, sizeof(MMDB_entry_data_list_s)); } void MMDB_free_entry_data_list(MMDB_entry_data_list_s *const entry_data_list) @@ -1701,7 +1690,7 @@ LOCAL MMDB_entry_data_list_s *dump_entry_data_list( entry_data_list->entry_data.uint64); entry_data_list = entry_data_list->next; break; - case MMDB_DATA_TYPE_UINT128: + case MMDB_DATA_TYPE_UINT128: { /* Error C2360 if hex_string initialization is not inside a block */ print_indentation(stream, indent); #if MMDB_UINT128_IS_BYTE_ARRAY char *hex_string = @@ -1715,7 +1704,8 @@ LOCAL MMDB_entry_data_list_s *dump_entry_data_list( low); #endif entry_data_list = entry_data_list->next; - break; + break; + } case MMDB_DATA_TYPE_INT32: print_indentation(stream, indent); fprintf(stream, "%d \n", entry_data_list->entry_data.int32); @@ -1741,7 +1731,7 @@ LOCAL void print_indentation(FILE *stream, int i) LOCAL char *bytes_to_hex(uint8_t *bytes, uint32_t size) { - char *hex_string = malloc((size * 2) + 1); + char *hex_string = (char *)malloc((size * 2) + 1); char *hex_pointer = hex_string; for (uint32_t i = 0; i < size; i++) { diff --git a/dlls/geoip/GeoIP2/maxminddb.h b/dlls/geoip/GeoIP2/maxminddb.h index 8d4318f7..6d7c7f15 100644 --- a/dlls/geoip/GeoIP2/maxminddb.h +++ b/dlls/geoip/GeoIP2/maxminddb.h @@ -5,18 +5,21 @@ #define _POSIX_C_SOURCE 200112L #endif -#include +#include "maxminddb_config.h" #include -#include #include #include #include #ifdef _WIN32 +#include "stdbool.h" /* Arksnine: Not supported by MSVC */ +#include /* Arkshine: ssize_t replacement */ +typedef SSIZE_T ssize_t; #include #include typedef ADDRESS_FAMILY sa_family_t; #else +#include #include #include #include diff --git a/dlls/geoip/GeoIP2/stdbool.h b/dlls/geoip/GeoIP2/stdbool.h new file mode 100644 index 00000000..8e7b4044 --- /dev/null +++ b/dlls/geoip/GeoIP2/stdbool.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2000 Jeroen Ruigrok van der Werven + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/include/stdbool.h,v 1.6 2002/08/16 07:33:14 alfred Exp $ + */ + +#ifndef _STDBOOL_H_ +#define _STDBOOL_H_ + +#define __bool_true_false_are_defined 1 + +#ifndef __cplusplus + +#define false 0 +#define true 1 + +#define bool _Bool +#if __STDC_VERSION__ < 199901L && __GNUC__ < 3 +typedef int _Bool; +#endif + +#endif /* !__cplusplus */ + +#endif /* !_STDBOOL_H_ */ \ No newline at end of file