[dovecot-cvs] dovecot/src/lib-charset .cvsignore,NONE,1.1 Makefile.am,NONE,1.1 charset-ascii.c,NONE,1.1 charset-iconv.c,NONE,1.1 charset-utf8.h,NONE,1.1
    cras at procontrol.fi 
    cras at procontrol.fi
       
    Sun Nov  3 10:39:45 EET 2002
    
    
  
Update of /home/cvs/dovecot/src/lib-charset
In directory danu:/tmp/cvs-serv3305/src/lib-charset
Added Files:
	.cvsignore Makefile.am charset-ascii.c charset-iconv.c 
	charset-utf8.h 
Log Message:
SEARCH CHARSET support. Currently we do it through iconv() and only ASCII   
characters are compared case-insensitively.
--- NEW FILE: .cvsignore ---
*.la
*.lo
*.o
.deps
.libs
Makefile
Makefile.in
so_locations
--- NEW FILE: Makefile.am ---
noinst_LIBRARIES = libcharset.a
INCLUDES = \
	-I$(top_srcdir)/src/lib
libcharset_a_SOURCES = \
	charset-ascii.c \
	charset-iconv.c
noinst_HEADERS = \
	charset-utf8.h
--- NEW FILE: charset-ascii.c ---
/* Copyright (C) 2002 Timo Sirainen */
#include "lib.h"
#ifndef HAVE_ICONV_H
const char *charset_to_ucase_utf8(const unsigned char *data, size_t *size,
				  const char *charset, int *unknown_charset)
{
	if (charset == NULL || strcasecmp(charset, "us-ascii") == 0)
		return str_ucase(t_strdup_noconst(data));
	if (unknown_charset != NULL)
		*unknown_charset = TRUE;
	return NULL;
}
#endif
--- NEW FILE: charset-iconv.c ---
/* Copyright (C) 2002 Timo Sirainen */
#include "lib.h"
#ifdef HAVE_ICONV_H
#include <iconv.h>
const char *charset_to_ucase_utf8(const unsigned char *data, size_t *size,
				  const char *charset, int *unknown_charset)
{
	iconv_t cd;
	char *inbuf, *outbuf, *outpos;
	size_t inleft, outleft, outsize, pos;
	if (charset == NULL || strcasecmp(charset, "us-ascii") == 0)
		return str_ucase(t_strdup_noconst(data));
	cd = iconv_open("UTF8", charset);
	if (cd == (iconv_t)-1) {
		if (unknown_charset != NULL)
			*unknown_charset = TRUE;
		return NULL;
	}
	if (unknown_charset != NULL)
		*unknown_charset = FALSE;
	inbuf = (char *) data;
	inleft = *size;
	outsize = outleft = *size * 2;
	outbuf = outpos = t_buffer_get(outsize + 1);
	while (iconv(cd, &inbuf, &inleft, &outpos, &outleft) == (size_t)-1) {
		if (errno != E2BIG) {
			/* invalid data */
			iconv_close(cd);
			return NULL;
		}
		/* output buffer too small, grow it */
		pos = outsize - outleft;
		outsize *= 2;
		outleft = outsize - pos;
		outbuf = t_buffer_reget(outbuf, outsize + 1);
		outpos = outbuf + pos;
	}
	*size = (size_t) (outpos - outbuf);
	*outpos++ = '\0';
	t_buffer_alloc(*size + 1);
	/* FIXME: this works only for ASCII */
	str_ucase(outbuf);
	iconv_close(cd);
	return outbuf;
}
#endif
--- NEW FILE: charset-utf8.h ---
#ifndef __CHARSET_UTF8_H
#define __CHARSET_UTF8_H
const char *charset_to_ucase_utf8(const unsigned char *data, size_t *size,
				  const char *charset, int *unknown_charset);
#endif
    
    
More information about the dovecot-cvs
mailing list