Merge branch 'vendor/DHCPCD'
[dragonfly.git] / gnu / usr.bin / diff / libdiffutils / strings.h
1 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */
2 /* A substitute <strings.h>.
3
4    Copyright (C) 2007-2013 Free Software Foundation, Inc.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3, or (at your option)
9    any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, see <http://www.gnu.org/licenses/>.  */
18
19 #ifndef _GL_STRINGS_H
20
21 #if __GNUC__ >= 3
22 #pragma GCC system_header
23 #endif
24
25
26 /* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>.
27    But avoid namespace pollution on glibc systems.  */
28 #if defined __minix && !defined __GLIBC__
29 # include <sys/types.h>
30 #endif
31
32 /* The include_next requires a split double-inclusion guard.  */
33 #if 1
34 # include_next <strings.h>
35 #endif
36
37 #ifndef _GL_STRINGS_H
38 #define _GL_STRINGS_H
39
40 #if ! 1
41 /* Get size_t.  */
42 # include <stddef.h>
43 #endif
44
45
46 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
47 #ifndef _GL_CXXDEFS_H
48 #define _GL_CXXDEFS_H
49
50 /* The three most frequent use cases of these macros are:
51
52    * For providing a substitute for a function that is missing on some
53      platforms, but is declared and works fine on the platforms on which
54      it exists:
55
56        #if @GNULIB_FOO@
57        # if !@HAVE_FOO@
58        _GL_FUNCDECL_SYS (foo, ...);
59        # endif
60        _GL_CXXALIAS_SYS (foo, ...);
61        _GL_CXXALIASWARN (foo);
62        #elif defined GNULIB_POSIXCHECK
63        ...
64        #endif
65
66    * For providing a replacement for a function that exists on all platforms,
67      but is broken/insufficient and needs to be replaced on some platforms:
68
69        #if @GNULIB_FOO@
70        # if @REPLACE_FOO@
71        #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
72        #   undef foo
73        #   define foo rpl_foo
74        #  endif
75        _GL_FUNCDECL_RPL (foo, ...);
76        _GL_CXXALIAS_RPL (foo, ...);
77        # else
78        _GL_CXXALIAS_SYS (foo, ...);
79        # endif
80        _GL_CXXALIASWARN (foo);
81        #elif defined GNULIB_POSIXCHECK
82        ...
83        #endif
84
85    * For providing a replacement for a function that exists on some platforms
86      but is broken/insufficient and needs to be replaced on some of them and
87      is additionally either missing or undeclared on some other platforms:
88
89        #if @GNULIB_FOO@
90        # if @REPLACE_FOO@
91        #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
92        #   undef foo
93        #   define foo rpl_foo
94        #  endif
95        _GL_FUNCDECL_RPL (foo, ...);
96        _GL_CXXALIAS_RPL (foo, ...);
97        # else
98        #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
99        _GL_FUNCDECL_SYS (foo, ...);
100        #  endif
101        _GL_CXXALIAS_SYS (foo, ...);
102        # endif
103        _GL_CXXALIASWARN (foo);
104        #elif defined GNULIB_POSIXCHECK
105        ...
106        #endif
107 */
108
109 /* _GL_EXTERN_C declaration;
110    performs the declaration with C linkage.  */
111 #if defined __cplusplus
112 # define _GL_EXTERN_C extern "C"
113 #else
114 # define _GL_EXTERN_C extern
115 #endif
116
117 /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
118    declares a replacement function, named rpl_func, with the given prototype,
119    consisting of return type, parameters, and attributes.
120    Example:
121      _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
122                                   _GL_ARG_NONNULL ((1)));
123  */
124 #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
125   _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
126 #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
127   _GL_EXTERN_C rettype rpl_func parameters_and_attributes
128
129 /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
130    declares the system function, named func, with the given prototype,
131    consisting of return type, parameters, and attributes.
132    Example:
133      _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
134                                   _GL_ARG_NONNULL ((1)));
135  */
136 #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
137   _GL_EXTERN_C rettype func parameters_and_attributes
138
139 /* _GL_CXXALIAS_RPL (func, rettype, parameters);
140    declares a C++ alias called GNULIB_NAMESPACE::func
141    that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
142    Example:
143      _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
144  */
145 #define _GL_CXXALIAS_RPL(func,rettype,parameters) \
146   _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
147 #if defined __cplusplus && defined GNULIB_NAMESPACE
148 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
149     namespace GNULIB_NAMESPACE                                \
150     {                                                         \
151       rettype (*const func) parameters = ::rpl_func;          \
152     }                                                         \
153     _GL_EXTERN_C int _gl_cxxalias_dummy
154 #else
155 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
156     _GL_EXTERN_C int _gl_cxxalias_dummy
157 #endif
158
159 /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
160    is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
161    except that the C function rpl_func may have a slightly different
162    declaration.  A cast is used to silence the "invalid conversion" error
163    that would otherwise occur.  */
164 #if defined __cplusplus && defined GNULIB_NAMESPACE
165 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
166     namespace GNULIB_NAMESPACE                                     \
167     {                                                              \
168       rettype (*const func) parameters =                           \
169         reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
170     }                                                              \
171     _GL_EXTERN_C int _gl_cxxalias_dummy
172 #else
173 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
174     _GL_EXTERN_C int _gl_cxxalias_dummy
175 #endif
176
177 /* _GL_CXXALIAS_SYS (func, rettype, parameters);
178    declares a C++ alias called GNULIB_NAMESPACE::func
179    that redirects to the system provided function func, if GNULIB_NAMESPACE
180    is defined.
181    Example:
182      _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
183  */
184 #if defined __cplusplus && defined GNULIB_NAMESPACE
185   /* If we were to write
186        rettype (*const func) parameters = ::func;
187      like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
188      better (remove an indirection through a 'static' pointer variable),
189      but then the _GL_CXXALIASWARN macro below would cause a warning not only
190      for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
191 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
192     namespace GNULIB_NAMESPACE                     \
193     {                                              \
194       static rettype (*func) parameters = ::func;  \
195     }                                              \
196     _GL_EXTERN_C int _gl_cxxalias_dummy
197 #else
198 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
199     _GL_EXTERN_C int _gl_cxxalias_dummy
200 #endif
201
202 /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
203    is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
204    except that the C function func may have a slightly different declaration.
205    A cast is used to silence the "invalid conversion" error that would
206    otherwise occur.  */
207 #if defined __cplusplus && defined GNULIB_NAMESPACE
208 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
209     namespace GNULIB_NAMESPACE                          \
210     {                                                   \
211       static rettype (*func) parameters =               \
212         reinterpret_cast<rettype(*)parameters>(::func); \
213     }                                                   \
214     _GL_EXTERN_C int _gl_cxxalias_dummy
215 #else
216 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
217     _GL_EXTERN_C int _gl_cxxalias_dummy
218 #endif
219
220 /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
221    is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
222    except that the C function is picked among a set of overloaded functions,
223    namely the one with rettype2 and parameters2.  Two consecutive casts
224    are used to silence the "cannot find a match" and "invalid conversion"
225    errors that would otherwise occur.  */
226 #if defined __cplusplus && defined GNULIB_NAMESPACE
227   /* The outer cast must be a reinterpret_cast.
228      The inner cast: When the function is defined as a set of overloaded
229      functions, it works as a static_cast<>, choosing the designated variant.
230      When the function is defined as a single variant, it works as a
231      reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
232 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
233     namespace GNULIB_NAMESPACE                                                \
234     {                                                                         \
235       static rettype (*func) parameters =                                     \
236         reinterpret_cast<rettype(*)parameters>(                               \
237           (rettype2(*)parameters2)(::func));                                  \
238     }                                                                         \
239     _GL_EXTERN_C int _gl_cxxalias_dummy
240 #else
241 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
242     _GL_EXTERN_C int _gl_cxxalias_dummy
243 #endif
244
245 /* _GL_CXXALIASWARN (func);
246    causes a warning to be emitted when ::func is used but not when
247    GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
248    variants.  */
249 #if defined __cplusplus && defined GNULIB_NAMESPACE
250 # define _GL_CXXALIASWARN(func) \
251    _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
252 # define _GL_CXXALIASWARN_1(func,namespace) \
253    _GL_CXXALIASWARN_2 (func, namespace)
254 /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
255    we enable the warning only when not optimizing.  */
256 # if !__OPTIMIZE__
257 #  define _GL_CXXALIASWARN_2(func,namespace) \
258     _GL_WARN_ON_USE (func, \
259                      "The symbol ::" #func " refers to the system function. " \
260                      "Use " #namespace "::" #func " instead.")
261 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
262 #  define _GL_CXXALIASWARN_2(func,namespace) \
263      extern __typeof__ (func) func
264 # else
265 #  define _GL_CXXALIASWARN_2(func,namespace) \
266      _GL_EXTERN_C int _gl_cxxalias_dummy
267 # endif
268 #else
269 # define _GL_CXXALIASWARN(func) \
270     _GL_EXTERN_C int _gl_cxxalias_dummy
271 #endif
272
273 /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
274    causes a warning to be emitted when the given overloaded variant of ::func
275    is used but not when GNULIB_NAMESPACE::func is used.  */
276 #if defined __cplusplus && defined GNULIB_NAMESPACE
277 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
278    _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
279                         GNULIB_NAMESPACE)
280 # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
281    _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
282 /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
283    we enable the warning only when not optimizing.  */
284 # if !__OPTIMIZE__
285 #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
286     _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
287                          "The symbol ::" #func " refers to the system function. " \
288                          "Use " #namespace "::" #func " instead.")
289 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
290 #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
291      extern __typeof__ (func) func
292 # else
293 #  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
294      _GL_EXTERN_C int _gl_cxxalias_dummy
295 # endif
296 #else
297 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
298     _GL_EXTERN_C int _gl_cxxalias_dummy
299 #endif
300
301 #endif /* _GL_CXXDEFS_H */
302
303 /* The definition of _GL_ARG_NONNULL is copied here.  */
304 /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
305    that the values passed as arguments n, ..., m must be non-NULL pointers.
306    n = 1 stands for the first argument, n = 2 for the second argument etc.  */
307 #ifndef _GL_ARG_NONNULL
308 # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
309 #  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
310 # else
311 #  define _GL_ARG_NONNULL(params)
312 # endif
313 #endif
314
315 /* The definition of _GL_WARN_ON_USE is copied here.  */
316 #ifndef _GL_WARN_ON_USE
317
318 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
319 /* A compiler attribute is available in gcc versions 4.3.0 and later.  */
320 #  define _GL_WARN_ON_USE(function, message) \
321 extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
322 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
323 /* Verify the existence of the function.  */
324 #  define _GL_WARN_ON_USE(function, message) \
325 extern __typeof__ (function) function
326 # else /* Unsupported.  */
327 #  define _GL_WARN_ON_USE(function, message) \
328 _GL_WARN_EXTERN_C int _gl_warn_on_use
329 # endif
330 #endif
331
332 /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
333    is like _GL_WARN_ON_USE (function, "string"), except that the function is
334    declared with the given prototype, consisting of return type, parameters,
335    and attributes.
336    This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
337    not work in this case.  */
338 #ifndef _GL_WARN_ON_USE_CXX
339 # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
340 #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
341 extern rettype function parameters_and_attributes \
342      __attribute__ ((__warning__ (msg)))
343 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
344 /* Verify the existence of the function.  */
345 #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
346 extern rettype function parameters_and_attributes
347 # else /* Unsupported.  */
348 #  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
349 _GL_WARN_EXTERN_C int _gl_warn_on_use
350 # endif
351 #endif
352
353 /* _GL_WARN_EXTERN_C declaration;
354    performs the declaration with C linkage.  */
355 #ifndef _GL_WARN_EXTERN_C
356 # if defined __cplusplus
357 #  define _GL_WARN_EXTERN_C extern "C"
358 # else
359 #  define _GL_WARN_EXTERN_C extern
360 # endif
361 #endif
362
363 #ifdef __cplusplus
364 extern "C" {
365 #endif
366
367
368   /* Find the index of the least-significant set bit.  */
369 #if 0
370 # if !1
371 _GL_FUNCDECL_SYS (ffs, int, (int i));
372 # endif
373 _GL_CXXALIAS_SYS (ffs, int, (int i));
374 _GL_CXXALIASWARN (ffs);
375 #elif defined GNULIB_POSIXCHECK
376 # undef ffs
377 # if HAVE_RAW_DECL_FFS
378 _GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module");
379 # endif
380 #endif
381
382 /* Compare strings S1 and S2, ignoring case, returning less than, equal to or
383    greater than zero if S1 is lexicographically less than, equal to or greater
384    than S2.
385    Note: This function does not work in multibyte locales.  */
386 #if ! 1
387 extern int strcasecmp (char const *s1, char const *s2)
388      _GL_ARG_NONNULL ((1, 2));
389 #endif
390 #if defined GNULIB_POSIXCHECK
391 /* strcasecmp() does not work with multibyte strings:
392    POSIX says that it operates on "strings", and "string" in POSIX is defined
393    as a sequence of bytes, not of characters.   */
394 # undef strcasecmp
395 # if HAVE_RAW_DECL_STRCASECMP
396 _GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character "
397                  "strings in multibyte locales - "
398                  "use mbscasecmp if you care about "
399                  "internationalization, or use c_strcasecmp , "
400                  "gnulib module c-strcase) if you want a locale "
401                  "independent function");
402 # endif
403 #endif
404
405 /* Compare no more than N bytes of strings S1 and S2, ignoring case,
406    returning less than, equal to or greater than zero if S1 is
407    lexicographically less than, equal to or greater than S2.
408    Note: This function cannot work correctly in multibyte locales.  */
409 #if ! 1
410 extern int strncasecmp (char const *s1, char const *s2, size_t n)
411      _GL_ARG_NONNULL ((1, 2));
412 #endif
413 #if defined GNULIB_POSIXCHECK
414 /* strncasecmp() does not work with multibyte strings:
415    POSIX says that it operates on "strings", and "string" in POSIX is defined
416    as a sequence of bytes, not of characters.  */
417 # undef strncasecmp
418 # if HAVE_RAW_DECL_STRNCASECMP
419 _GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character "
420                  "strings in multibyte locales - "
421                  "use mbsncasecmp or mbspcasecmp if you care about "
422                  "internationalization, or use c_strncasecmp , "
423                  "gnulib module c-strcase) if you want a locale "
424                  "independent function");
425 # endif
426 #endif
427
428
429 #ifdef __cplusplus
430 }
431 #endif
432
433 #endif /* _GL_STRING_H */
434 #endif /* _GL_STRING_H */