#include <errno.h>
#include <gconv.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <gconv_int.h>
#include <libroot/wchar_private.h>
#define BUILTIN_TRANSFORMATION(From, To, Cost, Name, Fct, BtowcFct, \
MinF, MaxF, MinT, MaxT) \
extern int Fct (struct __gconv_step *, struct __gconv_step_data *, \
__const unsigned char **, __const unsigned char *, \
unsigned char **, size_t *, int, int);
#include "gconv_builtin.h"
#define DEFINE_INIT 0
#define DEFINE_FINI 0
#define MIN_NEEDED_FROM 1
#define MIN_NEEDED_TO 4
#define FROM_DIRECTION 1
#define FROM_LOOP ascii_internal_loop
#define TO_LOOP ascii_internal_loop
#define FUNCTION_NAME __gconv_transform_ascii_internal
#define ONE_DIRECTION 1
#define MIN_NEEDED_INPUT MIN_NEEDED_FROM
#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO
#define LOOPFCT FROM_LOOP
#define BODY \
{ \
if (__builtin_expect(*inptr > '\x7f', 0)) { \
\
STANDARD_FROM_LOOP_ERR_HANDLER(1); \
} else { \
\
*((uint32_t*)outptr) = *inptr++; \
outptr += sizeof(uint32_t); \
} \
}
#define LOOP_NEED_FLAGS
#include <iconv/loop.c>
#include <iconv/skeleton.c>
#define DEFINE_INIT 0
#define DEFINE_FINI 0
#define MIN_NEEDED_FROM 4
#define MIN_NEEDED_TO 1
#define FROM_DIRECTION 1
#define FROM_LOOP internal_ascii_loop
#define TO_LOOP internal_ascii_loop
#define FUNCTION_NAME __gconv_transform_internal_ascii
#define ONE_DIRECTION 1
#define MIN_NEEDED_INPUT MIN_NEEDED_FROM
#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO
#define LOOPFCT FROM_LOOP
#define BODY \
{ \
if (__builtin_expect(*((const uint32_t*)inptr) > 0x7f, 0)) { \
UNICODE_TAG_HANDLER(*((const uint32_t*)inptr), 4); \
STANDARD_TO_LOOP_ERR_HANDLER(4); \
} else { \
\
*outptr++ = *((const uint32_t*)inptr); \
inptr += sizeof(uint32_t); \
} \
}
#define LOOP_NEED_FLAGS
#include <iconv/loop.c>
#include <iconv/skeleton.c>
#define DEFINE_INIT 0
#define DEFINE_FINI 0
#define MIN_NEEDED_FROM 1
#define MAX_NEEDED_FROM MB_LEN_MAX
#define MIN_NEEDED_TO 4
#define MAX_NEEDED_TO 4
#define FROM_DIRECTION 1
#define FROM_LOOP multibyte_wchar_loop
#define TO_LOOP multibyte_wchar_loop
#define FUNCTION_NAME __gconv_transform_multibyte_wchar
#define ONE_DIRECTION 1
#define MIN_NEEDED_INPUT MIN_NEEDED_FROM
#define MAX_NEEDED_INPUT MAX_NEEDED_FROM
#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO
#define MAX_NEEDED_OUTPUT MAX_NEEDED_TO
#define LOOPFCT FROM_LOOP
#define BODY \
{ \
size_t inLen = inend - inptr; \
mbstate_t *state = step_data->__statep; \
size_t result \
= __mbrtowc((wchar_t*)outptr, (const char*)inptr, inLen, state); \
if (result == (size_t)-1) { \
\
STANDARD_FROM_LOOP_ERR_HANDLER(1); \
} else if (result == (size_t)-2) { \
\
} else if (result == 0) { \
\
outptr += sizeof(wchar_t); \
++inptr; \
} else { \
\
inptr += result; \
outptr += sizeof(wchar_t); \
} \
}
#define LOOP_NEED_FLAGS
#include <iconv/loop.c>
#include <iconv/skeleton.c>
#define DEFINE_INIT 0
#define DEFINE_FINI 0
#define MIN_NEEDED_FROM 4
#define MAX_NEEDED_FROM 4
#define MIN_NEEDED_TO MB_LEN_MAX
#define MAX_NEEDED_TO MB_LEN_MAX
#define FROM_DIRECTION 1
#define FROM_LOOP wchar_multibyte_loop
#define TO_LOOP wchar_multibyte_loop
#define FUNCTION_NAME __gconv_transform_wchar_multibyte
#define ONE_DIRECTION 1
#define MIN_NEEDED_INPUT MIN_NEEDED_FROM
#define MAX_NEEDED_INPUT MAX_NEEDED_FROM
#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO
#define MAX_NEEDED_OUTPUT MAX_NEEDED_TO
#define LOOPFCT FROM_LOOP
#define BODY \
{ \
mbstate_t *state = step_data->__statep; \
size_t result = __wcrtomb((char*)outptr, *(wchar_t*)inptr, state); \
if (result == (size_t)-1) { \
\
STANDARD_TO_LOOP_ERR_HANDLER(sizeof(wchar_t)); \
} else if (result == 0) { \
\
inptr += sizeof(wchar_t); \
++outptr; \
} else { \
\
outptr += result; \
inptr += sizeof(wchar_t); \
} \
}
#define LOOP_NEED_FLAGS
#include <iconv/loop.c>
#include <iconv/skeleton.c>