Minor refactor in tcpip code
[yaz-moved-to-github.git] / src / siconv.c
index 36dc4b2..42220e2 100644 (file)
@@ -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.
  */
 /**
 #include <assert.h>
 #include <errno.h>
 #include <string.h>
-#include <ctype.h>
 
 #if HAVE_ICONV_H
 #include <iconv.h>
 #endif
 
 #include <yaz/xmalloc.h>
-#include <yaz/nmem.h>
+#include <yaz/errno.h>
 #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;
 }
 
@@ -78,6 +73,8 @@ static int prepare_decoders(yaz_iconv_t cd, const char *tocode)
 {
     if (yaz_marc8_decoder(tocode, &cd->decoder))
         return 1;
+    if (yaz_iso5426_decoder(tocode, &cd->decoder))
+        return 1;
     if (yaz_utf8_decoder(tocode, &cd->decoder))
         return 1;
     if (yaz_ucs4_decoder(tocode, &cd->decoder))
@@ -90,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;
@@ -182,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;
 
@@ -195,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)
             {
@@ -246,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)
             {
@@ -304,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
  */
+