X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ficonv_encode_wchar.c;h=191a907ecdbb9930bb8e4fe6465ae8a76947d402;hp=cf0a5f6e4b62c7c8137ce92fc8031eedf10d08a0;hb=9c32d63a1113f58ceb168e8321f1e360b2006e3b;hpb=ee6ab2ee3a9ee1a8c65d7272ec7fba1d886f5af0 diff --git a/src/iconv_encode_wchar.c b/src/iconv_encode_wchar.c index cf0a5f6..191a907 100644 --- a/src/iconv_encode_wchar.c +++ b/src/iconv_encode_wchar.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. */ /** @@ -14,14 +14,11 @@ #include #include #include -#include #if HAVE_WCHAR_H #include #endif #include -#include -#include #include "iconv-p.h" struct encoder_data @@ -55,7 +52,7 @@ static size_t write_wchar_t(yaz_iconv_t cd, yaz_iconv_encoder_t en, yaz_iconv_encoder_t yaz_wchar_encoder(const char *tocode, yaz_iconv_encoder_t e) - + { #if HAVE_WCHAR_H if (!yaz_matchstr(tocode, "wchar_t")) @@ -67,11 +64,50 @@ yaz_iconv_encoder_t yaz_wchar_encoder(const char *tocode, return 0; } +#if HAVE_WCHAR_H +static unsigned long read_wchar_t(yaz_iconv_t cd, yaz_iconv_decoder_t d, + unsigned char *inp, + size_t inbytesleft, size_t *no_read) +{ + unsigned long x = 0; + + if (inbytesleft < sizeof(wchar_t)) + { + yaz_iconv_set_errno(cd, YAZ_ICONV_EINVAL); /* incomplete input */ + *no_read = 0; + } + else + { + wchar_t wch; + memcpy(&wch, inp, sizeof(wch)); + x = wch; + *no_read = sizeof(wch); + } + return x; +} +#endif + +yaz_iconv_decoder_t yaz_wchar_decoder(const char *fromcode, + yaz_iconv_decoder_t d) + +{ +#if HAVE_WCHAR_H + if (!yaz_matchstr(fromcode, "wchar_t")) + { + d->read_handle = read_wchar_t; + return d; + } +#endif + return 0; +} + /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +