13 #ifndef WITHOUT_ICONV_FILTER
25 #ifndef WITHOUT_ICONV_FILTER
32 uint32_t pivot_buf[64];
64 if (int_enc == NULL || filter == NULL)
71 #ifndef WITHOUT_ICONV_FILTER
74 int_enc, strlen(int_enc));
91 #ifdef WITHOUT_ICONV_FILTER
94 if (f->read_codec != NULL) {
119 #ifndef WITHOUT_ICONV_FILTER
120 if (input->
cd != (iconv_t) -1) {
121 iconv_close(input->
cd);
122 input->
cd = (iconv_t) -1;
125 if (input->read_codec != NULL) {
127 input->read_codec = NULL;
130 if (input->write_codec != NULL) {
132 input->write_codec = NULL;
155 if (input == NULL || params == NULL)
180 const uint8_t **data,
size_t *
len,
181 uint8_t **output,
size_t *outlen)
183 if (input == NULL || data == NULL || *data == NULL ||
len == NULL ||
184 output == NULL || *output == NULL || outlen == NULL)
187 #ifndef WITHOUT_ICONV_FILTER
188 if (iconv(input->
cd, (
void *) data,
len,
189 (
char **) output, outlen) == (
size_t) -1) {
210 ret = iconv(input->
cd, (
void *) data,
len,
211 (
char **) output, outlen);
212 if (ret != (
size_t) -1 || errno != EILSEQ)
236 if (input->leftover) {
244 (
const uint8_t **) &input->pivot_left,
253 input->pivot_left = NULL;
254 input->pivot_len = 0;
255 input->leftover =
false;
260 size_t pivot_len =
sizeof(input->pivot_buf);
261 uint8_t *pivot = (uint8_t *) input->pivot_buf;
265 (uint8_t **) &pivot, &pivot_len);
267 pivot = (uint8_t *) input->pivot_buf;
268 pivot_len =
sizeof(input->pivot_buf) - pivot_len;
273 (
const uint8_t **) &pivot,
278 input->leftover =
true;
279 input->pivot_left = pivot;
280 input->pivot_len = pivot_len;
308 #ifndef WITHOUT_ICONV_FILTER
309 iconv(input->
cd, NULL, 0, NULL, 0);
312 input->pivot_left = NULL;
313 input->pivot_len = 0;
314 input->leftover =
false;
343 #ifdef WITHOUT_ICONV_FILTER
344 input->read_codec = NULL;
345 input->write_codec = NULL;
369 if (input == NULL || enc == NULL)
380 #ifndef WITHOUT_ICONV_FILTER
381 if (input->
cd != (iconv_t) -1) {
382 iconv_close(input->
cd);
383 input->
cd = (iconv_t) -1;
386 input->
cd = iconv_open(
389 if (input->
cd == (iconv_t) -1) {
394 if (input->read_codec != NULL) {
396 input->read_codec = NULL;
parserutils_error parserutils_charset_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 data into a codec's charset.
parserutils_error parserutils_charset_codec_destroy(parserutils_charset_codec *codec)
Destroy a charset codec.
parserutils_error parserutils_charset_codec_decode(parserutils_charset_codec *codec, const uint8_t **source, size_t *sourcelen, uint8_t **dest, size_t *destlen)
Decode a chunk of data in a codec's charset into UCS-4.
parserutils_error parserutils_charset_codec_reset(parserutils_charset_codec *codec)
Clear a charset codec's encoding state.
parserutils_error parserutils_charset_codec_create(const char *charset, parserutils_charset_codec **codec)
Create a charset codec.
@ PARSERUTILS_BADENCODING
parserutils_error parserutils__filter_reset(parserutils_filter *input)
Reset an input filter's state.
parserutils_error parserutils__filter_process_chunk(parserutils_filter *input, const uint8_t **data, size_t *len, uint8_t **output, size_t *outlen)
Process a chunk of data.
parserutils_error parserutils__filter_create(const char *int_enc, parserutils_filter **filter)
Create an input filter.
parserutils_error parserutils__filter_destroy(parserutils_filter *input)
Destroy an input filter.
static parserutils_error filter_set_defaults(parserutils_filter *input)
Set an input filter's default settings.
static parserutils_error filter_set_encoding(parserutils_filter *input, const char *enc)
Set an input filter's encoding.
parserutils_error parserutils__filter_setopt(parserutils_filter *input, parserutils_filter_opttype type, parserutils_filter_optparams *params)
Configure an input filter.
parserutils_filter_opttype
Input filter option types.
@ PARSERUTILS_FILTER_SET_ENCODING
uint16_t parserutils_charset_mibenum_from_name(const char *alias, size_t len)
Retrieve the MIB enum value assigned to an encoding name.
const char * parserutils_charset_mibenum_to_name(uint16_t mibenum)
Retrieve the canonical name of an encoding from the MIB enum.
Core charset codec definition; implementations extend this.
struct parserutils_filter::@4 settings
Filter settings.
uint16_t encoding
Input encoding.
uint16_t int_enc
The internal encoding.
iconv_t cd
Iconv conversion descriptor.
Input filter option parameters.
const char * name
Encoding name.
struct parserutils_filter_optparams::@5 encoding
Parameters for encoding setting.