1/* Look at first character in UTF-16 string. 2 Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2010 Free Software 3 Foundation, Inc. 4 Written by Bruno Haible <bruno@clisp.org>, 2002. 5 6 This program is free software: you can redistribute it and/or modify it 7 under the terms of the GNU Lesser General Public License as published 8 by the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 19#include <config.h> 20 21/* Specification. */ 22#include "unistr.h" 23 24int 25u16_mblen (const uint16_t *s, size_t n) 26{ 27 if (n > 0) 28 { 29 /* Keep in sync with unistr.h and utf16-ucs4.c. */ 30 uint16_t c = *s; 31 32 if (c < 0xd800 || c >= 0xe000) 33 return (c != 0 ? 1 : 0); 34#if CONFIG_UNICODE_SAFETY 35 if (c < 0xdc00) 36 { 37 if (n >= 2 38 && s[1] >= 0xdc00 && s[1] < 0xe000) 39 return 2; 40 } 41#else 42 { 43 if (n >= 2) 44 return 2; 45 } 46#endif 47 } 48 /* invalid or incomplete multibyte character */ 49 return -1; 50} 51