X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fucs4-utf8.h;h=e8c3e7f24d4967eb9fc26a26fe808d70bdbda6ab;hb=a7b66f7ce60806e824c73ae8dd97b3316ca880c0;hp=0757325c47a7f3f0a27b4e9b8a08bd95af7306a3;hpb=4bc0a0ad4c963017ab77335801566546afbf965b;p=gnulib.git diff --git a/lib/ucs4-utf8.h b/lib/ucs4-utf8.h index 0757325c4..e8c3e7f24 100644 --- a/lib/ucs4-utf8.h +++ b/lib/ucs4-utf8.h @@ -1,71 +1,35 @@ /* Conversion UCS-4 to UTF-8. - Copyright (C) 2002 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. + Copyright (C) 2002, 2005-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, or (at your option) + any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ +#ifndef _UCS4_UTF8_H +#define _UCS4_UTF8_H #include +#include "unitypes.h" + +extern int u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n); /* Return the length (number of units) of the UTF-8 representation of uc, after storing it at S. Return -1 upon failure, -2 if the number of available units, N, is too small. */ -static int -u8_uctomb_aux (unsigned char *s, unsigned int uc, int n) -{ - int count; - - if (uc < 0x80) - count = 1; - else if (uc < 0x800) - count = 2; - else if (uc < 0x10000) - count = 3; -#if 0 - else if (uc < 0x200000) - count = 4; - else if (uc < 0x4000000) - count = 5; - else if (uc <= 0x7fffffff) - count = 6; -#else - else if (uc < 0x110000) - count = 4; -#endif - else - return -1; - - if (n < count) - return -2; - - switch (count) /* note: code falls through cases! */ - { -#if 0 - case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000; - case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000; -#endif - case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; - case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; - case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; - case 1: s[0] = uc; - } - return count; -} - static inline int -u8_uctomb (unsigned char *s, unsigned int uc, int n) +u8_uctomb (uint8_t *s, ucs4_t uc, int n) { if (uc < 0x80 && n > 0) { @@ -75,3 +39,5 @@ u8_uctomb (unsigned char *s, unsigned int uc, int n) else return u8_uctomb_aux (s, uc, n); } + +#endif /* _UCS4_UTF8_H */