Annotation of embedaddon/libiconv/srclib/string.in.h, revision 1.1.1.1
1.1 misho 1: /* A GNU-like <string.h>.
2:
3: Copyright (C) 1995-1996, 2001-2009 Free Software Foundation, Inc.
4:
5: This program is free software; you can redistribute it and/or modify
6: it under the terms of the GNU General Public License as published by
7: the Free Software Foundation; either version 3, or (at your option)
8: any later version.
9:
10: This program 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
13: GNU General Public License for more details.
14:
15: You should have received a copy of the GNU General Public License
16: along with this program; if not, write to the Free Software Foundation,
17: Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
18:
19: #ifndef _GL_STRING_H
20:
21: #if __GNUC__ >= 3
22: @PRAGMA_SYSTEM_HEADER@
23: #endif
24:
25: /* The include_next requires a split double-inclusion guard. */
26: #@INCLUDE_NEXT@ @NEXT_STRING_H@
27:
28: #ifndef _GL_STRING_H
29: #define _GL_STRING_H
30:
31:
32: #ifndef __attribute__
33: /* This feature is available in gcc versions 2.5 and later. */
34: # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
35: # define __attribute__(Spec) /* empty */
36: # endif
37: /* The attribute __pure__ was added in gcc 2.96. */
38: # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
39: # define __pure__ /* empty */
40: # endif
41: #endif
42:
43:
44: /* The definition of GL_LINK_WARNING is copied here. */
45:
46:
47: #ifdef __cplusplus
48: extern "C" {
49: #endif
50:
51:
52: /* Return the first instance of C within N bytes of S, or NULL. */
53: #if @GNULIB_MEMCHR@
54: # if @REPLACE_MEMCHR@
55: # define memchr rpl_memchr
56: extern void *memchr (void const *__s, int __c, size_t __n)
57: __attribute__ ((__pure__));
58: # endif
59: #elif defined GNULIB_POSIXCHECK
60: # undef memchr
61: # define memchr(s,c,n) \
62: (GL_LINK_WARNING ("memchr has platform-specific bugs - " \
63: "use gnulib module memchr for portability" ), \
64: memchr (s, c, n))
65: #endif
66:
67: /* Return the first occurrence of NEEDLE in HAYSTACK. */
68: #if @GNULIB_MEMMEM@
69: # if @REPLACE_MEMMEM@
70: # define memmem rpl_memmem
71: # endif
72: # if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@
73: extern void *memmem (void const *__haystack, size_t __haystack_len,
74: void const *__needle, size_t __needle_len)
75: __attribute__ ((__pure__));
76: # endif
77: #elif defined GNULIB_POSIXCHECK
78: # undef memmem
79: # define memmem(a,al,b,bl) \
80: (GL_LINK_WARNING ("memmem is unportable and often quadratic - " \
81: "use gnulib module memmem-simple for portability, " \
82: "and module memmem for speed" ), \
83: memmem (a, al, b, bl))
84: #endif
85:
86: /* Copy N bytes of SRC to DEST, return pointer to bytes after the
87: last written byte. */
88: #if @GNULIB_MEMPCPY@
89: # if ! @HAVE_MEMPCPY@
90: extern void *mempcpy (void *restrict __dest, void const *restrict __src,
91: size_t __n);
92: # endif
93: #elif defined GNULIB_POSIXCHECK
94: # undef mempcpy
95: # define mempcpy(a,b,n) \
96: (GL_LINK_WARNING ("mempcpy is unportable - " \
97: "use gnulib module mempcpy for portability"), \
98: mempcpy (a, b, n))
99: #endif
100:
101: /* Search backwards through a block for a byte (specified as an int). */
102: #if @GNULIB_MEMRCHR@
103: # if ! @HAVE_DECL_MEMRCHR@
104: extern void *memrchr (void const *, int, size_t)
105: __attribute__ ((__pure__));
106: # endif
107: #elif defined GNULIB_POSIXCHECK
108: # undef memrchr
109: # define memrchr(a,b,c) \
110: (GL_LINK_WARNING ("memrchr is unportable - " \
111: "use gnulib module memrchr for portability"), \
112: memrchr (a, b, c))
113: #endif
114:
115: /* Find the first occurrence of C in S. More efficient than
116: memchr(S,C,N), at the expense of undefined behavior if C does not
117: occur within N bytes. */
118: #if @GNULIB_RAWMEMCHR@
119: # if ! @HAVE_RAWMEMCHR@
120: extern void *rawmemchr (void const *__s, int __c_in)
121: __attribute__ ((__pure__));
122: # endif
123: #elif defined GNULIB_POSIXCHECK
124: # undef rawmemchr
125: # define rawmemchr(a,b) \
126: (GL_LINK_WARNING ("rawmemchr is unportable - " \
127: "use gnulib module rawmemchr for portability"), \
128: rawmemchr (a, b))
129: #endif
130:
131: /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */
132: #if @GNULIB_STPCPY@
133: # if ! @HAVE_STPCPY@
134: extern char *stpcpy (char *restrict __dst, char const *restrict __src);
135: # endif
136: #elif defined GNULIB_POSIXCHECK
137: # undef stpcpy
138: # define stpcpy(a,b) \
139: (GL_LINK_WARNING ("stpcpy is unportable - " \
140: "use gnulib module stpcpy for portability"), \
141: stpcpy (a, b))
142: #endif
143:
144: /* Copy no more than N bytes of SRC to DST, returning a pointer past the
145: last non-NUL byte written into DST. */
146: #if @GNULIB_STPNCPY@
147: # if ! @HAVE_STPNCPY@
148: # define stpncpy gnu_stpncpy
149: extern char *stpncpy (char *restrict __dst, char const *restrict __src,
150: size_t __n);
151: # endif
152: #elif defined GNULIB_POSIXCHECK
153: # undef stpncpy
154: # define stpncpy(a,b,n) \
155: (GL_LINK_WARNING ("stpncpy is unportable - " \
156: "use gnulib module stpncpy for portability"), \
157: stpncpy (a, b, n))
158: #endif
159:
160: #if defined GNULIB_POSIXCHECK
161: /* strchr() does not work with multibyte strings if the locale encoding is
162: GB18030 and the character to be searched is a digit. */
163: # undef strchr
164: # define strchr(s,c) \
165: (GL_LINK_WARNING ("strchr cannot work correctly on character strings " \
166: "in some multibyte locales - " \
167: "use mbschr if you care about internationalization"), \
168: strchr (s, c))
169: #endif
170:
171: /* Find the first occurrence of C in S or the final NUL byte. */
172: #if @GNULIB_STRCHRNUL@
173: # if ! @HAVE_STRCHRNUL@
174: extern char *strchrnul (char const *__s, int __c_in)
175: __attribute__ ((__pure__));
176: # endif
177: #elif defined GNULIB_POSIXCHECK
178: # undef strchrnul
179: # define strchrnul(a,b) \
180: (GL_LINK_WARNING ("strchrnul is unportable - " \
181: "use gnulib module strchrnul for portability"), \
182: strchrnul (a, b))
183: #endif
184:
185: /* Duplicate S, returning an identical malloc'd string. */
186: #if @GNULIB_STRDUP@
187: # if @REPLACE_STRDUP@
188: # undef strdup
189: # define strdup rpl_strdup
190: # endif
191: # if !(@HAVE_DECL_STRDUP@ || defined strdup) || @REPLACE_STRDUP@
192: extern char *strdup (char const *__s);
193: # endif
194: #elif defined GNULIB_POSIXCHECK
195: # undef strdup
196: # define strdup(a) \
197: (GL_LINK_WARNING ("strdup is unportable - " \
198: "use gnulib module strdup for portability"), \
199: strdup (a))
200: #endif
201:
202: /* Return a newly allocated copy of at most N bytes of STRING. */
203: #if @GNULIB_STRNDUP@
204: # if ! @HAVE_STRNDUP@
205: # undef strndup
206: # define strndup rpl_strndup
207: # endif
208: # if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@
209: extern char *strndup (char const *__string, size_t __n);
210: # endif
211: #elif defined GNULIB_POSIXCHECK
212: # undef strndup
213: # define strndup(a,n) \
214: (GL_LINK_WARNING ("strndup is unportable - " \
215: "use gnulib module strndup for portability"), \
216: strndup (a, n))
217: #endif
218:
219: /* Find the length (number of bytes) of STRING, but scan at most
220: MAXLEN bytes. If no '\0' terminator is found in that many bytes,
221: return MAXLEN. */
222: #if @GNULIB_STRNLEN@
223: # if ! @HAVE_DECL_STRNLEN@
224: extern size_t strnlen (char const *__string, size_t __maxlen)
225: __attribute__ ((__pure__));
226: # endif
227: #elif defined GNULIB_POSIXCHECK
228: # undef strnlen
229: # define strnlen(a,n) \
230: (GL_LINK_WARNING ("strnlen is unportable - " \
231: "use gnulib module strnlen for portability"), \
232: strnlen (a, n))
233: #endif
234:
235: #if defined GNULIB_POSIXCHECK
236: /* strcspn() assumes the second argument is a list of single-byte characters.
237: Even in this simple case, it does not work with multibyte strings if the
238: locale encoding is GB18030 and one of the characters to be searched is a
239: digit. */
240: # undef strcspn
241: # define strcspn(s,a) \
242: (GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \
243: "in multibyte locales - " \
244: "use mbscspn if you care about internationalization"), \
245: strcspn (s, a))
246: #endif
247:
248: /* Find the first occurrence in S of any character in ACCEPT. */
249: #if @GNULIB_STRPBRK@
250: # if ! @HAVE_STRPBRK@
251: extern char *strpbrk (char const *__s, char const *__accept)
252: __attribute__ ((__pure__));
253: # endif
254: # if defined GNULIB_POSIXCHECK
255: /* strpbrk() assumes the second argument is a list of single-byte characters.
256: Even in this simple case, it does not work with multibyte strings if the
257: locale encoding is GB18030 and one of the characters to be searched is a
258: digit. */
259: # undef strpbrk
260: # define strpbrk(s,a) \
261: (GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \
262: "in multibyte locales - " \
263: "use mbspbrk if you care about internationalization"), \
264: strpbrk (s, a))
265: # endif
266: #elif defined GNULIB_POSIXCHECK
267: # undef strpbrk
268: # define strpbrk(s,a) \
269: (GL_LINK_WARNING ("strpbrk is unportable - " \
270: "use gnulib module strpbrk for portability"), \
271: strpbrk (s, a))
272: #endif
273:
274: #if defined GNULIB_POSIXCHECK
275: /* strspn() assumes the second argument is a list of single-byte characters.
276: Even in this simple case, it cannot work with multibyte strings. */
277: # undef strspn
278: # define strspn(s,a) \
279: (GL_LINK_WARNING ("strspn cannot work correctly on character strings " \
280: "in multibyte locales - " \
281: "use mbsspn if you care about internationalization"), \
282: strspn (s, a))
283: #endif
284:
285: #if defined GNULIB_POSIXCHECK
286: /* strrchr() does not work with multibyte strings if the locale encoding is
287: GB18030 and the character to be searched is a digit. */
288: # undef strrchr
289: # define strrchr(s,c) \
290: (GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \
291: "in some multibyte locales - " \
292: "use mbsrchr if you care about internationalization"), \
293: strrchr (s, c))
294: #endif
295:
296: /* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
297: If one is found, overwrite it with a NUL, and advance *STRINGP
298: to point to the next char after it. Otherwise, set *STRINGP to NULL.
299: If *STRINGP was already NULL, nothing happens.
300: Return the old value of *STRINGP.
301:
302: This is a variant of strtok() that is multithread-safe and supports
303: empty fields.
304:
305: Caveat: It modifies the original string.
306: Caveat: These functions cannot be used on constant strings.
307: Caveat: The identity of the delimiting character is lost.
308: Caveat: It doesn't work with multibyte strings unless all of the delimiter
309: characters are ASCII characters < 0x30.
310:
311: See also strtok_r(). */
312: #if @GNULIB_STRSEP@
313: # if ! @HAVE_STRSEP@
314: extern char *strsep (char **restrict __stringp, char const *restrict __delim);
315: # endif
316: # if defined GNULIB_POSIXCHECK
317: # undef strsep
318: # define strsep(s,d) \
319: (GL_LINK_WARNING ("strsep cannot work correctly on character strings " \
320: "in multibyte locales - " \
321: "use mbssep if you care about internationalization"), \
322: strsep (s, d))
323: # endif
324: #elif defined GNULIB_POSIXCHECK
325: # undef strsep
326: # define strsep(s,d) \
327: (GL_LINK_WARNING ("strsep is unportable - " \
328: "use gnulib module strsep for portability"), \
329: strsep (s, d))
330: #endif
331:
332: #if @GNULIB_STRSTR@
333: # if @REPLACE_STRSTR@
334: # define strstr rpl_strstr
335: char *strstr (const char *haystack, const char *needle)
336: __attribute__ ((__pure__));
337: # endif
338: #elif defined GNULIB_POSIXCHECK
339: /* strstr() does not work with multibyte strings if the locale encoding is
340: different from UTF-8:
341: POSIX says that it operates on "strings", and "string" in POSIX is defined
342: as a sequence of bytes, not of characters. */
343: # undef strstr
344: # define strstr(a,b) \
345: (GL_LINK_WARNING ("strstr is quadratic on many systems, and cannot " \
346: "work correctly on character strings in most " \
347: "multibyte locales - " \
348: "use mbsstr if you care about internationalization, " \
349: "or use strstr if you care about speed"), \
350: strstr (a, b))
351: #endif
352:
353: /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
354: comparison. */
355: #if @GNULIB_STRCASESTR@
356: # if @REPLACE_STRCASESTR@
357: # define strcasestr rpl_strcasestr
358: # endif
359: # if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@
360: extern char *strcasestr (const char *haystack, const char *needle)
361: __attribute__ ((__pure__));
362: # endif
363: #elif defined GNULIB_POSIXCHECK
364: /* strcasestr() does not work with multibyte strings:
365: It is a glibc extension, and glibc implements it only for unibyte
366: locales. */
367: # undef strcasestr
368: # define strcasestr(a,b) \
369: (GL_LINK_WARNING ("strcasestr does work correctly on character strings " \
370: "in multibyte locales - " \
371: "use mbscasestr if you care about " \
372: "internationalization, or use c-strcasestr if you want " \
373: "a locale independent function"), \
374: strcasestr (a, b))
375: #endif
376:
377: /* Parse S into tokens separated by characters in DELIM.
378: If S is NULL, the saved pointer in SAVE_PTR is used as
379: the next starting point. For example:
380: char s[] = "-abc-=-def";
381: char *sp;
382: x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def"
383: x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL
384: x = strtok_r(NULL, "=", &sp); // x = NULL
385: // s = "abc\0-def\0"
386:
387: This is a variant of strtok() that is multithread-safe.
388:
389: For the POSIX documentation for this function, see:
390: http://www.opengroup.org/susv3xsh/strtok.html
391:
392: Caveat: It modifies the original string.
393: Caveat: These functions cannot be used on constant strings.
394: Caveat: The identity of the delimiting character is lost.
395: Caveat: It doesn't work with multibyte strings unless all of the delimiter
396: characters are ASCII characters < 0x30.
397:
398: See also strsep(). */
399: #if @GNULIB_STRTOK_R@
400: # if ! @HAVE_DECL_STRTOK_R@
401: extern char *strtok_r (char *restrict s, char const *restrict delim,
402: char **restrict save_ptr);
403: # endif
404: # if defined GNULIB_POSIXCHECK
405: # undef strtok_r
406: # define strtok_r(s,d,p) \
407: (GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \
408: "in multibyte locales - " \
409: "use mbstok_r if you care about internationalization"), \
410: strtok_r (s, d, p))
411: # endif
412: #elif defined GNULIB_POSIXCHECK
413: # undef strtok_r
414: # define strtok_r(s,d,p) \
415: (GL_LINK_WARNING ("strtok_r is unportable - " \
416: "use gnulib module strtok_r for portability"), \
417: strtok_r (s, d, p))
418: #endif
419:
420:
421: /* The following functions are not specified by POSIX. They are gnulib
422: extensions. */
423:
424: #if @GNULIB_MBSLEN@
425: /* Return the number of multibyte characters in the character string STRING.
426: This considers multibyte characters, unlike strlen, which counts bytes. */
427: extern size_t mbslen (const char *string);
428: #endif
429:
430: #if @GNULIB_MBSNLEN@
431: /* Return the number of multibyte characters in the character string starting
432: at STRING and ending at STRING + LEN. */
433: extern size_t mbsnlen (const char *string, size_t len);
434: #endif
435:
436: #if @GNULIB_MBSCHR@
437: /* Locate the first single-byte character C in the character string STRING,
438: and return a pointer to it. Return NULL if C is not found in STRING.
439: Unlike strchr(), this function works correctly in multibyte locales with
440: encodings such as GB18030. */
441: # define mbschr rpl_mbschr /* avoid collision with HP-UX function */
442: extern char * mbschr (const char *string, int c);
443: #endif
444:
445: #if @GNULIB_MBSRCHR@
446: /* Locate the last single-byte character C in the character string STRING,
447: and return a pointer to it. Return NULL if C is not found in STRING.
448: Unlike strrchr(), this function works correctly in multibyte locales with
449: encodings such as GB18030. */
450: # define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */
451: extern char * mbsrchr (const char *string, int c);
452: #endif
453:
454: #if @GNULIB_MBSSTR@
455: /* Find the first occurrence of the character string NEEDLE in the character
456: string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK.
457: Unlike strstr(), this function works correctly in multibyte locales with
458: encodings different from UTF-8. */
459: extern char * mbsstr (const char *haystack, const char *needle);
460: #endif
461:
462: #if @GNULIB_MBSCASECMP@
463: /* Compare the character strings S1 and S2, ignoring case, returning less than,
464: equal to or greater than zero if S1 is lexicographically less than, equal to
465: or greater than S2.
466: Note: This function may, in multibyte locales, return 0 for strings of
467: different lengths!
468: Unlike strcasecmp(), this function works correctly in multibyte locales. */
469: extern int mbscasecmp (const char *s1, const char *s2);
470: #endif
471:
472: #if @GNULIB_MBSNCASECMP@
473: /* Compare the initial segment of the character string S1 consisting of at most
474: N characters with the initial segment of the character string S2 consisting
475: of at most N characters, ignoring case, returning less than, equal to or
476: greater than zero if the initial segment of S1 is lexicographically less
477: than, equal to or greater than the initial segment of S2.
478: Note: This function may, in multibyte locales, return 0 for initial segments
479: of different lengths!
480: Unlike strncasecmp(), this function works correctly in multibyte locales.
481: But beware that N is not a byte count but a character count! */
482: extern int mbsncasecmp (const char *s1, const char *s2, size_t n);
483: #endif
484:
485: #if @GNULIB_MBSPCASECMP@
486: /* Compare the initial segment of the character string STRING consisting of
487: at most mbslen (PREFIX) characters with the character string PREFIX,
488: ignoring case, returning less than, equal to or greater than zero if this
489: initial segment is lexicographically less than, equal to or greater than
490: PREFIX.
491: Note: This function may, in multibyte locales, return 0 if STRING is of
492: smaller length than PREFIX!
493: Unlike strncasecmp(), this function works correctly in multibyte
494: locales. */
495: extern char * mbspcasecmp (const char *string, const char *prefix);
496: #endif
497:
498: #if @GNULIB_MBSCASESTR@
499: /* Find the first occurrence of the character string NEEDLE in the character
500: string HAYSTACK, using case-insensitive comparison.
501: Note: This function may, in multibyte locales, return success even if
502: strlen (haystack) < strlen (needle) !
503: Unlike strcasestr(), this function works correctly in multibyte locales. */
504: extern char * mbscasestr (const char *haystack, const char *needle);
505: #endif
506:
507: #if @GNULIB_MBSCSPN@
508: /* Find the first occurrence in the character string STRING of any character
509: in the character string ACCEPT. Return the number of bytes from the
510: beginning of the string to this occurrence, or to the end of the string
511: if none exists.
512: Unlike strcspn(), this function works correctly in multibyte locales. */
513: extern size_t mbscspn (const char *string, const char *accept);
514: #endif
515:
516: #if @GNULIB_MBSPBRK@
517: /* Find the first occurrence in the character string STRING of any character
518: in the character string ACCEPT. Return the pointer to it, or NULL if none
519: exists.
520: Unlike strpbrk(), this function works correctly in multibyte locales. */
521: # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
522: extern char * mbspbrk (const char *string, const char *accept);
523: #endif
524:
525: #if @GNULIB_MBSSPN@
526: /* Find the first occurrence in the character string STRING of any character
527: not in the character string REJECT. Return the number of bytes from the
528: beginning of the string to this occurrence, or to the end of the string
529: if none exists.
530: Unlike strspn(), this function works correctly in multibyte locales. */
531: extern size_t mbsspn (const char *string, const char *reject);
532: #endif
533:
534: #if @GNULIB_MBSSEP@
535: /* Search the next delimiter (multibyte character listed in the character
536: string DELIM) starting at the character string *STRINGP.
537: If one is found, overwrite it with a NUL, and advance *STRINGP to point
538: to the next multibyte character after it. Otherwise, set *STRINGP to NULL.
539: If *STRINGP was already NULL, nothing happens.
540: Return the old value of *STRINGP.
541:
542: This is a variant of mbstok_r() that supports empty fields.
543:
544: Caveat: It modifies the original string.
545: Caveat: These functions cannot be used on constant strings.
546: Caveat: The identity of the delimiting character is lost.
547:
548: See also mbstok_r(). */
549: extern char * mbssep (char **stringp, const char *delim);
550: #endif
551:
552: #if @GNULIB_MBSTOK_R@
553: /* Parse the character string STRING into tokens separated by characters in
554: the character string DELIM.
555: If STRING is NULL, the saved pointer in SAVE_PTR is used as
556: the next starting point. For example:
557: char s[] = "-abc-=-def";
558: char *sp;
559: x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def"
560: x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL
561: x = mbstok_r(NULL, "=", &sp); // x = NULL
562: // s = "abc\0-def\0"
563:
564: Caveat: It modifies the original string.
565: Caveat: These functions cannot be used on constant strings.
566: Caveat: The identity of the delimiting character is lost.
567:
568: See also mbssep(). */
569: extern char * mbstok_r (char *string, const char *delim, char **save_ptr);
570: #endif
571:
572: /* Map any int, typically from errno, into an error message. */
573: #if @GNULIB_STRERROR@
574: # if @REPLACE_STRERROR@
575: # undef strerror
576: # define strerror rpl_strerror
577: extern char *strerror (int);
578: # endif
579: #elif defined GNULIB_POSIXCHECK
580: # undef strerror
581: # define strerror(e) \
582: (GL_LINK_WARNING ("strerror is unportable - " \
583: "use gnulib module strerror to guarantee non-NULL result"), \
584: strerror (e))
585: #endif
586:
587: #if @GNULIB_STRSIGNAL@
588: # if @REPLACE_STRSIGNAL@
589: # define strsignal rpl_strsignal
590: # endif
591: # if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@
592: extern char *strsignal (int __sig);
593: # endif
594: #elif defined GNULIB_POSIXCHECK
595: # undef strsignal
596: # define strsignal(a) \
597: (GL_LINK_WARNING ("strsignal is unportable - " \
598: "use gnulib module strsignal for portability"), \
599: strsignal (a))
600: #endif
601:
602: #if @GNULIB_STRVERSCMP@
603: # if !@HAVE_STRVERSCMP@
604: extern int strverscmp (const char *, const char *);
605: # endif
606: #elif defined GNULIB_POSIXCHECK
607: # undef strverscmp
608: # define strverscmp(a, b) \
609: (GL_LINK_WARNING ("strverscmp is unportable - " \
610: "use gnulib module strverscmp for portability"), \
611: strverscmp (a, b))
612: #endif
613:
614:
615: #ifdef __cplusplus
616: }
617: #endif
618:
619: #endif /* _GL_STRING_H */
620: #endif /* _GL_STRING_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>