Mercurial > dovecot > core-2.2
diff src/lib-charset/charset-utf8.c @ 6112:e5451501ff2f HEAD
charset_to_utf8_begin() now takes bool ucase parameter. Changed
charset_to_ucase_utf8*() to charset_to_utf8*().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 20 Jul 2007 06:03:45 +0300 |
parents | e6cb9f75b76a |
children | 325667778ae3 |
line wrap: on
line diff
--- a/src/lib-charset/charset-utf8.c Fri Jul 20 02:45:32 2007 +0300 +++ b/src/lib-charset/charset-utf8.c Fri Jul 20 06:03:45 2007 +0300 @@ -48,24 +48,25 @@ }; static struct charset_translation ascii_translation, utf8_translation; +static struct charset_translation ascii_translation_uc, utf8_translation_uc; -struct charset_translation *charset_to_utf8_begin(const char *charset, - bool *unknown_charset) +struct charset_translation * +charset_to_utf8_begin(const char *charset, bool ucase, bool *unknown_charset_r) { - if (unknown_charset != NULL) - *unknown_charset = FALSE; + if (unknown_charset_r != NULL) + *unknown_charset_r = FALSE; if (strcasecmp(charset, "us-ascii") == 0 || strcasecmp(charset, "ascii") == 0) - return &ascii_translation; + return ucase ? &ascii_translation_uc : &ascii_translation; if (strcasecmp(charset, "UTF-8") == 0 || strcasecmp(charset, "UTF8") == 0) - return &utf8_translation; + return ucase ? &utf8_translation_uc : &utf8_translation; /* no support for charsets that need translation */ - if (unknown_charset != NULL) - *unknown_charset = TRUE; + if (unknown_charset_r != NULL) + *unknown_charset_r = TRUE; return NULL; } @@ -78,19 +79,32 @@ } enum charset_result -charset_to_ucase_utf8(struct charset_translation *t __attr_unused__, - const unsigned char *src, size_t *src_size, - buffer_t *dest) +charset_to_utf8(struct charset_translation *t, + const unsigned char *src, size_t *src_size, buffer_t *dest) { - size_t destpos, destleft; + size_t destpos = dest->used, destleft; - destpos = buffer_get_used_size(dest); destleft = buffer_get_size(dest) - destpos; + if (*src_size > destleft) + *src_size = destleft; /* no translation needed - just copy it to outbuf uppercased */ - if (*src_size > destleft) - *src_size = destleft; - _charset_utf8_ucase(src, *src_size, dest, destpos); + if (t == &utf8_translation_uc || t == &ascii_translation_uc) + _charset_utf8_ucase(src, *src_size, dest, destpos); + else + buffer_write(dest, destpos, src, *src_size); + return CHARSET_RET_OK; +} + +enum charset_result +charset_to_utf8_full(struct charset_translation *t, + const unsigned char *src, size_t *src_size, + buffer_t *dest) +{ + if (t == &utf8_translation_uc || t == &ascii_translation_uc) + _charset_utf8_ucase(src, *src_size, dest, dest->used); + else + buffer_append(dest, src, *src_size); return CHARSET_RET_OK; }