File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / srclib / wchar.in.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:57:48 2012 UTC (12 years, 4 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_13_1, HEAD
libiconv

    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>