Coverage Report

Created: 2024-06-20 06:28

/src/gnutls/lib/unistring/unistr/u16-mbtouc-unsafe-aux.c
Line
Count
Source (jump to first uncovered line)
1
/* Conversion UTF-16 to UCS-4.
2
   Copyright (C) 2001-2002, 2006-2007, 2009-2023 Free Software Foundation, Inc.
3
   Written by Bruno Haible <bruno@clisp.org>, 2001.
4
5
   This file is free software.
6
   It is dual-licensed under "the GNU LGPLv3+ or the GNU GPLv2+".
7
   You can redistribute it and/or modify it under either
8
     - the terms of the GNU Lesser General Public License as published
9
       by the Free Software Foundation, either version 3, or (at your
10
       option) any later version, or
11
     - the terms of the GNU General Public License as published by the
12
       Free Software Foundation; either version 2, or (at your option)
13
       any later version, or
14
     - the same dual license "the GNU LGPLv3+ or the GNU GPLv2+".
15
16
   This file is distributed in the hope that it will be useful,
17
   but WITHOUT ANY WARRANTY; without even the implied warranty of
18
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19
   Lesser General Public License and the GNU General Public License
20
   for more details.
21
22
   You should have received a copy of the GNU Lesser General Public
23
   License and of the GNU General Public License along with this
24
   program.  If not, see <https://www.gnu.org/licenses/>.  */
25
26
#include <config.h>
27
28
/* Specification.  */
29
#include "unistr.h"
30
31
#if defined IN_LIBUNISTRING || HAVE_INLINE
32
33
int
34
u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n)
35
0
{
36
0
  uint16_t c = *s;
37
38
0
  if (c < 0xdc00)
39
0
    {
40
0
      if (n >= 2)
41
0
        {
42
0
          if (s[1] >= 0xdc00 && s[1] < 0xe000)
43
0
            {
44
0
              *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00);
45
0
              return 2;
46
0
            }
47
          /* invalid multibyte character */
48
0
        }
49
0
      else
50
0
        {
51
          /* incomplete multibyte character */
52
0
        }
53
0
    }
54
  /* invalid multibyte character */
55
0
  *puc = 0xfffd;
56
0
  return 1;
57
0
}
58
59
#endif