diff options
author | Andreas Rottmann <a.rottmann@gmx.at> | 2010-05-27 18:23:17 +0200 |
---|---|---|
committer | Andreas Rottmann <a.rottmann@gmx.at> | 2010-05-27 18:23:17 +0200 |
commit | bd6adfa17d453e4c486e36fed4c5779db90a8a0e (patch) | |
tree | 9798677560d5f99061afe9f0db105a8c97f2438a /lib/unistr/u8-mblen.c | |
parent | 79ca645d222db2e158784642c3b464a47bea26f3 (diff) | |
parent | 3e0814cd9862b89c7a39672672937477bd87ddfb (diff) |
Merge commit 'upstream/0.9.3'
Diffstat (limited to 'lib/unistr/u8-mblen.c')
-rw-r--r-- | lib/unistr/u8-mblen.c | 99 |
1 files changed, 50 insertions, 49 deletions
diff --git a/lib/unistr/u8-mblen.c b/lib/unistr/u8-mblen.c index 1981bef..f6a2027 100644 --- a/lib/unistr/u8-mblen.c +++ b/lib/unistr/u8-mblen.c @@ -1,5 +1,6 @@ /* Look at first character in UTF-8 string. - Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2010 Free Software + Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This program is free software: you can redistribute it and/or modify it @@ -29,69 +30,69 @@ u8_mblen (const uint8_t *s, size_t n) uint8_t c = *s; if (c < 0x80) - return (c != 0 ? 1 : 0); + return (c != 0 ? 1 : 0); if (c >= 0xc2) - { - if (c < 0xe0) - { - if (n >= 2 + { + if (c < 0xe0) + { + if (n >= 2 #if CONFIG_UNICODE_SAFETY - && (s[1] ^ 0x80) < 0x40 + && (s[1] ^ 0x80) < 0x40 #endif - ) - return 2; - } - else if (c < 0xf0) - { - if (n >= 3 + ) + return 2; + } + else if (c < 0xf0) + { + if (n >= 3 #if CONFIG_UNICODE_SAFETY - && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 - && (c >= 0xe1 || s[1] >= 0xa0) - && (c != 0xed || s[1] < 0xa0) + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0) #endif - ) - return 3; - } - else if (c < 0xf8) - { - if (n >= 4 + ) + return 3; + } + else if (c < 0xf8) + { + if (n >= 4 #if CONFIG_UNICODE_SAFETY - && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 - && (s[3] ^ 0x80) < 0x40 - && (c >= 0xf1 || s[1] >= 0x90) + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) #if 1 - && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) #endif #endif - ) - return 4; - } + ) + return 4; + } #if 0 - else if (c < 0xfc) - { - if (n >= 5 + else if (c < 0xfc) + { + if (n >= 5 #if CONFIG_UNICODE_SAFETY - && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 - && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 - && (c >= 0xf9 || s[1] >= 0x88) + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88) #endif - ) - return 5; - } - else if (c < 0xfe) - { - if (n >= 6 + ) + return 5; + } + else if (c < 0xfe) + { + if (n >= 6 #if CONFIG_UNICODE_SAFETY - && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 - && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 - && (s[5] ^ 0x80) < 0x40 - && (c >= 0xfd || s[1] >= 0x84) + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84) #endif - ) - return 6; - } + ) + return 6; + } #endif - } + } } /* invalid or incomplete multibyte character */ return -1; |