~ubuntu-branches/ubuntu/natty/curl/natty-proposed

« back to all changes in this revision

Viewing changes to include/curl/curlrules.h

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Schuldei
  • Date: 2009-05-24 21:12:19 UTC
  • mfrom: (1.1.12 upstream)
  • mto: (3.3.1 squeeze)
  • mto: This revision was merged to the branch mainline in revision 39.
  • Revision ID: james.westby@ubuntu.com-20090524211219-7jgcwuhl04ixuqsm
Tags: upstream-7.19.5
ImportĀ upstreamĀ versionĀ 7.19.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef __CURL_CURLRULES_H
 
2
#define __CURL_CURLRULES_H
 
3
/***************************************************************************
 
4
 *                                  _   _ ____  _
 
5
 *  Project                     ___| | | |  _ \| |
 
6
 *                             / __| | | | |_) | |
 
7
 *                            | (__| |_| |  _ <| |___
 
8
 *                             \___|\___/|_| \_\_____|
 
9
 *
 
10
 * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
 
11
 *
 
12
 * This software is licensed as described in the file COPYING, which
 
13
 * you should have received as part of this distribution. The terms
 
14
 * are also available at http://curl.haxx.se/docs/copyright.html.
 
15
 *
 
16
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 
17
 * copies of the Software, and permit persons to whom the Software is
 
18
 * furnished to do so, under the terms of the COPYING file.
 
19
 *
 
20
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 
21
 * KIND, either express or implied.
 
22
 *
 
23
 * $Id: curlrules.h,v 1.6 2009-04-29 15:15:38 yangtse Exp $
 
24
 ***************************************************************************/
 
25
 
 
26
/* ================================================================ */
 
27
/*                    COMPILE TIME SANITY CHECKS                    */
 
28
/* ================================================================ */
 
29
 
 
30
/*
 
31
 * NOTE 1:
 
32
 * -------
 
33
 *
 
34
 * All checks done in this file are intentionally placed in a public
 
35
 * header file which is pulled by curl/curl.h when an application is
 
36
 * being built using an already built libcurl library. Additionally
 
37
 * this file is also included and used when building the library.
 
38
 *
 
39
 * If compilation fails on this file it is certainly sure that the
 
40
 * problem is elsewhere. It could be a problem in the curlbuild.h
 
41
 * header file, or simply that you are using different compilation
 
42
 * settings than those used to build the library.
 
43
 *
 
44
 * Nothing in this file is intended to be modified or adjusted by the
 
45
 * curl library user nor by the curl library builder.
 
46
 *
 
47
 * Do not deactivate any check, these are done to make sure that the
 
48
 * library is properly built and used.
 
49
 *
 
50
 * You can find further help on the libcurl development mailing list:
 
51
 * http://cool.haxx.se/mailman/listinfo/curl-library/
 
52
 *
 
53
 * NOTE 2
 
54
 * ------
 
55
 *
 
56
 * Some of the following compile time checks are based on the fact
 
57
 * that the dimension of a constant array can not be a negative one.
 
58
 * In this way if the compile time verification fails, the compilation
 
59
 * will fail issuing an error. The error description wording is compiler
 
60
 * dependant but it will be quite similar to one of the following:
 
61
 *
 
62
 *   "negative subscript or subscript is too large"
 
63
 *   "array must have at least one element"
 
64
 *   "-1 is an illegal array size"
 
65
 *   "size of array is negative"
 
66
 *
 
67
 * If you are building an application which tries to use an already
 
68
 * built libcurl library and you are getting this kind of errors on
 
69
 * this file, it is a clear indication that there is a mismatch between
 
70
 * how the library was built and how you are trying to use it for your
 
71
 * application. Your already compiled or binary library provider is the
 
72
 * only one who can give you the details you need to properly use it.
 
73
 */
 
74
 
 
75
/*
 
76
 * Verify that some macros are actually defined.
 
77
 */
 
78
 
 
79
#ifndef CURL_SIZEOF_LONG
 
80
#  error "CURL_SIZEOF_LONG definition is missing!"
 
81
   Error Compilation_aborted_CURL_SIZEOF_LONG_is_missing
 
82
#endif
 
83
 
 
84
#ifndef CURL_TYPEOF_CURL_SOCKLEN_T
 
85
#  error "CURL_TYPEOF_CURL_SOCKLEN_T definition is missing!"
 
86
   Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_is_missing
 
87
#endif
 
88
 
 
89
#ifndef CURL_SIZEOF_CURL_SOCKLEN_T
 
90
#  error "CURL_SIZEOF_CURL_SOCKLEN_T definition is missing!"
 
91
   Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_is_missing
 
92
#endif
 
93
 
 
94
#ifndef CURL_TYPEOF_CURL_OFF_T
 
95
#  error "CURL_TYPEOF_CURL_OFF_T definition is missing!"
 
96
   Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_is_missing
 
97
#endif
 
98
 
 
99
#ifndef CURL_FORMAT_CURL_OFF_T
 
100
#  error "CURL_FORMAT_CURL_OFF_T definition is missing!"
 
101
   Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_is_missing
 
102
#endif
 
103
 
 
104
#ifndef CURL_FORMAT_CURL_OFF_TU
 
105
#  error "CURL_FORMAT_CURL_OFF_TU definition is missing!"
 
106
   Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_is_missing
 
107
#endif
 
108
 
 
109
#ifndef CURL_FORMAT_OFF_T
 
110
#  error "CURL_FORMAT_OFF_T definition is missing!"
 
111
   Error Compilation_aborted_CURL_FORMAT_OFF_T_is_missing
 
