25 #define INVAL_BUFSIZE (32) 31 #define READ_BUFSIZE (8) 37 #define WRITE_BUFSIZE (8) 52 const uint8_t **source,
size_t *sourcelen,
53 uint8_t **dest,
size_t *destlen);
56 const uint8_t **source,
size_t *sourcelen,
57 uint8_t **dest,
size_t *destlen);
62 const uint8_t **source,
size_t *sourcelen,
63 uint8_t **dest,
size_t *destlen);
66 uint32_t ucs4, uint8_t **dest,
size_t *destlen);
162 const uint8_t **source,
size_t *sourcelen,
163 uint8_t **dest,
size_t *destlen)
179 pwrite[0], buf, &len);
182 if (*destlen < len) {
190 memcpy(*dest, buf, len);
201 while (*sourcelen > 0) {
207 while (towritelen > 0) {
212 towrite[0], buf, &len);
215 if (*destlen < len) {
223 for (len = 0; len < towritelen; len++)
234 memcpy(*dest, buf, len);
294 const uint8_t **source,
size_t *sourcelen,
295 uint8_t **dest,
size_t *destlen)
305 *((uint32_t *) (
void *) *dest) =
341 (
const uint8_t **) &in, &l, dest, destlen);
347 *source +=
max((
signed) (orig_l - l), 0);
348 *sourcelen -=
max((
signed) (orig_l - l), 0);
353 assert((orig_l + ol) - l != 0);
361 while (*sourcelen > 0) {
363 source, sourcelen, dest, destlen);
424 const uint8_t **source,
size_t *sourcelen,
425 uint8_t **dest,
size_t *destlen)
437 ucs4, dest, destlen);
453 memmove(c->
inval_buf, *source, *sourcelen);
457 *source += *sourcelen;
479 *source, *sourcelen, 0, &nextchar);
485 memmove(c->
inval_buf, *source, *sourcelen);
489 *source += *sourcelen;
500 0xFFFD, dest, destlen);
504 *sourcelen -= nextchar;
524 uint32_t ucs4, uint8_t **dest,
size_t *destlen)
Codec factory component definition.
uint32_t read_buf[READ_BUFSIZE]
Buffer for partial output sequences (decode) (host-endian)
static parserutils_error charset_utf16_codec_create(const char *charset, parserutils_charset_codec **codec)
Create a UTF-16 codec.
parserutils_charset_codec base
Base class.
struct charset_utf16_codec charset_utf16_codec
UTF-16 charset codec.
static bool charset_utf16_codec_handles_charset(const char *charset)
Determine whether this codec handles a specific charset.
parserutils_error(* destroy)(parserutils_charset_codec *codec)
static uint32_t endian_host_to_big(uint32_t host)
parserutils_error(* encode)(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
static parserutils_error charset_utf16_codec_decode(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Decode a chunk of UTF-16 data into UCS-4 (big endian)
static parserutils_error charset_utf16_codec_output_decoded_char(charset_utf16_codec *c, uint32_t ucs4, uint8_t **dest, size_t *destlen)
Output a UCS-4 character (big endian)
uint32_t write_buf[WRITE_BUFSIZE]
Buffer for partial output sequences (encode) (host-endian)
static parserutils_error charset_utf16_codec_read_char(charset_utf16_codec *c, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Read a character from the UTF-16 to UCS-4 (big endian)
parserutils_error parserutils_charset_utf16_next_paranoid(const uint8_t *s, uint32_t len, uint32_t off, uint32_t *nextoff)
Find next legal UTF-16 char in string.
parserutils_charset_codec_errormode errormode
error mode
size_t write_len
Character length of write_buf.
parserutils_error parserutils_charset_utf16_to_ucs4(const uint8_t *s, size_t len, uint32_t *ucs4, size_t *clen)
Convert a UTF-16 sequence into a single UCS-4 character.
static parserutils_error charset_utf16_codec_destroy(parserutils_charset_codec *codec)
Destroy a UTF-16 codec.
static parserutils_error charset_utf16_codec_encode(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Encode a chunk of UCS-4 (big endian) data into UTF-16.
UTF-16 manipulation functions (interface).
static uint32_t endian_big_to_host(uint32_t big)
const parserutils_charset_handler charset_utf16_codec_handler
struct parserutils_charset_codec::@3 handler
Vtable for handler code.
static parserutils_error charset_utf16_codec_reset(parserutils_charset_codec *codec)
Clear a UTF-16 codec's encoding state.
size_t read_len
Character length of read_buf.
parserutils_error parserutils_charset_utf16_from_ucs4(uint32_t ucs4, uint8_t *s, size_t *len)
Convert a single UCS-4 character into a UTF-16 sequence.
Abort processing if unrepresentable character encountered.
Core charset codec definition; implementations extend this.
parserutils_error(* reset)(parserutils_charset_codec *codec)
uint16_t parserutils_charset_mibenum_from_name(const char *alias, size_t len)
Retrieve the MIB enum value assigned to an encoding name.
parserutils_error(* decode)(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
uint8_t inval_buf[INVAL_BUFSIZE]
Buffer for fixing up incomplete input sequences.