(linenum→info "unix/slp.c:2238")

glibc/2.7/iconvdata/8bit-generic.c

    1: /* Generic conversion to and from 8bit charsets.
    2:    Copyright (C) 1997-1999, 2000-2002 Free Software Foundation, Inc.
    3:    This file is part of the GNU C Library.
    4:    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
    5: 
    6:    The GNU C Library is free software; you can redistribute it and/or
    7:    modify it under the terms of the GNU Lesser General Public
    8:    License as published by the Free Software Foundation; either
    9:    version 2.1 of the License, or (at your option) any later version.
   10: 
   11:    The GNU C Library 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 GNU
   14:    Lesser General Public License for more details.
   15: 
   16:    You should have received a copy of the GNU Lesser General Public
   17:    License along with the GNU C Library; if not, write to the Free
   18:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   19:    02111-1307 USA.  */
   20: 
   21: #include <dlfcn.h>
   22: 
   23: #define FROM_LOOP               from_generic
   24: #define TO_LOOP                 to_generic
   25: #define DEFINE_INIT             1
   26: #define DEFINE_FINI             1
   27: #define MIN_NEEDED_FROM         1
   28: #define MIN_NEEDED_TO           4
   29: 
   30: 
   31: /* First define the conversion function from the 8bit charset to UCS4.  */
   32: #define MIN_NEEDED_INPUT        MIN_NEEDED_FROM
   33: #define MIN_NEEDED_OUTPUT       MIN_NEEDED_TO
   34: #define LOOPFCT                 FROM_LOOP
   35: #define BODY \
   36:   {                                                                           \
   37:     uint32_t ch = to_ucs4[*inptr];                                            \
   38:                                                                               \
   39:     if (HAS_HOLES && __builtin_expect (ch == L'\0', 0) && *inptr != '\0')     \
   40:       {                                                                       \
   41:         /* This is an illegal character.  */                                 \
   42:         STANDARD_FROM_LOOP_ERR_HANDLER (1);                                  \
   43:       }                                                                       \
   44:                                                                               \
   45:     put32 (outptr, ch);                                                       \
   46:     outptr += 4;                                                              \
   47:     ++inptr;                                                                  \
   48:   }
   49: #define LOOP_NEED_FLAGS
   50: #define ONEBYTE_BODY \
   51:   {                                                                           \
   52:     uint32_t ch = to_ucs4[c];                                                 \
   53:                                                                               \
   54:     if (HAS_HOLES && __builtin_expect (ch == L'\0', 0) && c != '\0')          \
   55:       return WEOF;                                                            \
   56:     else                                                                      \
   57:       return ch;                                                              \
   58:   }
   59: #include <iconv/loop.c>
   60: 
   61: 
   62: /* Next, define the other direction.  */
   63: #define MIN_NEEDED_INPUT        MIN_NEEDED_TO
   64: #define MIN_NEEDED_OUTPUT       MIN_NEEDED_FROM
   65: #define LOOPFCT                 TO_LOOP
   66: #define BODY \
   67:   {                                                                           \
   68:     uint32_t ch = get32 (inptr);                                              \
   69:                                                                               \
   70:     if (__builtin_expect (ch >= sizeof (from_ucs4) / sizeof (from_ucs4[0]), 0)\
   71:         || (__builtin_expect (from_ucs4[ch], '\1') == '\0' && ch != 0))              \
   72:       {                                                                       \
   73:         UNICODE_TAG_HANDLER (ch, 4);                                         \
   74:                                                                               \
   75:         /* This is an illegal character.  */                                 \
   76:         STANDARD_TO_LOOP_ERR_HANDLER (4);                                    \
   77:       }                                                                       \
   78:                                                                               \
   79:     *outptr++ = from_ucs4[ch];                                                \
   80:     inptr += 4;                                                               \
   81:   }
   82: #define LOOP_NEED_FLAGS
   83: #include <iconv/loop.c>
   84: 
   85: 
   86: /* Now define the toplevel functions.  */
   87: #include <iconv/skeleton.c>
Syntax (Markdown)