httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Trawick <trawi...@bellsouth.net>
Subject Re: [PATCH] 2nd draft of APR wrapper for iconv
Date Wed, 19 Apr 2000 21:05:52 GMT
> > There are two related symbols externalized by apr_xlate.h and apr.h:
> > 
> > 1) APR_HAS_ICONV
> > 
> >    This tells whether or not the platform has iconv().  Hopefully
> >    applications don't give a hoot.  It was needed in apr_xlate.h so it
> >    is prefixed with "APR_HAS" so it doesn't mess anybody up.  It
> >    wasn't intended to be a check for whether or not ap_xlate_open() is
> >    implemented.  Applications will be in trouble in the future if they
> >    interpret this to mean "APR implements ap_xlate_open() et al."
> 
> I am confused about why this is needed.  The APR_HAS_ICONV macro makes
> sense if APR is implemting ap_iconv, with the name change, this becomes a
> bad macro name IMO.
> 
> I dislike having two macros, one of which is definately not
> portable.

APR_HAS_ICONV is no more or less portable than APR_HAS_FORK.  

If you prefer, I will* change APR_HAS_ICONV back to HAVE_ICONV
(something that is not exported via apr.h) and I will define
APR_HAS_XLATE to 1 or 0 at configure time and have APR_HAS_XLATE
exported via apr.h.  Does that satisfy your concern?  Do I need to do
this before I commit?

*to be honest, I haven't tried this out but I think it is pretty
simple and don't expect any surprises

> Perhaps if you could re-post the entire patch again so that we can see
> why we need this macro.

Here is the header file again, with cp changed to xlate and some more
comments. 

/* ====================================================================
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 2000 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "Apache" and "Apache Software Foundation" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written
 *    permission, please contact apache@apache.org.
 *
 * 5. Products derived from this software may not be called "Apache",
 *    nor may "Apache" appear in their name, without prior written
 *    permission of the Apache Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 */

#ifndef APR_XLATE_H
#define APR_XLATE_H

#include "apr.h"
#include "apr_general.h"
#include "apr_time.h"
#include "apr_errno.h"

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/* APR_XLATE_IMPLEMENTED determines whether or not useful 
 * implementations of ap_xlate_open() et al are provided.
 *
 * If APR_XLATE_IMPLEMENTED is not defined, ap_xlate_open() et al
 * will all return APR_ENOTIMPL at run-time.
 */

#if defined(APR_HAS_ICONV)
#define APR_XLATE_IMPLEMENTED
#endif
    
#if !defined(APR_XLATE_IMPLEMENTED)

typedef void                         ap_xlate_t;

/* For platforms where we don't bother with translating between codepages, 
 * these are macros which always return failure.
 */

#define ap_xlate_open(convset, topage, frompage, pool) APR_ENOTIMPL

#define ap_xlate_conv_buffer(convset, inbuf, inbytes_left, outbuf, \
                          outbytes_left) APR_ENOTIMPL

/* The purpose of ap_xlate_conv_char is to translate one character
 * at a time.  This needs to be written carefully so that it works
 * with double-byte character sets. 
 */
#define ap_xlate_conv_char(convset, inchar, outchar) APR_ENOTIMPL

#define ap_xlate_close(convset) APR_ENOTIMPL

#else  /* ! APR_XLATE_IMPLEMENTED */

typedef struct ap_xlate_t            ap_xlate_t;

/*

=head1 ap_status_t ap_xlate_open(ap_xlate_t **convset, const char *topage, const char *frompage,
ap_pool_t *pool)

B<Set up for converting text from one codepage to another.>

    arg 1) The handle to be filled in by this function
    arg 2) The name of the target codepage
    arg 3) The name of the source codepage
    arg 4) The pool to use

B<NOTE>:  Specify APR_DEFAULT_CODEPAGE for one of the codepage
          names to indicate the codepage of the source code at
          compile time.  This is useful if there are literal
          strings in the source code which must be translated
          according to the codepage of the source code.
          APR_DEFAULT_CODEPAGE is not useful if the source code
          of the caller was not encoded in the same codepage as
          APR at compile time.

=cut
 */
ap_status_t ap_xlate_open(ap_xlate_t **convset, const char *topage, 
                       const char *frompage, ap_pool_t *pool);

#define APR_DEFAULT_CODEPAGE NULL

/*

=head1 ap_status_t ap_xlate_conv_buffer(ap_xlate_t *convset, const char *inbuf, ap_size_t
*inbytes_left, char *outbuf, ap_size_t outbytes_left)

B<Convert a buffer of text from one codepage to another.>

    arg 1) The handle allocated by ap_xlate_open, specifying the parameters
           of conversion
    arg 2) The address of the source buffer
    arg 3) Input: the amount of input data to be translated
           Output: the amount of input data not yet translated    
    arg 4) The address of the destination buffer
    arg 5) Input: the size of the output buffer
           Output: the amount of the output buffer not yet used

=cut
 */
ap_status_t ap_xlate_conv_buffer(ap_xlate_t *convset, const char *inbuf, 
                              ap_size_t *inbytes_left, char *outbuf,
                              ap_size_t *outbytes_left);

/* The purpose of ap_xlate_conv_char is to translate one character
 * at a time.  This needs to be written carefully so that it works
 * with double-byte character sets. 
 */
ap_status_t ap_xlate_conv_char(ap_xlate_t *convset, char inchar, char outchar);

/*

=head1 ap_status_t ap_xlate_close(ap_xlate_t *convset)

B<Close a codepage translation handle.>

    arg 1) The codepage translation handle to close

=cut
 */
ap_status_t ap_xlate_close(ap_xlate_t *convset);

#endif  /* ! APR_XLATE_IMPLEMENTED */

#ifdef __cplusplus
}
#endif

#endif  /* ! APR_XLATE_H */



-- 
Jeff Trawick | trawick@ibm.net | PGP public key at web site:
     http://www.geocities.com/SiliconValley/Park/9289/
          Born in Roswell... married an alien...

Mime
View raw message