(root)/
glibc-2.38/
iconvdata/
iso8859-1.c
       1  /* Conversion to and from ISO 8859-1.
       2     Copyright (C) 1997-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library 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 GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #include <dlfcn.h>
      20  #include <stdint.h>
      21  
      22  /* Definitions used in the body of the `gconv' function.  */
      23  #define CHARSET_NAME		"ISO-8859-1//"
      24  #define FROM_LOOP		from_iso8859_1
      25  #define TO_LOOP			to_iso8859_1
      26  #define DEFINE_INIT		1
      27  #define DEFINE_FINI		1
      28  #define MIN_NEEDED_FROM		1
      29  #define MIN_NEEDED_TO		4
      30  #define ONE_DIRECTION		0
      31  
      32  /* First define the conversion function from ISO 8859-1 to UCS4.  */
      33  #define MIN_NEEDED_INPUT	MIN_NEEDED_FROM
      34  #define MIN_NEEDED_OUTPUT	MIN_NEEDED_TO
      35  #define LOOPFCT			FROM_LOOP
      36  #define BODY \
      37    *((uint32_t *) outptr) = *inptr++;					      \
      38    outptr += sizeof (uint32_t);
      39  #define ONEBYTE_BODY \
      40    {									      \
      41      return c;								      \
      42    }
      43  #include <iconv/loop.c>
      44  
      45  
      46  /* Next, define the other direction.  */
      47  #define MIN_NEEDED_INPUT	MIN_NEEDED_TO
      48  #define MIN_NEEDED_OUTPUT	MIN_NEEDED_FROM
      49  #define LOOPFCT			TO_LOOP
      50  #define BODY \
      51    {									      \
      52      uint32_t ch = *((const uint32_t *) inptr);				      \
      53      if (__glibc_unlikely (ch > 0xff))					      \
      54        {									      \
      55  	UNICODE_TAG_HANDLER (ch, 4);					      \
      56  									      \
      57  	/* We have an illegal character.  */				      \
      58  	STANDARD_TO_LOOP_ERR_HANDLER (4);				      \
      59        }									      \
      60      else								      \
      61        *outptr++ = (unsigned char) ch;					      \
      62      inptr += 4;								      \
      63    }
      64  #define LOOP_NEED_FLAGS
      65  #include <iconv/loop.c>
      66  
      67  
      68  /* Now define the toplevel functions.  */
      69  #include <iconv/skeleton.c>