Coverage Report

Created: 2024-06-20 06:28

/src/gnutls/lib/unistring/unistr/u16-uctomb-aux.c
Line
Count
Source (jump to first uncovered line)
1
/* Conversion UCS-4 to UTF-16.
2
   Copyright (C) 2002, 2006-2007, 2009-2023 Free Software Foundation, Inc.
3
   Written by Bruno Haible <bruno@clisp.org>, 2002.
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
int
32
u16_uctomb_aux (uint16_t *s, ucs4_t uc, ptrdiff_t n)
33
0
{
34
0
  if (uc < 0xd800)
35
0
    {
36
      /* The case n >= 1 is already handled by the caller.  */
37
0
    }
38
0
  else if (uc < 0x10000)
39
0
    {
40
0
      if (uc >= 0xe000)
41
0
        {
42
0
          if (n >= 1)
43
0
            {
44
0
              s[0] = uc;
45
0
              return 1;
46
0
            }
47
0
        }
48
0
      else
49
0
        return -1;
50
0
    }
51
0
  else
52
0
    {
53
0
      if (uc < 0x110000)
54
0
        {
55
0
          if (n >= 2)
56
0
            {
57
0
              s[0] = 0xd800 + ((uc - 0x10000) >> 10);
58
0
              s[1] = 0xdc00 + ((uc - 0x10000) & 0x3ff);
59
0
              return 2;
60
0
            }
61
0
        }
62
0
      else
63
0
        return -1;
64
0
    }
65
0
  return -2;
66
0
}