#ifndef _ICONV_STREAM_H_
#define _ICONV_STREAM_H_

#include <stdio.h>	/* FILE */
#include "iconv.h"	/* iconv_t */

typedef apr_ssize_t (*iconv_stream_func)(void *d, void *buf, apr_size_t nbytes);

typedef struct {
	apr_iconv_t	cd;
	apr_size_t	chars;
	apr_size_t	in_bytes;
	apr_size_t	out_bytes;
	char *		buffer;
	char *		buf_ptr;
	void *		handle;
	iconv_stream_func method;
} iconv_stream;

iconv_stream *iconv_stream_open(apr_iconv_t cd, void *handle,
                                iconv_stream_func method);
void iconv_stream_close(iconv_stream *stream);

iconv_stream *iconv_ostream_fopen(apr_iconv_t cd, FILE *handle);

apr_ssize_t iconv_write(void *stream, const void *buf, apr_size_t nbytes);
apr_ssize_t iconv_bwrite(void *stream, const void *buf, apr_size_t nbytes);

#endif /*_ICONV_STREAM_H_*/