X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fsiconv.c;h=42220e2cb67b2324eee368bc3e217c448e5a7b59;hp=d7f066d8fe21edc11be3cbac44eb3b7e37253e2b;hb=a6b61b9f8b6576e8159a4e7e6aee88bba7e5d07d;hpb=99eee17dbb3ef0d81d44b01d9072e3405f326595 diff --git a/src/siconv.c b/src/siconv.c index d7f066d..42220e2 100644 --- a/src/siconv.c +++ b/src/siconv.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2008 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /** @@ -20,25 +20,18 @@ #include #include #include -#include #if HAVE_ICONV_H #include #endif #include -#include +#include #include "iconv-p.h" struct yaz_iconv_struct { int my_errno; int init_flag; -#if 0 - size_t (*init_handle)(yaz_iconv_t cd, unsigned char *inbuf, - size_t inbytesleft, size_t *no_read); - unsigned long (*read_handle)(yaz_iconv_t cd, unsigned char *inbuf, - size_t inbytesleft, size_t *no_read); -#endif size_t no_read_x; unsigned long unget_x; #if HAVE_ICONV_H @@ -71,6 +64,8 @@ static int prepare_encoders(yaz_iconv_t cd, const char *tocode) return 1; if (yaz_wchar_encoder(tocode, &cd->encoder)) return 1; + if (yaz_danmarc_encoder(tocode, &cd->encoder)) + return 1; return 0; } @@ -92,12 +87,14 @@ static int prepare_decoders(yaz_iconv_t cd, const char *tocode) return 1; if (yaz_wchar_decoder(tocode, &cd->decoder)) return 1; + if (yaz_danmarc_decoder(tocode, &cd->decoder)) + return 1; return 0; } yaz_iconv_t yaz_iconv_open(const char *tocode, const char *fromcode) { - yaz_iconv_t cd = (yaz_iconv_t) xmalloc (sizeof(*cd)); + yaz_iconv_t cd = (yaz_iconv_t) xmalloc(sizeof(*cd)); cd->encoder.data = 0; cd->encoder.write_handle = 0; @@ -184,10 +181,10 @@ size_t yaz_iconv(yaz_iconv_t cd, char **inbuf, size_t *inbytesleft, if (cd->init_flag) { cd->my_errno = YAZ_ICONV_UNKNOWN; - + if (cd->encoder.init_handle) (*cd->encoder.init_handle)(&cd->encoder); - + cd->unget_x = 0; cd->no_read_x = 0; @@ -197,7 +194,7 @@ size_t yaz_iconv(yaz_iconv_t cd, char **inbuf, size_t *inbytesleft, size_t r = (cd->decoder.init_handle)( cd, &cd->decoder, inbuf ? (unsigned char *) *inbuf : 0, - inbytesleft ? *inbytesleft : 0, + inbytesleft ? *inbytesleft : 0, &no_read); if (r) { @@ -248,7 +245,7 @@ size_t yaz_iconv(yaz_iconv_t cd, char **inbuf, size_t *inbytesleft, break; } x = (*cd->decoder.read_handle)( - cd, &cd->decoder, + cd, &cd->decoder, (unsigned char *) *inbuf, *inbytesleft, &no_read); if (no_read == 0) { @@ -306,7 +303,9 @@ void yaz_iconv_set_errno(yaz_iconv_t cd, int no) /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +