114 if (fromcode[0] ==
'@')
124 cd->iconv_cd = (iconv_t) (-1);
131 cd->iconv_cd = iconv_open(tocode, fromcode);
132 if (cd->iconv_cd == (iconv_t) (-1))
147 char **outbuf,
size_t *outbytesleft)
153 if (cd->iconv_cd != (iconv_t) (-1))
156 iconv(cd->iconv_cd, inbuf, inbytesleft, outbuf, outbytesleft);
157 if (r == (
size_t)(-1))
196 inbuf ? (
unsigned char *) *inbuf : 0,
197 inbytesleft ? *inbytesleft : 0,
207 *inbytesleft -= no_read;
214 if (!inbuf || !*inbuf)
216 if (outbuf && *outbuf)
220 cd->
unget_x, outbuf, outbytesleft);
223 outbuf, outbytesleft);
242 if (*inbytesleft == 0)
249 (
unsigned char *) *inbuf, *inbytesleft, &no_read);
259 x, outbuf, outbytesleft);
273 *inbytesleft -= no_read;
287 if (cd->iconv_cd != (iconv_t) (-1))
288 iconv_close(cd->iconv_cd);
yaz_iconv_encoder_t yaz_advancegreek_encoder(const char *name, yaz_iconv_encoder_t e)
yaz_iconv_decoder_t yaz_advancegreek_decoder(const char *name, yaz_iconv_decoder_t d)
int yaz_errno(void)
returns errno
Header for errno utilities.
Internal header for iconv.
yaz_iconv_encoder_t yaz_wchar_encoder(const char *name, yaz_iconv_encoder_t e)
yaz_iconv_decoder_t yaz_iso5426_decoder(const char *fromcode, yaz_iconv_decoder_t d)
yaz_iconv_decoder_t yaz_ucs4_decoder(const char *tocode, yaz_iconv_decoder_t d)
yaz_iconv_decoder_t yaz_danmarc_decoder(const char *fromcode, yaz_iconv_decoder_t d)
yaz_iconv_decoder_t yaz_iso_5428_decoder(const char *name, yaz_iconv_decoder_t d)
yaz_iconv_encoder_t yaz_danmarc_encoder(const char *name, yaz_iconv_encoder_t e)
yaz_iconv_decoder_t yaz_iso_8859_1_decoder(const char *fromcode, yaz_iconv_decoder_t d)
yaz_iconv_decoder_t yaz_marc8_decoder(const char *fromcode, yaz_iconv_decoder_t d)
yaz_iconv_encoder_t yaz_marc8_encoder(const char *name, yaz_iconv_encoder_t e)
yaz_iconv_encoder_t yaz_ucs4_encoder(const char *name, yaz_iconv_encoder_t e)
yaz_iconv_encoder_t yaz_utf8_encoder(const char *name, yaz_iconv_encoder_t e)
yaz_iconv_decoder_t yaz_utf8_decoder(const char *fromcode, yaz_iconv_decoder_t d)
yaz_iconv_decoder_t yaz_wchar_decoder(const char *fromcode, yaz_iconv_decoder_t d)
yaz_iconv_encoder_t yaz_iso_5428_encoder(const char *name, yaz_iconv_encoder_t e)
yaz_iconv_encoder_t yaz_iso_8859_1_encoder(const char *name, yaz_iconv_encoder_t e)
size_t yaz_iconv(yaz_iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
just like iconv(3)
int yaz_iconv_close(yaz_iconv_t cd)
just like iconv_close(3)
int yaz_iconv_isbuiltin(yaz_iconv_t cd)
tests whether conversion is handled by YAZ' iconv or system iconv
int yaz_iconv_error(yaz_iconv_t cd)
returns last error - like errno for iconv(3)
yaz_iconv_t yaz_iconv_open(const char *tocode, const char *fromcode)
just like iconv_open(3)
static int prepare_decoders(yaz_iconv_t cd, const char *tocode)
static int prepare_encoders(yaz_iconv_t cd, const char *tocode)
void yaz_iconv_set_errno(yaz_iconv_t cd, int no)
unsigned long(* read_handle)(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inbuf, size_t inbytesleft, size_t *no_read)
size_t(* init_handle)(yaz_iconv_t cd, yaz_iconv_decoder_t d, unsigned char *inbuf, size_t inbytesleft, size_t *no_read)
void(* destroy_handle)(yaz_iconv_decoder_t d)
void(* init_handle)(yaz_iconv_encoder_t e)
size_t(* write_handle)(yaz_iconv_t cd, yaz_iconv_encoder_t e, unsigned long x, char **outbuf, size_t *outbytesleft)
void(* destroy_handle)(yaz_iconv_encoder_t e)
size_t(* flush_handle)(yaz_iconv_t cd, yaz_iconv_encoder_t e, char **outbuf, size_t *outbytesleft)
struct yaz_iconv_decoder_s decoder
struct yaz_iconv_encoder_s encoder
Header for memory handling functions.
#define xfree(x)
utility macro which calls xfree_f
#define xmalloc(x)
utility macro which calls malloc_f
#define YAZ_ICONV_EILSEQ
error code: Invalid sequence
#define YAZ_ICONV_E2BIG
error code: Not sufficient room for output buffer
#define YAZ_ICONV_UNKNOWN
error code: unknown
#define YAZ_ICONV_EINVAL
error code: An incomplete multibyte sequence is in input buffer
struct yaz_iconv_struct * yaz_iconv_t
yaz_iconv handle (similar to iconv_t)