⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iconv.h

📁 linux subdivision ying gai ke yi le ba
💻 H
字号:
/*- * Copyright (c) 1999,2000 *	Konstantin Chuguev.  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. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by Konstantin Chuguev *	and its contributors. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS 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 AUTHOR OR 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. * */#ifndef _ICONV_H_#define _ICONV_H_#include "apr.h"#include "apr_pools.h"#include "apr_iconv.h"#ifdef WIN32#define ICONV_DEFAULT_PATH "iconv"#define API_USE_BUILTIN_ALIASES /* Use the built-in charset alias table */#else#include "apr_iconv_private.h"  /* contains ICONV_DEFAULT_PATH */#endif#include <stddef.h>#ifdef ICONV_INTERNAL/* * iconv module types */#define	ICMOD_ANY	0#define	ICMOD_LIB	1#define	ICMOD_UC_CCS	0x100	/* UC - CCS for CES */#define	ICMOD_UC_CES	0x101	/* UC - CES *//* * iconv module flags */#define	ICMODF_LOADED	0x8000/* * iconv module handler events */#define	ICMODEV_LOAD	1	/* module load. after dependencies resolved */#define	ICMODEV_UNLOAD	2	/* module unload */#define ICMODEV_DYN_LOAD    3   /* load dynamic dependencies */#define ICMODEV_DYN_UNLOAD  4   /* unload dynamic dependencies */struct iconv_module_depend {	int		md_type;	const char *	md_name;	const void *	md_data;};struct iconv_module;/* _tbl_simple.c table_load_ccs() calls apr_iconv_mod_load(...ctx) */typedef int iconv_mod_event_t(struct iconv_module *, int, apr_pool_t *ctx);struct iconv_module_desc {	int		imd_type;	iconv_mod_event_t *imd_event;	const struct iconv_module_depend *imd_depend;	const void *	imd_data;};#define END_ICONV_MODULE_DEPEND  {0, NULL, NULL}#define	ICONV_MODULE(type,data)	struct iconv_module_desc iconv_module \				    {(type), (data)}struct iconv_module {	int		im_flags;	void *		im_handle;	struct iconv_module_desc *im_desc;	struct iconv_module *im_next;	struct iconv_module *im_deplist;	int		im_depcnt;	const void *	im_methods;	void *		im_data;	const void *	im_depdata;	/* data if module loaded from dependency */	const void *	im_args;        /* This is module-private data. Nothing outside the module           itself may touch it. */        void *im_private;};#define	ICONV_MOD_LOAD(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_LOAD,ctx)#define	ICONV_MOD_UNLOAD(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_UNLOAD,ctx)#define	ICONV_MOD_DYN_LOAD(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_DYN_LOAD,ctx)#define	ICONV_MOD_DYN_UNLOAD(mod,ctx)	(mod)->im_desc->imd_event(mod, ICMODEV_DYN_UNLOAD,ctx)/* * iconv converter definitions. */typedef int iconv_open_t(const char *, const char *, void **, apr_pool_t *);typedef int iconv_close_t(void *, apr_pool_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;	iconv_close_t *	icd_close;	iconv_conv_t *	icd_conv;};struct iconv_converter {	struct iconv_converter_desc *ic_desc;	void *		ic_data;};/* * internal data types and functions used by charset conversion modules */#define UCS_CHAR_ZERO_WIDTH_NBSP 0xFEFF#define UCS_CHAR_INVALID	 0xFFFE#define UCS_CHAR_NONE		 0xFFFFtypedef apr_uint16_t ucs2_t;	/* Unicode character [D5] */typedef apr_uint32_t ucs4_t;	/* Unicode scalar character [D28] */#define ucs_t    ucs4_t/* * one-level coded character set conversion tables */typedef struct {	apr_uint16_t	data[128];} iconv_ccs_convtable_7bit;	/* 7-bit charset to Unicode */typedef struct {	apr_uint16_t	data[256];} iconv_ccs_convtable_8bit;	/* 8-bit charset to Unicode *//* * two-level coded character set conversion tables */typedef struct {	const iconv_ccs_convtable_7bit	*data[128];} iconv_ccs_convtable_14bit;	/* 14-bit charset to Unicode */typedef struct {	const iconv_ccs_convtable_8bit	*data[256];} iconv_ccs_convtable_16bit;	/* 16-bit charset to Unicode;				 * Unicode to any charset *//* * abstract coded character set conversion table */typedef union {	iconv_ccs_convtable_7bit	_7bit;	iconv_ccs_convtable_8bit	_8bit;	iconv_ccs_convtable_14bit	_14bit;	iconv_ccs_convtable_16bit	_16bit;} iconv_ccs_convtable;/* * function for table-driven conversion */typedef ucs2_t iconv_ccs_converter_t (ucs2_t ch);/* * charset conversion module descriptor */struct iconv_ccs_desc {	const char * const *		names;	int				nbits;	const iconv_ccs_convtable *	from_ucs;	const iconv_ccs_convtable *	to_ucs;	iconv_ccs_converter_t *		convert_from_ucs;	iconv_ccs_converter_t *		convert_to_ucs;};/* * inline functions for use in charset conversion modules */static APR_INLINE ucs2_ticonv_ccs_convert_7bit(const iconv_ccs_convtable *table, ucs2_t ch){	return ch & 0x80 ? UCS_CHAR_INVALID : table->_7bit.data[ch];}static APR_INLINE ucs2_ticonv_ccs_convert_8bit(const iconv_ccs_convtable *table, ucs2_t ch){	return table->_8bit.data[ch];}static APR_INLINE ucs2_ticonv_ccs_convert_14bit(const iconv_ccs_convtable *table, ucs2_t ch){	const iconv_ccs_convtable_7bit *sub_table;	sub_table =  ch & 0x8080 ? NULL : table->_14bit.data[ch >> 8];	return sub_table ? sub_table->data[ch & 0x7F] : UCS_CHAR_INVALID;}static APR_INLINE ucs2_ticonv_ccs_convert_16bit(const iconv_ccs_convtable *table, ucs2_t ch){	const iconv_ccs_convtable_8bit *sub_table;	sub_table = table->_16bit.data[ch >> 8];	return sub_table ? sub_table->data[ch & 0xFF] : UCS_CHAR_INVALID;}#define ICONV_CCS_CONVERT_FROM_UCS(ccsd, ch) \        ((ccsd)->convert_from_ucs(ch))#define ICONV_CCS_CONVERT_TO_UCS(ccsd, ch) \        ((ccsd)->convert_to_ucs(ch))/* * generic character encoding schemes and functions */struct iconv_ces;typedef int  iconv_ces_open_t(struct iconv_ces *, apr_pool_t *);typedef	int  iconv_ces_close_t(struct iconv_ces *);typedef	void iconv_ces_reset_t(struct iconv_ces *);typedef	const char * const *iconv_ces_names_t(struct iconv_ces *);typedef	int  iconv_ces_nbits_t(struct iconv_ces *);typedef	int  iconv_ces_nbytes_t(struct iconv_ces *);typedef apr_ssize_t iconv_ces_convert_from_ucs_t    (struct iconv_ces *data, ucs_t in,    unsigned char **outbuf, apr_size_t *outbytesleft);typedef ucs_t iconv_ces_convert_to_ucs_t    (struct iconv_ces *data,    const unsigned char **inbuf, apr_size_t *inbytesleft);struct iconv_ces_desc {	iconv_ces_open_t *	open;	iconv_ces_close_t *	close;	iconv_ces_reset_t *	reset;	iconv_ces_names_t *	names;	iconv_ces_nbits_t *	nbits;	iconv_ces_nbytes_t *	nbytes;	iconv_ces_convert_from_ucs_t * convert_from_ucs;	iconv_ces_convert_to_ucs_t * convert_to_ucs;	const void *data;};struct iconv_ces {	struct iconv_ces_desc *	desc;	void *			data;	struct iconv_module *	mod;};API_DECLARE_NONSTD(int)  apr_iconv_ces_open(const char *ces_name, struct iconv_ces **cespp, apr_pool_t *ctx);API_DECLARE_NONSTD(int)  apr_iconv_ces_close(struct iconv_ces *ces, apr_pool_t *ctx);API_DECLARE_NONSTD(int)  apr_iconv_ces_open_func(struct iconv_ces *ces, apr_pool_t *ctx);API_DECLARE_NONSTD(int)  apr_iconv_ces_close_func(struct iconv_ces *ces);API_DECLARE_NONSTD(void) apr_iconv_ces_reset_func(struct iconv_ces *ces);API_DECLARE_NONSTD(void) apr_iconv_ces_no_func(struct iconv_ces *ces);API_DECLARE_NONSTD(int)  apr_iconv_ces_nbits7(struct iconv_ces *ces);API_DECLARE_NONSTD(int)  apr_iconv_ces_nbits8(struct iconv_ces *ces);API_DECLARE_NONSTD(int)  apr_iconv_ces_zero(struct iconv_ces *ces);/* Safe for _NONSTD APIs since the C caller pops the stack and the * apr_pool_t *cxt arg is simply ignored: */#define apr_iconv_ces_open_zero (iconv_ces_open_t*)apr_iconv_ces_zero#define iconv_char32bit(ch)	((ch) & 0xFFFF0000)#define	ICONV_CES_OPEN(ces,ctx)	(ces)->desc->open(ces,ctx)#define	ICONV_CES_CLOSE(ces)	(ces)->desc->close(ces)#define ICONV_CES_RESET(ces)	(ces)->desc->reset(ces)#define ICONV_CES_CONVERT_FROM_UCS(cesd, in, outbuf, outbytes) \	    ((cesd)->desc->convert_from_ucs((cesd), (in), (outbuf), (outbytes)))#define ICONV_CES_CONVERT_TO_UCS(cesd, inbuf, inbytes) \	    ((cesd)->desc->convert_to_ucs((cesd), (inbuf), (inbytes)))#define ICONV_CES_DRIVER_DECL(name) \		iconv_ces_open_t iconv_##name##_open; \		iconv_ces_close_t iconv_##name##_close; \		iconv_ces_reset_t iconv_##name##_reset; \		iconv_ces_nbits_t iconv_##name##_nbits; \		iconv_ces_convert_from_ucs_t iconv_##name##_convert_from_ucs; \		iconv_ces_convert_to_ucs_t iconv_##name##_convert_to_ucs/* ************************************************ * EUC character encoding schemes and functions * ************************************************ */typedef struct iconv_ces_euc_ccs {	const char	*prefix;	apr_size_t		prefixlen;} iconv_ces_euc_ccs_t;ICONV_CES_DRIVER_DECL(euc);/* * ISO-2022 character encoding schemes and functions */enum { ICONV_SHIFT_SI = 0, ICONV_SHIFT_SO, ICONV_SHIFT_SS2, ICONV_SHIFT_SS3 };typedef struct iconv_ces_iso2022_ccs {	int		shift;	const char *	designator;	apr_size_t		designatorlen;} iconv_ces_iso2022_ccs_t;typedef struct {	const int *	shift_tab;	int		nccs;	const struct iconv_ces_iso2022_ccs *ccs;} iconv_ces_iso2022_data;ICONV_CES_DRIVER_DECL(iso2022);API_DECLARE_NONSTD(int) apr_iconv_mod_load(const char *, int, const void *, struct iconv_module **, apr_pool_t *);API_DECLARE_NONSTD(int) apr_iconv_mod_unload(struct iconv_module *,apr_pool_t *ctx);API_DECLARE_NONSTD(int) apr_iconv_mod_noevent(struct iconv_module *mod, int event, apr_pool_t *ctx);API_DECLARE_NONSTD(int) apr_iconv_ccs_event(struct iconv_module *mod, int event, apr_pool_t *ctx);int  iconv_malloc(apr_size_t size, void **pp);extern struct iconv_converter_desc iconv_uc_desc;API_DECLARE_NONSTD(apr_status_t) apr_iconv_euc_open(struct iconv_ces *ces, apr_pool_t *ctx);API_DECLARE_NONSTD(apr_status_t) apr_iconv_euc_close(struct iconv_ces *ces);API_DECLARE_NONSTD(apr_ssize_t)  apr_iconv_euc_convert_from_ucs(struct iconv_ces *ces, ucs_t in,	unsigned char **outbuf, apr_size_t *outbytesleft);API_DECLARE_NONSTD(ucs_t)  apr_iconv_euc_convert_to_ucs(struct iconv_ces *ces, const unsigned char **inbuf, apr_size_t *inbytesleft);API_DECLARE_NONSTD(apr_status_t) apr_iconv_iso2022_open(struct iconv_ces *ces, apr_pool_t *ctx);API_DECLARE_NONSTD(int) apr_iconv_iso2022_close(struct iconv_ces *ces);API_DECLARE_NONSTD(void) apr_iconv_iso2022_reset(struct iconv_ces *ces);API_DECLARE_NONSTD(apr_ssize_t) apr_iconv_iso2022_convert_from_ucs(struct iconv_ces *ces, ucs_t in, unsigned char **outbuf, apr_size_t *outbytesleft);API_DECLARE_NONSTD(ucs_t) apr_iconv_iso2022_convert_to_ucs(struct iconv_ces *ces, const unsigned char **inbuf, apr_size_t *inbytesleft);#endif /* ICONV_INTERNAL */#endif /* _ICONV_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -