jfclere     01/06/21 05:24:22

  Modified:    ces      _tbl_simple.c utf-16.c
               lib      iconv.c iconv.h iconv_ccs.c iconv_ces.c
                        iconv_ces_euc.c iconv_ces_iso2022.c iconv_int.c
                        iconv_uc.c
               util     iconv.c iconv_stream.c
  Log:
  Arrange the error codes. Return apr_status_t instead setting errno.
  
  Revision  Changes    Path
  1.4       +6 -8      apr-iconv/ces/_tbl_simple.c
  
  Index: _tbl_simple.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/ces/_tbl_simple.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- _tbl_simple.c     2001/04/04 17:28:54     1.3
  +++ _tbl_simple.c     2001/06/21 12:24:07     1.4
  @@ -35,8 +35,6 @@
   #define ICONV_INTERNAL
   #include "iconv.h"
   
  -#include <errno.h>
  -
   static int
   table_open(struct iconv_ces *ces, apr_pool_t *ctx)
   {
  @@ -118,23 +116,23 @@
        return res;
   }
   
  -static int
  +static apr_status_t
   table_load_ccs(struct iconv_module *mod, apr_pool_t *ctx)
   {
        struct iconv_module *ccsmod;
        int error;
   
        if (mod->im_args == NULL)
  -             return EINVAL;
  +             return APR_EINVAL;
        error = iconv_mod_load(mod->im_args, ICMOD_UC_CCS, NULL, &ccsmod, ctx);
        if (error)
                return error;
        ccsmod->im_next = mod->im_deplist;
        mod->im_deplist = ccsmod;
  -     return 0;
  +     return APR_SUCCESS;
   }
   
  -static int
  +static apr_status_t
   table_event(struct iconv_module *mod, int event, apr_pool_t *ctx)
   {
        switch (event) {
  @@ -144,9 +142,9 @@
            case ICMODEV_DYNDEPS:
                return table_load_ccs(mod,ctx);
            default:
  -             return EINVAL;
  +             return APR_EINVAL;
        }
  -     return 0;
  +     return APR_SUCCESS;
   }
   
   static const struct iconv_ces_desc iconv_ces_desc = {
  
  
  
  1.3       +0 -3      apr-iconv/ces/utf-16.c
  
  Index: utf-16.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/ces/utf-16.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- utf-16.c  2001/03/24 04:06:22     1.2
  +++ utf-16.c  2001/06/21 12:24:08     1.3
  @@ -30,9 +30,6 @@
    *   iconv (Charset Conversion Library) v1.0
    */
   
  -#include <errno.h>
  -#include <stdlib.h>  /* free, malloc */
  -
   #define ICONV_INTERNAL
   #include <iconv.h>
   
  
  
  
  1.4       +46 -33    apr-iconv/lib/iconv.c
  
  Index: iconv.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/lib/iconv.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- iconv.c   2001/04/04 17:28:56     1.3
  +++ iconv.c   2001/06/21 12:24:10     1.4
  @@ -32,7 +32,6 @@
   
   #ifndef HAVE_ICONV
   
  -#include <errno.h>   /* errno */
   #include <stdlib.h>  /* free, malloc */
   #include <string.h>
   
  @@ -45,65 +44,70 @@
        NULL
   };
   
  -size_t
  +/* 
  + * size_t *result is what the iconv() returns but it is cleaner to return
  + * a status.
  + * APR_EBADF:   cd is not valid.
  + * APR_BADARG: The ouput arguments are not valid.
  + */
  +
  +apr_status_t
   apr_iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft,
  -     char **outbuf, size_t *outbytesleft)
  +     char **outbuf, size_t *outbytesleft, size_t *result)
   {
        struct iconv_converter *icp = (struct iconv_converter *)cd;
  -     ssize_t res = -1;
   
        if (icp == NULL) {
  -             errno = EBADF;
  -             return (size_t)(-1);
  +             *result = (size_t) -1;
  +             return(APR_EBADF);
        }
        if (outbytesleft == NULL || *outbytesleft == 0 ||
            outbuf == NULL || *outbuf == 0) {
  -             errno = E2BIG;
  -             return (size_t)(-1);
  +             *result = (size_t) -1;
  +             return(APR_BADARG);
        }
  -     res = icp->ic_desc->icd_conv(icp->ic_data,
  +     return ( icp->ic_desc->icd_conv(icp->ic_data,
            (const unsigned char**)inbuf, inbytesleft,
  -         (unsigned char**)outbuf, outbytesleft);
  -     return (size_t)res;
  +         (unsigned char**)outbuf, outbytesleft, result));
   }
   
  -iconv_t
  -apr_iconv_open(const char *to, const char *from, apr_pool_t *ctx)
  +apr_status_t
  +apr_iconv_open(const char *to, const char *from, apr_pool_t *ctx, iconv_t 
*res)
   {
        struct iconv_converter_desc **idesc;
        struct iconv_converter *icp;
        void *data;
  -     int error;
  +     apr_status_t error;
   
  +     *res = (iconv_t)-1;
        icp = malloc(sizeof(*icp));
        if (icp == NULL)
  -             return (iconv_t)(-1);
  -     error = EINVAL;
  +             return (APR_ENOMEM);
  +     error = APR_EINVAL;
        for (idesc = converters; *idesc; idesc++) {
                error = (*idesc)->icd_open(to, from, &data, ctx);
  -             if (error == 0)
  +             if (error == APR_SUCCESS)
                        break;
        }
        if (error) {
                free(icp);
  -             errno = error;
  -             return (iconv_t)(-1);
  +             return (error);
        }
        icp->ic_desc = *idesc;
        icp->ic_data = data;
  -     return (iconv_t)icp;
  +     *res = icp;
  +     return(APR_SUCCESS);
   }
   
  -int
  +apr_status_t
   apr_iconv_close(iconv_t cd, apr_pool_t *ctx)
   {
        struct iconv_converter *icp = (struct iconv_converter *)cd;
        int error = 0;
   
  -     if (icp == NULL) {
  -             errno = EBADF;
  -             return -1;
  -     }
  +     if (icp == NULL)
  +             return(APR_EBADF);
  +
        if (icp->ic_desc)
                error = icp->ic_desc->icd_close(icp->ic_data, ctx);
                
  @@ -115,21 +119,30 @@
   
   #include <iconv.h>
   
  -iconv_t apr_iconv_open(const char *to_charset,
  -            const char *from_charset, apr_pool_t *ctx)
  +apr_status_t apr_iconv_open(const char *to_charset,
  +            const char *from_charset, apr_pool_t *ctx, iconv_t **res)
   {
  -     return (iconv_open(to_charset, from_charset));
  +     *res = iconv_open(to_charset, from_charset);
  +     if (*res == (size_t) -1)
  +             return apr_get_os_error();
  +     return APR_SUCCESS;
   }
   
  -size_t apr_iconv(iconv_t cd, const char **inbuf,
  +apr_status_t apr_iconv(iconv_t cd, const char **inbuf,
               size_t *inbytesleft, char **outbuf,
  -            size_t *outbytesleft)
  +            size_t *outbytesleft, size_t *result)
   {
  -     return (iconv(cd , inbuf, inbytesleft, outbuf, outbytesleft));
  +     *result = iconv(cd , inbuf, inbytesleft, outbuf, outbytesleft);
  +     if (*result == (size_t) -1)
  +             return apr_get_os_error();
  +     return APR_SUCCESS;
   }
  -int apr_iconv_close(iconv_t cd)
  +apr_status_t apr_iconv_close(iconv_t cd)
   {
  -     return (iconv_close(cd));
  +     int status;
  +     if (iconv_close(cd))
  +             return apr_get_os_error();
  +     return APR_SUCCESS;
   }
   
   #endif /* !defined(HAVE_ICONV) */
  
  
  
  1.8       +5 -9      apr-iconv/lib/iconv.h
  
  Index: iconv.h
  ===================================================================
  RCS file: /home/cvs/apr-iconv/lib/iconv.h,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- iconv.h   2001/05/22 07:42:27     1.7
  +++ iconv.h   2001/06/21 12:24:11     1.8
  @@ -38,10 +38,6 @@
   
   #include <stddef.h>
   
  -/* To be processed by configure */
  -#define APR_ICONV_EFTYPE -1234
  -/* To be processed by configure */
  -
   /* apr additions */
   #define issetugid() 0
   /* apr additions */
  @@ -53,9 +49,9 @@
   
   /* __BEGIN_DECLS */
   
  -iconv_t      apr_iconv_open(const char *, const char *, apr_pool_t *);
  -apr_size_t   apr_iconv(iconv_t, const char **, apr_size_t *, char **, 
apr_size_t *);
  -int  apr_iconv_close(iconv_t, apr_pool_t *);
  +apr_status_t apr_iconv_open(const char *, const char *, apr_pool_t *, 
iconv_t *);
  +apr_status_t apr_iconv(iconv_t, const char **, apr_size_t *, char **, 
apr_size_t *, size_t *);
  +apr_status_t apr_iconv_close(iconv_t, apr_pool_t *);
   
   /* __END_DECLS */
   
  @@ -126,8 +122,8 @@
    */
   typedef int iconv_open_t(const char *, const char *, void **, apr_pool_t *);
   typedef int iconv_close_t(void *, apr_pool_t *);
  -typedef apr_size_t iconv_conv_t(void *, const unsigned char **, apr_size_t *,
  -     unsigned char **, apr_size_t *);
  +typedef apr_status_t iconv_conv_t(void *, const unsigned char **, apr_size_t 
*,
  +     unsigned char **, apr_size_t *, apr_size_t *);
   
   struct iconv_converter_desc {
        iconv_open_t *  icd_open;
  
  
  
  1.4       +4 -8      apr-iconv/lib/iconv_ccs.c
  
  Index: iconv_ccs.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/lib/iconv_ccs.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- iconv_ccs.c       2001/04/04 17:28:57     1.3
  +++ iconv_ccs.c       2001/06/21 12:24:11     1.4
  @@ -30,14 +30,10 @@
    *   iconv (Charset Conversion Library) v1.0
    */
   
  -#include <errno.h>   /* errno */
  -#include <stdlib.h>  /* free, malloc */
  -#include <string.h>
  -
   #define ICONV_INTERNAL
   #include "iconv.h"   /* iconv_ccs_desc, iconv_ccs_module */
   
  -int
  +apr_status_t
   iconv_ccs_event(struct iconv_module *mod, int event)
   {
   /*   struct iconv_ccs_desc *desc =
  @@ -46,14 +42,14 @@
        switch (event) {
            case ICMODEV_LOAD:
                if (mod->im_deplist == NULL)
  -                     return EINVAL;
  +                     return APR_EINVAL;
                mod->im_methods = mod->im_deplist->im_desc->imd_data;
                mod->im_data = mod->im_desc->imd_data;
                break;
            case ICMODEV_UNLOAD:
                break;
            default:
  -             return EINVAL;
  +             return APR_EINVAL;
        }
  -     return 0;
  +     return APR_SUCCESS;
   }
  
  
  
  1.5       +8 -9      apr-iconv/lib/iconv_ces.c
  
  Index: iconv_ces.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/lib/iconv_ces.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- iconv_ces.c       2001/05/17 12:32:21     1.4
  +++ iconv_ces.c       2001/06/21 12:24:12     1.5
  @@ -30,7 +30,6 @@
    *   iconv (Charset Conversion Library) v1.0
    */
   
  -#include <errno.h>   /* errno */
   #include <limits.h>  /* PATH_MAX */
   #include <stdlib.h>  /* free, malloc */
   #include <string.h>
  @@ -38,35 +37,35 @@
   #define ICONV_INTERNAL
   #include "iconv.h"   /* iconv_ccs_desc, iconv_ccs */
   
  -int
  +apr_status_t
   iconv_ces_open(const char *cesname, struct iconv_ces **cespp, apr_pool_t 
*ctx)
   {
        struct iconv_module *mod;
        struct iconv_ces *ces;
  -     int error;
  +     apr_status_t error;
   
        error = iconv_mod_load(cesname, ICMOD_UC_CES, NULL, &mod, ctx);
  -     if (error == APR_ICONV_EFTYPE)
  +     if (APR_STATUS_IS_EFTYPE(error))
                error = iconv_mod_load("_tbl_simple", ICMOD_UC_CES, cesname, 
&mod, ctx);
  -     if (error)
  -             return (error == APR_ICONV_EFTYPE) ? EINVAL : error;
  +     if (error != APR_SUCCESS)
  +             return (APR_STATUS_IS_EFTYPE(error)) ? APR_EINVAL : error;
        ces = malloc(sizeof(*ces));
        if (ces == NULL) {
                iconv_mod_unload(mod, ctx);
  -             return ENOMEM;
  +             return APR_ENOMEM;
        }
        memset(ces,0, sizeof(*ces));
        ces->desc = (struct iconv_ces_desc*)mod->im_desc->imd_data;
        ces->data = mod->im_data;
        ces->mod = mod;
        error = ICONV_CES_OPEN(ces,ctx);
  -     if (error) {
  +     if (error != APR_SUCCESS) {
                free(ces);
                iconv_mod_unload(mod, ctx);
                return error;
        }
        *cespp = ces;
  -     return 0;
  +     return APR_SUCCESS;
   }
   
   int
  
  
  
  1.4       +5 -6      apr-iconv/lib/iconv_ces_euc.c
  
  Index: iconv_ces_euc.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/lib/iconv_ces_euc.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- iconv_ces_euc.c   2001/04/04 17:28:57     1.3
  +++ iconv_ces_euc.c   2001/06/21 12:24:12     1.4
  @@ -30,7 +30,6 @@
    *   iconv (Charset Conversion Library) v1.0
    */
   
  -#include <errno.h>
   #include <stdlib.h>  /* free, malloc */
   #include <string.h>
   
  @@ -46,7 +45,7 @@
        const struct iconv_module *ccs[1];
   } iconv_ces_euc_state_t;
   
  -int
  +apr_status_t
   iconv_euc_open(struct iconv_ces *ces, apr_pool_t *ctx)
   {
        struct iconv_module *depmod = ces->mod->im_deplist;
  @@ -58,20 +57,20 @@
            sizeof(struct iconv_module *) * (ces->mod->im_depcnt - 1);
        state = (iconv_ces_euc_state_t *)malloc(stsz);
        if (state == NULL)
  -             return errno;
  +             return APR_ENOMEM;
        memset(state, 0, stsz);
        state->nccs = ces->mod->im_depcnt;
        for (i = ces->mod->im_depcnt; i; i--, depmod = depmod->im_next)
                state->ccs[i - 1] = depmod;
        CESTOSTATE(ces) = state;
  -     return 0;
  +     return APR_SUCCESS;
   }
   
  -int
  +apr_status_t
   iconv_euc_close(struct iconv_ces *ces)
   {
        free(CESTOSTATE(ces));
  -     return 0;
  +     return APR_SUCCESS;
   }
   
   #define is_7_14bit(data) ((data)->nbits & 7)
  
  
  
  1.4       +3 -4      apr-iconv/lib/iconv_ces_iso2022.c
  
  Index: iconv_ces_iso2022.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/lib/iconv_ces_iso2022.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- iconv_ces_iso2022.c       2001/04/04 17:28:58     1.3
  +++ iconv_ces_iso2022.c       2001/06/21 12:24:13     1.4
  @@ -30,7 +30,6 @@
    *   iconv (Charset Conversion Library) v1.0
    */
   
  -#include <errno.h>
   #include <stdlib.h>  /* free, malloc */
   #include <string.h>  /* memset, memcmp, memcpy */
   
  @@ -67,7 +66,7 @@
        const struct iconv_module *ccsmod[1];
   } iconv_ces_iso2022_state_t;
   
  -int
  +apr_status_t
   iconv_iso2022_open(struct iconv_ces *ces, apr_pool_t *ctx)
   {
        const iconv_ces_iso2022_ccs_t *ccsattr;
  @@ -82,7 +81,7 @@
            sizeof(struct iconv_module *) * (ces->mod->im_depcnt - 1);
        state = (iconv_ces_iso2022_state_t *)malloc(stsz + shiftsz);
        if (state == NULL)
  -             return errno;
  +             return APR_ENOMEM;
        memset(state, 0, stsz + shiftsz);
        ces->data = state;
        state->shift_tab = (int*)((char*)state + stsz);
  @@ -99,7 +98,7 @@
                if (ccsattr->shift >= 0)
                        
state->prefix[(int)(iso_shift[ccsattr->shift].sequence[0])] = 1;
        }
  -     return 0;
  +     return APR_SUCCESS;
   }
   
   int
  
  
  
  1.4       +3 -4      apr-iconv/lib/iconv_int.c
  
  Index: iconv_int.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/lib/iconv_int.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- iconv_int.c       2001/04/04 17:28:58     1.3
  +++ iconv_int.c       2001/06/21 12:24:13     1.4
  @@ -31,7 +31,6 @@
    */
   
   #include <ctype.h>   /* tolower */
  -#include <errno.h>   /* errno */
   #include <stdio.h>   /* snprintf */
   #include <stdlib.h>
   #include <string.h>  /* strdup, strlen */
  @@ -39,16 +38,16 @@
   #define ICONV_INTERNAL
   #include "iconv.h"
   
  -int
  +apr_status_t
   iconv_malloc(size_t size, void **pp)
   {
        void *p = malloc(size);
   
        if (p == NULL)
  -             return errno;
  +             return APR_ENOMEM;
        memset(p, 0, size);
        *pp = p;
  -     return 0;
  +     return APR_SUCCESS;
   }
   
   #ifdef ICONV_DEBUG
  
  
  
  1.4       +29 -28    apr-iconv/lib/iconv_uc.c
  
  Index: iconv_uc.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/lib/iconv_uc.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- iconv_uc.c        2001/04/04 17:28:59     1.3
  +++ iconv_uc.c        2001/06/21 12:24:14     1.4
  @@ -1,7 +1,6 @@
   #define ICONV_INTERNAL
   #include "iconv.h"
   
  -#include <errno.h>
   #include <stdlib.h>
   #include <string.h>
   
  @@ -22,7 +21,10 @@
        iconv_uc_conv
   };
   
  -int
  +/*
  + * It is call by apr_iconv_open: (*idesc)->icd_open()
  + */
  +apr_status_t
   iconv_uc_open(const char *to, const char *from, void **data, apr_pool_t *ctx)
   {
        struct iconv_uc *ic;
  @@ -30,78 +32,78 @@
   
        ic = malloc(sizeof(*ic));
        if (ic == NULL)
  -             return ENOMEM;
  +             return APR_ENOMEM;
        memset(ic, 0, sizeof(*ic));
        error = iconv_ces_open(from, &ic->from, ctx);
  -     if (error)
  +     if (error!=APR_SUCCESS) {
                goto bad;
  +     }
        error = iconv_ces_open(to, &ic->to, ctx);
  -     if (error)
  +     if (error!=APR_SUCCESS) {
                goto bad;
  +     }
        ic->ignore_ilseq = 0;
        ic->missing = '_';
        *data = (void*)ic;
  -     return 0;
  +     return APR_SUCCESS;
   bad:
        iconv_uc_close(ic,ctx);
        return error;
   }
   
  -int
  +apr_status_t
   iconv_uc_close(void *data, apr_pool_t *ctx)
   {
        struct iconv_uc *ic = (struct iconv_uc *)data;
   
        if (ic == NULL)
  -             return EBADF;
  +             return APR_EBADF;
        if (ic->from)
                iconv_ces_close(ic->from, ctx);
        if (ic->to)
                iconv_ces_close(ic->to, ctx);
        free(ic);
  -     return 0;
  +     return APR_SUCCESS;
   }
   
  -size_t
  +apr_status_t
   iconv_uc_conv(void *data, const unsigned char **inbuf, size_t *inbytesleft,
  -     unsigned char **outbuf, size_t *outbytesleft)
  +     unsigned char **outbuf, size_t *outbytesleft, size_t *res)
   {
        struct iconv_uc *ic = (struct iconv_uc *)data;
        const unsigned char *ptr;
        ucs_t ch;
           ssize_t size;
  -     size_t res = 0;
   
  +     *res = (size_t)(0);
        if (data == NULL) {
  -             errno = EBADF;
  -             return (size_t)(-1);
  +             *res = (size_t) -1;
  +             return APR_EBADF;
        }
  +
        if (inbuf == NULL || *inbuf == NULL) {
                if (ICONV_CES_CONVERT_FROM_UCS(ic->to, UCS_CHAR_NONE,
                    outbuf, outbytesleft) <= 0) {
  -                     errno = E2BIG;
  -                     return (size_t)(-1);
  +                     *res = (size_t) -1;
  +                     return APR_BADARG; /* too big */
                }
                ICONV_CES_RESET(ic->from);
                ICONV_CES_RESET(ic->to);
  -             return res;
  +             return APR_SUCCESS;
        }
        if (inbytesleft == NULL || *inbytesleft == 0)
  -             return 0;
  +             return APR_SUCCESS;
        while (*inbytesleft > 0 && *outbytesleft > 0) {
                ptr = *inbuf;
                ch = ICONV_CES_CONVERT_TO_UCS(ic->from, inbuf, inbytesleft);
  -             if (ch == UCS_CHAR_NONE) {
  -                     errno = EINVAL;
  -                     return res;
  -             }
  +             if (ch == UCS_CHAR_NONE)
  +                     return APR_EINVAL;
                if (ch == UCS_CHAR_INVALID) { /* Invalid character in source 
buffer */
                        if (ic->ignore_ilseq)
                                continue;
                        *inbytesleft += *inbuf - ptr;
                        *inbuf = ptr;
  -                     errno = EILSEQ;
  -                     return res;
  +                     return APR_BADCH; /* eilseq invalid */
                }
                size = ICONV_CES_CONVERT_FROM_UCS(ic->to, ch,
                    outbuf, outbytesleft);
  @@ -109,16 +111,15 @@
                        size = ICONV_CES_CONVERT_FROM_UCS(ic->to, ic->missing,
                            outbuf, outbytesleft);
                        if (size)
  -                             res ++;
  +                             *res ++;
                }
                if (!size) {             /* No space to write to */
                        *inbytesleft += *inbuf - ptr;
                        *inbuf = ptr; 
  -                     errno = E2BIG;
  -                     return res;
  +                     return APR_BADARG; /* too big */
                }
        }
  -     return res;
  +     return APR_SUCCESS;
   }
   
   #if 0
  
  
  
  1.4       +3 -2      apr-iconv/util/iconv.c
  
  Index: iconv.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/util/iconv.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- iconv.c   2001/04/04 17:29:02     1.3
  +++ iconv.c   2001/06/21 12:24:19     1.4
  @@ -86,6 +86,7 @@
        char *from = NULL, *to = NULL, *input = NULL;
        int opt;
        apr_pool_t *ctx; 
  +     apr_status_t status;
   
        while ((opt = getopt(argc, argv, "f:s:t:")) > 0) {
                switch (opt) {
  @@ -117,8 +118,8 @@
        }
   
        /* Use it */
  -     cd = apr_iconv_open(to, from,ctx);
  -     if ((int)cd < 0) {
  +     status = apr_iconv_open(to, from,ctx, &cd);
  +     if (status) {
                fprintf(stderr, "unable to open specified convertor\n");
                exit(6);
                }
  
  
  
  1.3       +3 -1      apr-iconv/util/iconv_stream.c
  
  Index: iconv_stream.c
  ===================================================================
  RCS file: /home/cvs/apr-iconv/util/iconv_stream.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- iconv_stream.c    2001/03/30 17:21:06     1.2
  +++ iconv_stream.c    2001/06/21 12:24:19     1.3
  @@ -70,9 +70,11 @@
       char *outbuf = buffer;
       const char *inbuf = buf;
       size_t chars;
  +    apr_status_t status;
  +
       if (!buf)
           insize = 0;
  -    chars = apr_iconv(stream->cd, (const char **)&buf, &insize, &outbuf, 
&outsize);
  +    status = apr_iconv(stream->cd, (const char **)&buf, &insize, &outbuf, 
&outsize, &chars);
       if ((int)chars < 0)
           return -1;
       stream->chars += chars;
  
  
  

Reply via email to