summaryrefslogtreecommitdiff
path: root/lib/uniname/uniname.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/uniname/uniname.c')
-rw-r--r--lib/uniname/uniname.c67
1 files changed, 35 insertions, 32 deletions
diff --git a/lib/uniname/uniname.c b/lib/uniname/uniname.c
index 85c4676..479cb83 100644
--- a/lib/uniname/uniname.c
+++ b/lib/uniname/uniname.c
@@ -1,27 +1,26 @@
/* Association between Unicode characters and their names.
- Copyright (C) 2000-2002, 2005-2007, 2009-2018 Free Software Foundation, Inc.
-
- This program is free software: you can redistribute it and/or
- modify it under the terms of either:
-
- * the GNU Lesser General Public License as published by the Free
- Software Foundation; either version 3 of the License, or (at your
- option) any later version.
-
- or
-
- * the GNU General Public License as published by the Free
- Software Foundation; either version 2 of the License, or (at your
- option) any later version.
-
- or both in parallel, as here.
- This program is distributed in the hope that it will be useful,
+ Copyright (C) 2000-2002, 2005-2007, 2009-2022 Free Software Foundation, Inc.
+
+ This file is free software.
+ It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+".
+ You can redistribute it and/or modify it under either
+ - the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version, or
+ - 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, or
+ - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+".
+
+ This file 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
- Lesser General Public License for more details.
+ Lesser General Public License and the GNU General Public License
+ for more details.
- You should have received a copy of the GNU Lesser General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public
+ License and of the GNU General Public License along with this
+ program. If not, see <https://www.gnu.org/licenses/>. */
#include <config.h>
@@ -34,6 +33,8 @@
#include <stdio.h>
#include <string.h>
+#include "attribute.h"
+
#define SIZEOF(a) (sizeof(a) / sizeof(a[0]))
@@ -67,7 +68,6 @@ unicode_name_word (unsigned int index, unsigned int *lengthp)
{
unsigned int i1;
unsigned int i2;
- unsigned int i;
assert (index < UNICODE_CHARNAME_NUM_WORDS);
@@ -87,7 +87,7 @@ unicode_name_word (unsigned int index, unsigned int *lengthp)
else
i2 = i;
}
- i = i1;
+ unsigned int i = i1;
assert (unicode_name_by_length[i].ind_offset <= index
&& index < unicode_name_by_length[i+1].ind_offset);
*lengthp = i;
@@ -97,7 +97,7 @@ unicode_name_word (unsigned int index, unsigned int *lengthp)
/* Looks up the index of a word. */
static int
-unicode_name_word_lookup (const char *word, unsigned int length)
+unicode_name_word_lookup (const char *word, size_t length)
{
if (length > 0 && length < SIZEOF (unicode_name_by_length) - 1)
{
@@ -366,7 +366,7 @@ unicode_character_name (ucs4_t c, char *buf)
ucs4_t
unicode_name_character (const char *name)
{
- unsigned int len = strlen (name);
+ size_t len = strlen (name);
if (len > 1 && len <= UNICODE_CHARNAME_MAX_LENGTH)
{
/* Test for "word1 word2 ..." syntax. */
@@ -476,9 +476,9 @@ unicode_name_character (const char *name)
p4++;
if (p4 == ptr)
{
- unsigned int n1 = p2 - p1;
- unsigned int n2 = p3 - p2;
- unsigned int n3 = p4 - p3;
+ size_t n1 = p2 - p1;
+ size_t n2 = p3 - p2;
+ size_t n3 = p4 - p3;
if (n1 <= 2 && (n2 >= 1 && n2 <= 3) && n3 <= 2)
{
@@ -585,12 +585,15 @@ unicode_name_character (const char *name)
filled_words:
{
/* Multiply by 2, to simplify later comparisons. */
- unsigned int words_length = wordptr - words;
+ size_t words_length = wordptr - words;
{
- int i = words_length - 1;
+ size_t i = words_length - 1;
words[i] = 2 * words[i];
- for (; --i >= 0; )
- words[i] = 2 * words[i] + 1;
+ for (; i > 0; )
+ {
+ --i;
+ words[i] = 2 * words[i] + 1;
+ }
}
/* Binary search in unicode_name_to_index. */
{
@@ -601,7 +604,7 @@ unicode_name_character (const char *name)
unsigned int i = (i1 + i2) >> 1;
const uint16_t *w = words;
const uint16_t *p = &unicode_names[unicode_name_to_index[i].name];
- unsigned int n = words_length;
+ size_t n = words_length;
for (;;)
{
if (*p < *w)