112
#endif
 
113
 
 
114
#ifndef CURL_SIZEOF_CURL_OFF_T
 
115
#  error "CURL_SIZEOF_CURL_OFF_T definition is missing!"
 
116
   Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_is_missing
 
117
#endif
 
118
 
 
119
#ifndef CURL_SUFFIX_CURL_OFF_T
 
120
#  error "CURL_SUFFIX_CURL_OFF_T definition is missing!"
 
121
   Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_is_missing
 
122
#endif
 
123
 
 
124
#ifndef CURL_SUFFIX_CURL_OFF_TU
 
125
#  error "CURL_SUFFIX_CURL_OFF_TU definition is missing!"
 
126
   Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_is_missing
 
127
#endif
 
128
 
 
129
/*
 
130
 * Macros private to this header file.
 
131
 */
 
132
 
 
133
#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
 
134
 
 
135
#define CurlchkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1
 
136
 
 
137
/*
 
138
 * Verify that the size previously defined and expected for long
 
139
 * is the same as the one reported by sizeof() at compile time.
 
140
 */
 
141
 
 
142
typedef char
 
143
  __curl_rule_01__
 
144
    [CurlchkszEQ(long, CURL_SIZEOF_LONG)];
 
145
 
 
146
/*
 
147
 * Verify that the size previously defined and expected for
 
148
 * curl_off_t is actually the the same as the one reported
 
149
 * by sizeof() at compile time.
 
150
 */
 
151
 
 
152
typedef char
 
153
  __curl_rule_02__
 
154
    [CurlchkszEQ(curl_off_t, CURL_SIZEOF_CURL_OFF_T)];
 
155
 
 
156
/*
 
157
 * Verify at compile time that the size of curl_off_t as reported
 
158
 * by sizeof() is greater or equal than the one reported for long
 
159
 * for the current compilation.
 
160
 */
 
161
 
 
162
typedef char
 
163
  __curl_rule_03__
 
164
    [CurlchkszGE(curl_off_t, long)];
 
165
 
 
166
/*
 
167
 * Verify that the size previously defined and expected for
 
168
 * curl_socklen_t is actually the the same as the one reported
 
169
 * by sizeof() at compile time.
 
170
 */
 
171
 
 
172
typedef char
 
173
  __curl_rule_04__
 
174
    [CurlchkszEQ(curl_socklen_t, CURL_SIZEOF_CURL_SOCKLEN_T)];
 
175
 
 
176
/*
 
177
 * Verify at compile time that the size of curl_socklen_t as reported
 
178
 * by sizeof() is greater or equal than the one reported for int for
 
179
 * the current compilation.
 
180
 */
 
181
 
 
182
typedef char
 
183
  __curl_rule_05__
 
184
    [CurlchkszGE(curl_socklen_t, int)];
 
185
 
 
186
/* ================================================================ */
 
187
/*          EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS           */
 
188
/* ================================================================ */
 
189
 
 
190
/* 
 
191
 * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
 
192
 * these to be visible and exported by the external libcurl interface API,
 
193
 * while also making them visible to the library internals, simply including
 
194
 * setup.h, without actually needing to include curl.h internally.
 
195
 * If some day this section would grow big enough, all this should be moved
 
196
 * to its own header file.
 
197
 */
 
198
 
 
199
/*
 
200
 * Figure out if we can use the ## preprocessor operator, which is supported
 
201
 * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
 
202
 * or  __cplusplus so we need to carefully check for them too.
 
203
 */
 
204
 
 
205
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
 
206
  defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
 
207
  defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
 
208
  defined(__ILEC400__)
 
209
  /* This compiler is believed to have an ISO compatible preprocessor */
 
210
#define CURL_ISOCPP
 
211
#else
 
212
  /* This compiler is believed NOT to have an ISO compatible preprocessor */
 
213
#undef CURL_ISOCPP
 
214
#endif
 
215
 
 
216
/*
 
217
 * Macros for minimum-width signed and unsigned curl_off_t integer constants.
 
218
 */
 
219
 
 
220
#ifdef CURL_ISOCPP
 
221
#  define __CURL_OFF_T_C_HELPER2(Val,Suffix) Val ## Suffix
 
222
#else
 
223
#  define __CURL_OFF_T_C_HELPER2(Val,Suffix) Val/**/Suffix
 
224
#endif
 
225
#define __CURL_OFF_T_C_HELPER1(Val,Suffix) __CURL_OFF_T_C_HELPER2(Val,Suffix)
 
226
#define CURL_OFF_T_C(Val)  __CURL_OFF_T_C_HELPER1(Val,CURL_SUFFIX_CURL_OFF_T)
 
227
#define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HELPER1(Val,CURL_SUFFIX_CURL_OFF_TU)
 
228
 
 
229
/*
 
230
 * Get rid of macros private to this header file.
 
231
 */
 
232
 
 
233
#undef CurlchkszEQ
 
234
#undef CurlchkszGE
 
235
 
 
236
/*
 
237
 * Get rid of macros not intended to exist beyond this point.
 
238
 */
 
239
 
 
240
#undef CURL_PULL_WS2TCPIP_H
 
241
#undef CURL_PULL_SYS_TYPES_H
 
242
#undef CURL_PULL_SYS_SOCKET_H
 
243
#undef CURL_PULL_STDINT_H
 
244
#undef CURL_PULL_INTTYPES_H
 
245
 
 
246
#undef CURL_TYPEOF_CURL_SOCKLEN_T
 
247
#undef CURL_TYPEOF_CURL_OFF_T
 
248
 
 
249
#endif /* __CURL_CURLRULES_H */