1 #ifndef __CARES_RULES_H 2 #define __CARES_RULES_H 3 4 5 /* Copyright (C) 2009 by Daniel Stenberg et al 6 * 7 * Permission to use, copy, modify, and distribute this software and its 8 * documentation for any purpose and without fee is hereby granted, provided 9 * that the above copyright notice appear in all copies and that both that 10 * copyright notice and this permission notice appear in supporting 11 * documentation, and that the name of M.I.T. not be used in advertising or 12 * publicity pertaining to distribution of the software without specific, 13 * written prior permission. M.I.T. makes no representations about the 14 * suitability of this software for any purpose. It is provided "as is" 15 * without express or implied warranty. 16 */ 17 18 /* ================================================================ */ 19 /* COMPILE TIME SANITY CHECKS */ 20 /* ================================================================ */ 21 22 /* 23 * NOTE 1: 24 * ------- 25 * 26 * All checks done in this file are intentionally placed in a public 27 * header file which is pulled by ares.h when an application is 28 * being built using an already built c-ares library. Additionally 29 * this file is also included and used when building the library. 30 * 31 * If compilation fails on this file it is certainly sure that the 32 * problem is elsewhere. It could be a problem in the ares_build.h 33 * header file, or simply that you are using different compilation 34 * settings than those used to build the library. 35 * 36 * Nothing in this file is intended to be modified or adjusted by the 37 * c-ares library user nor by the c-ares library builder. 38 * 39 * Do not deactivate any check, these are done to make sure that the 40 * library is properly built and used. 41 * 42 * You can find further help on the c-ares development mailing list: 43 * http://cool.haxx.se/mailman/listinfo/c-ares/ 44 * 45 * NOTE 2 46 * ------ 47 * 48 * Some of the following compile time checks are based on the fact 49 * that the dimension of a constant array can not be a negative one. 50 * In this way if the compile time verification fails, the compilation 51 * will fail issuing an error. The error description wording is compiler 52 * dependent but it will be quite similar to one of the following: 53 * 54 * "negative subscript or subscript is too large" 55 * "array must have at least one element" 56 * "-1 is an illegal array size" 57 * "size of array is negative" 58 * 59 * If you are building an application which tries to use an already 60 * built c-ares library and you are getting this kind of errors on 61 * this file, it is a clear indication that there is a mismatch between 62 * how the library was built and how you are trying to use it for your 63 * application. Your already compiled or binary library provider is the 64 * only one who can give you the details you need to properly use it. 65 */ 66 67 /* 68 * Verify that some macros are actually defined. 69 */ 70 71 #ifndef CARES_SIZEOF_LONG 72 # error "CARES_SIZEOF_LONG definition is missing!" 73 Error Compilation_aborted_CARES_SIZEOF_LONG_is_missing 74 #endif 75 76 #ifndef CARES_TYPEOF_ARES_SOCKLEN_T 77 # error "CARES_TYPEOF_ARES_SOCKLEN_T definition is missing!" 78 Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_is_missing 79 #endif 80 81 #ifndef CARES_SIZEOF_ARES_SOCKLEN_T 82 # error "CARES_SIZEOF_ARES_SOCKLEN_T definition is missing!" 83 Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_is_missing 84 #endif 85 86 /* 87 * Macros private to this header file. 88 */ 89 90 #define CareschkszEQ(t, s) sizeof(t) == s ? 1 : -1 91 92 #define CareschkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1 93 94 /* 95 * Verify that the size previously defined and expected for long 96 * is the same as the one reported by sizeof() at compile time. 97 */ 98 99 typedef char 100 __cares_rule_01__ 101 [CareschkszEQ(long, CARES_SIZEOF_LONG)]; 102 103 /* 104 * Verify that the size previously defined and expected for 105 * ares_socklen_t is actually the the same as the one reported 106 * by sizeof() at compile time. 107 */ 108 109 typedef char 110 __cares_rule_02__ 111 [CareschkszEQ(ares_socklen_t, CARES_SIZEOF_ARES_SOCKLEN_T)]; 112 113 /* 114 * Verify at compile time that the size of ares_socklen_t as reported 115 * by sizeof() is greater or equal than the one reported for int for 116 * the current compilation. 117 */ 118 119 typedef char 120 __cares_rule_03__ 121 [CareschkszGE(ares_socklen_t, int)]; 122 123 /* ================================================================ */ 124 /* EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS */ 125 /* ================================================================ */ 126 127 /* 128 * Get rid of macros private to this header file. 129 */ 130 131 #undef CareschkszEQ 132 #undef CareschkszGE 133 134 /* 135 * Get rid of macros not intended to exist beyond this point. 136 */ 137 138 #undef CARES_PULL_WS2TCPIP_H 139 #undef CARES_PULL_SYS_TYPES_H 140 #undef CARES_PULL_SYS_SOCKET_H 141 142 #undef CARES_TYPEOF_ARES_SOCKLEN_T 143 144 #endif /* __CARES_RULES_H */ 145