1 /* 2 This file is part of libmicrohttpd 3 Copyright (C) 2015 Karlson2k (Evgeny Grin) 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 */ 19 20 /** 21 * @file microhttpd/mhd_limits.h 22 * @brief limits values definitions 23 * @author Karlson2k (Evgeny Grin) 24 */ 25 26 #ifndef MHD_LIMITS_H 27 #define MHD_LIMITS_H 28 29 #include "platform.h" 30 31 #ifdef HAVE_LIMITS_H 32 #include <limits.h> 33 #endif /* HAVE_LIMITS_H */ 34 35 #define MHD_UNSIGNED_TYPE_MAX_(type) ((type) - 1) 36 /* Assume 8 bits per byte, no padding bits. */ 37 #define MHD_SIGNED_TYPE_MAX_(type) \ 38 ( (type) ((( ((type) 1) << (sizeof(type) * 8 - 2)) - 1) * 2 + 1) ) 39 #define MHD_TYPE_IS_SIGNED_(type) (((type) 0)>((type) - 1)) 40 41 #ifndef UINT_MAX 42 #ifdef __UINT_MAX__ 43 #define UINT_MAX __UINT_MAX__ 44 #else /* ! __UINT_MAX__ */ 45 #define UINT_MAX MHD_UNSIGNED_TYPE_MAX_ (unsigned int) 46 #endif /* ! __UINT_MAX__ */ 47 #endif /* !UINT_MAX */ 48 49 #ifndef LONG_MAX 50 #ifdef __LONG_MAX__ 51 #define LONG_MAX __LONG_MAX__ 52 #else /* ! __LONG_MAX__ */ 53 #define LONG_MAX MHD_SIGNED_TYPE_MAX (long) 54 #endif /* ! __LONG_MAX__ */ 55 #endif /* !OFF_T_MAX */ 56 57 #ifndef ULLONG_MAX 58 #define ULLONG_MAX MHD_UNSIGNED_TYPE_MAX_ (MHD_UNSIGNED_LONG_LONG) 59 #endif /* !ULLONG_MAX */ 60 61 #ifndef INT32_MAX 62 #ifdef __INT32_MAX__ 63 #define INT32_MAX __INT32_MAX__ 64 #else /* ! __INT32_MAX__ */ 65 #define INT32_MAX ((int32_t) 0x7FFFFFFF) 66 #endif /* ! __INT32_MAX__ */ 67 #endif /* !INT32_MAX */ 68 69 #ifndef UINT32_MAX 70 #ifdef __UINT32_MAX__ 71 #define UINT32_MAX __UINT32_MAX__ 72 #else /* ! __UINT32_MAX__ */ 73 #define UINT32_MAX ((int32_t) 0xFFFFFFFF) 74 #endif /* ! __UINT32_MAX__ */ 75 #endif /* !UINT32_MAX */ 76 77 #ifndef UINT64_MAX 78 #ifdef __UINT64_MAX__ 79 #define UINT64_MAX __UINT64_MAX__ 80 #else /* ! __UINT64_MAX__ */ 81 #define UINT64_MAX ((uint64_t) 0xFFFFFFFFFFFFFFFF) 82 #endif /* ! __UINT64_MAX__ */ 83 #endif /* !UINT64_MAX */ 84 85 #ifndef INT64_MAX 86 #ifdef __INT64_MAX__ 87 #define INT64_MAX __INT64_MAX__ 88 #else /* ! __INT64_MAX__ */ 89 #define INT64_MAX ((int64_t) 0x7FFFFFFFFFFFFFFF) 90 #endif /* ! __UINT64_MAX__ */ 91 #endif /* !INT64_MAX */ 92 93 #ifndef SIZE_MAX 94 #ifdef __SIZE_MAX__ 95 #define SIZE_MAX __SIZE_MAX__ 96 #elif defined(UINTPTR_MAX) 97 #define SIZE_MAX UINTPTR_MAX 98 #else /* ! __SIZE_MAX__ */ 99 #define SIZE_MAX MHD_UNSIGNED_TYPE_MAX_ (size_t) 100 #endif /* ! __SIZE_MAX__ */ 101 #endif /* !SIZE_MAX */ 102 103 #ifndef SSIZE_MAX 104 #ifdef __SSIZE_MAX__ 105 #define SSIZE_MAX __SSIZE_MAX__ 106 #elif defined(PTRDIFF_MAX) 107 #define SSIZE_MAX PTRDIFF_MAX 108 #elif defined(INTPTR_MAX) 109 #define SSIZE_MAX INTPTR_MAX 110 #else 111 #define SSIZE_MAN MHD_SIGNED_TYPE_MAX_ (ssize_t) 112 #endif 113 #endif /* ! SSIZE_MAX */ 114 115 #ifndef OFF_T_MAX 116 #ifdef OFF_MAX 117 #define OFF_T_MAX OFF_MAX 118 #elif defined(OFFT_MAX) 119 #define OFF_T_MAX OFFT_MAX 120 #elif defined(__APPLE__) && defined(__MACH__) 121 #define OFF_T_MAX INT64_MAX 122 #else 123 #define OFF_T_MAX MHD_SIGNED_TYPE_MAX_ (off_t) 124 #endif 125 #endif /* !OFF_T_MAX */ 126 127 #if defined(_LARGEFILE64_SOURCE) && ! defined(OFF64_T_MAX) 128 #define OFF64_T_MAX MHD_SIGNED_TYPE_MAX_ (uint64_t) 129 #endif /* _LARGEFILE64_SOURCE && !OFF64_T_MAX */ 130 131 #ifndef TIME_T_MAX 132 #define TIME_T_MAX ((time_t) \ 133 (MHD_TYPE_IS_SIGNED_ (time_t) ? \ 134 MHD_SIGNED_TYPE_MAX_ (time_t) : \ 135 MHD_UNSIGNED_TYPE_MAX_ (time_t))) 136 #endif /* !TIME_T_MAX */ 137 138 #ifndef TIMEVAL_TV_SEC_MAX 139 #ifndef _WIN32 140 #define TIMEVAL_TV_SEC_MAX TIME_T_MAX 141 #else /* _WIN32 */ 142 #define TIMEVAL_TV_SEC_MAX LONG_MAX 143 #endif /* _WIN32 */ 144 #endif /* !TIMEVAL_TV_SEC_MAX */ 145 146 #ifndef MHD_FD_BLOCK_SIZE 147 #ifdef _WIN32 148 #define MHD_FD_BLOCK_SIZE 16384 /* 16k */ 149 #else /* _WIN32 */ 150 #define MHD_FD_BLOCK_SIZE 4096 /* 4k */ 151 #endif /* _WIN32 */ 152 #endif /* !MHD_FD_BLOCK_SIZE */ 153 154 #endif /* MHD_LIMITS_H */ 155