Annotation of embedaddon/libiconv/srclib/wchar.in.h, revision 1.1.1.1

1.1       misho       1: /* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
                      2: 
                      3:    Copyright (C) 2007-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: /* Written by Eric Blake.  */
                     20: 
                     21: /*
                     22:  * ISO C 99 <wchar.h> for platforms that have issues.
                     23:  * <http://www.opengroup.org/susv3xbd/wchar.h.html>
                     24:  *
                     25:  * For now, this just ensures proper prerequisite inclusion order and
                     26:  * the declaration of wcwidth().
                     27:  */
                     28: 
                     29: #if __GNUC__ >= 3
                     30: @PRAGMA_SYSTEM_HEADER@
                     31: #endif
                     32: 
                     33: #if defined __need_mbstate_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
                     34: /* Special invocation convention:
                     35:    - Inside uClibc header files.
                     36:    - On HP-UX 11.00 we have a sequence of nested includes
                     37:      <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
                     38:      once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
                     39:      and once directly.  In both situations 'wint_t' is not yet defined,
                     40:      therefore we cannot provide the function overrides; instead include only
                     41:      the system's <wchar.h>.
                     42:    - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
                     43:      the latter includes <wchar.h>.  But here, we have no way to detect whether
                     44:      <wctype.h> is completely included or is still being included.  */
                     45: 
                     46: #@INCLUDE_NEXT@ @NEXT_WCHAR_H@
                     47: 
                     48: #else
                     49: /* Normal invocation convention.  */
                     50: 
                     51: #ifndef _GL_WCHAR_H
                     52: 
                     53: #define _GL_ALREADY_INCLUDING_WCHAR_H
                     54: 
                     55: /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
                     56:    <wchar.h>.
                     57:    BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
                     58:    included before <wchar.h>.  */
                     59: #include <stddef.h>
                     60: #include <stdio.h>
                     61: #include <time.h>
                     62: 
                     63: /* Include the original <wchar.h> if it exists.
                     64:    Some builds of uClibc lack it.  */
                     65: /* The include_next requires a split double-inclusion guard.  */
                     66: #if @HAVE_WCHAR_H@
                     67: # @INCLUDE_NEXT@ @NEXT_WCHAR_H@
                     68: #endif
                     69: 
                     70: #undef _GL_ALREADY_INCLUDING_WCHAR_H
                     71: 
                     72: #ifndef _GL_WCHAR_H
                     73: #define _GL_WCHAR_H
                     74: 
                     75: /* The definition of GL_LINK_WARNING is copied here.  */
                     76: 
                     77: #ifdef __cplusplus
                     78: extern "C" {
                     79: #endif
                     80: 
                     81: 
                     82: /* Define wint_t.  (Also done in wctype.in.h.)  */
                     83: #if !@HAVE_WINT_T@ && !defined wint_t
                     84: # define wint_t int
                     85: # ifndef WEOF
                     86: #  define WEOF -1
                     87: # endif
                     88: #endif
                     89: 
                     90: 
                     91: /* Override mbstate_t if it is too small.
                     92:    On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
                     93:    implementing mbrtowc for encodings like UTF-8.  */
                     94: #if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
                     95: typedef int rpl_mbstate_t;
                     96: # undef mbstate_t
                     97: # define mbstate_t rpl_mbstate_t
                     98: # define GNULIB_defined_mbstate_t 1
                     99: #endif
                    100: 
                    101: 
                    102: /* Convert a single-byte character to a wide character.  */
                    103: #if @GNULIB_BTOWC@
                    104: # if @REPLACE_BTOWC@
                    105: #  undef btowc
                    106: #  define btowc rpl_btowc
                    107: # endif
                    108: # if !@HAVE_BTOWC@ || @REPLACE_BTOWC@
                    109: extern wint_t btowc (int c);
                    110: # endif
                    111: #elif defined GNULIB_POSIXCHECK
                    112: # undef btowc
                    113: # define btowc(c) \
                    114:     (GL_LINK_WARNING ("btowc is unportable - " \
                    115:                       "use gnulib module btowc for portability"), \
                    116:      btowc (c))
                    117: #endif
                    118: 
                    119: 
                    120: /* Convert a wide character to a single-byte character.  */
                    121: #if @GNULIB_WCTOB@
                    122: # if @REPLACE_WCTOB@
                    123: #  undef wctob
                    124: #  define wctob rpl_wctob
                    125: # endif
                    126: # if (!defined wctob && !@HAVE_DECL_WCTOB@) || @REPLACE_WCTOB@
                    127: /* wctob is provided by gnulib, or wctob exists but is not declared.  */
                    128: extern int wctob (wint_t wc);
                    129: # endif
                    130: #elif defined GNULIB_POSIXCHECK
                    131: # undef wctob
                    132: # define wctob(w) \
                    133:     (GL_LINK_WARNING ("wctob is unportable - " \
                    134:                       "use gnulib module wctob for portability"), \
                    135:      wctob (w))
                    136: #endif
                    137: 
                    138: 
                    139: /* Test whether *PS is in the initial state.  */
                    140: #if @GNULIB_MBSINIT@
                    141: # if @REPLACE_MBSINIT@
                    142: #  undef mbsinit
                    143: #  define mbsinit rpl_mbsinit
                    144: # endif
                    145: # if !@HAVE_MBSINIT@ || @REPLACE_MBSINIT@
                    146: extern int mbsinit (const mbstate_t *ps);
                    147: # endif
                    148: #elif defined GNULIB_POSIXCHECK
                    149: # undef mbsinit
                    150: # define mbsinit(p) \
                    151:     (GL_LINK_WARNING ("mbsinit is unportable - " \
                    152:                       "use gnulib module mbsinit for portability"), \
                    153:      mbsinit (p))
                    154: #endif
                    155: 
                    156: 
                    157: /* Convert a multibyte character to a wide character.  */
                    158: #if @GNULIB_MBRTOWC@
                    159: # if @REPLACE_MBRTOWC@
                    160: #  undef mbrtowc
                    161: #  define mbrtowc rpl_mbrtowc
                    162: # endif
                    163: # if !@HAVE_MBRTOWC@ || @REPLACE_MBRTOWC@
                    164: extern size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);
                    165: # endif
                    166: #elif defined GNULIB_POSIXCHECK
                    167: # undef mbrtowc
                    168: # define mbrtowc(w,s,n,p) \
                    169:     (GL_LINK_WARNING ("mbrtowc is unportable - " \
                    170:                       "use gnulib module mbrtowc for portability"), \
                    171:      mbrtowc (w, s, n, p))
                    172: #endif
                    173: 
                    174: 
                    175: /* Recognize a multibyte character.  */
                    176: #if @GNULIB_MBRLEN@
                    177: # if @REPLACE_MBRLEN@
                    178: #  undef mbrlen
                    179: #  define mbrlen rpl_mbrlen
                    180: # endif
                    181: # if !@HAVE_MBRLEN@ || @REPLACE_MBRLEN@
                    182: extern size_t mbrlen (const char *s, size_t n, mbstate_t *ps);
                    183: # endif
                    184: #elif defined GNULIB_POSIXCHECK
                    185: # undef mbrlen
                    186: # define mbrlen(s,n,p) \
                    187:     (GL_LINK_WARNING ("mbrlen is unportable - " \
                    188:                       "use gnulib module mbrlen for portability"), \
                    189:      mbrlen (s, n, p))
                    190: #endif
                    191: 
                    192: 
                    193: /* Convert a string to a wide string.  */
                    194: #if @GNULIB_MBSRTOWCS@
                    195: # if @REPLACE_MBSRTOWCS@
                    196: #  undef mbsrtowcs
                    197: #  define mbsrtowcs rpl_mbsrtowcs
                    198: # endif
                    199: # if !@HAVE_MBSRTOWCS@ || @REPLACE_MBSRTOWCS@
                    200: extern size_t mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps);
                    201: # endif
                    202: #elif defined GNULIB_POSIXCHECK
                    203: # undef mbsrtowcs
                    204: # define mbsrtowcs(d,s,l,p) \
                    205:     (GL_LINK_WARNING ("mbsrtowcs is unportable - " \
                    206:                       "use gnulib module mbsrtowcs for portability"), \
                    207:      mbsrtowcs (d, s, l, p))
                    208: #endif
                    209: 
                    210: 
                    211: /* Convert a string to a wide string.  */
                    212: #if @GNULIB_MBSNRTOWCS@
                    213: # if @REPLACE_MBSNRTOWCS@
                    214: #  undef mbsnrtowcs
                    215: #  define mbsnrtowcs rpl_mbsnrtowcs
                    216: # endif
                    217: # if !@HAVE_MBSNRTOWCS@ || @REPLACE_MBSNRTOWCS@
                    218: extern size_t mbsnrtowcs (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps);
                    219: # endif
                    220: #elif defined GNULIB_POSIXCHECK
                    221: # undef mbsnrtowcs
                    222: # define mbsnrtowcs(d,s,n,l,p) \
                    223:     (GL_LINK_WARNING ("mbsnrtowcs is unportable - " \
                    224:                       "use gnulib module mbsnrtowcs for portability"), \
                    225:      mbsnrtowcs (d, s, n, l, p))
                    226: #endif
                    227: 
                    228: 
                    229: /* Convert a wide character to a multibyte character.  */
                    230: #if @GNULIB_WCRTOMB@
                    231: # if @REPLACE_WCRTOMB@
                    232: #  undef wcrtomb
                    233: #  define wcrtomb rpl_wcrtomb
                    234: # endif
                    235: # if !@HAVE_WCRTOMB@ || @REPLACE_WCRTOMB@
                    236: extern size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps);
                    237: # endif
                    238: #elif defined GNULIB_POSIXCHECK
                    239: # undef wcrtomb
                    240: # define wcrtomb(s,w,p) \
                    241:     (GL_LINK_WARNING ("wcrtomb is unportable - " \
                    242:                       "use gnulib module wcrtomb for portability"), \
                    243:      wcrtomb (s, w, p))
                    244: #endif
                    245: 
                    246: 
                    247: /* Convert a wide string to a string.  */
                    248: #if @GNULIB_WCSRTOMBS@
                    249: # if @REPLACE_WCSRTOMBS@
                    250: #  undef wcsrtombs
                    251: #  define wcsrtombs rpl_wcsrtombs
                    252: # endif
                    253: # if !@HAVE_WCSRTOMBS@ || @REPLACE_WCSRTOMBS@
                    254: extern size_t wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps);
                    255: # endif
                    256: #elif defined GNULIB_POSIXCHECK
                    257: # undef wcsrtombs
                    258: # define wcsrtombs(d,s,l,p) \
                    259:     (GL_LINK_WARNING ("wcsrtombs is unportable - " \
                    260:                       "use gnulib module wcsrtombs for portability"), \
                    261:      wcsrtombs (d, s, l, p))
                    262: #endif
                    263: 
                    264: 
                    265: /* Convert a wide string to a string.  */
                    266: #if @GNULIB_WCSNRTOMBS@
                    267: # if @REPLACE_WCSNRTOMBS@
                    268: #  undef wcsnrtombs
                    269: #  define wcsnrtombs rpl_wcsnrtombs
                    270: # endif
                    271: # if !@HAVE_WCSNRTOMBS@ || @REPLACE_WCSNRTOMBS@
                    272: extern size_t wcsnrtombs (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps);
                    273: # endif
                    274: #elif defined GNULIB_POSIXCHECK
                    275: # undef wcsnrtombs
                    276: # define wcsnrtombs(d,s,n,l,p) \
                    277:     (GL_LINK_WARNING ("wcsnrtombs is unportable - " \
                    278:                       "use gnulib module wcsnrtombs for portability"), \
                    279:      wcsnrtombs (d, s, n, l, p))
                    280: #endif
                    281: 
                    282: 
                    283: /* Return the number of screen columns needed for WC.  */
                    284: #if @GNULIB_WCWIDTH@
                    285: # if @REPLACE_WCWIDTH@
                    286: #  undef wcwidth
                    287: #  define wcwidth rpl_wcwidth
                    288: extern int wcwidth (wchar_t);
                    289: # else
                    290: #  if !defined wcwidth && !@HAVE_DECL_WCWIDTH@
                    291: /* wcwidth exists but is not declared.  */
                    292: extern int wcwidth (int /* actually wchar_t */);
                    293: #  endif
                    294: # endif
                    295: #elif defined GNULIB_POSIXCHECK
                    296: # undef wcwidth
                    297: # define wcwidth(w) \
                    298:     (GL_LINK_WARNING ("wcwidth is unportable - " \
                    299:                       "use gnulib module wcwidth for portability"), \
                    300:      wcwidth (w))
                    301: #endif
                    302: 
                    303: 
                    304: #ifdef __cplusplus
                    305: }
                    306: #endif
                    307: 
                    308: #endif /* _GL_WCHAR_H */
                    309: #endif /* _GL_WCHAR_H */
                    310: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>