LCOV - code coverage report
Current view: top level - lib - ucs2_string.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 51 0.0 %
Date: 2022-03-28 16:04:14 Functions: 0 6 0.0 %
Branches: 0 44 0.0 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0
       2                 :            : #include <linux/ucs2_string.h>
       3                 :            : #include <linux/module.h>
       4                 :            : 
       5                 :            : /* Return the number of unicode characters in data */
       6                 :            : unsigned long
       7                 :          0 : ucs2_strnlen(const ucs2_char_t *s, size_t maxlength)
       8                 :            : {
       9                 :          0 :         unsigned long length = 0;
      10                 :            : 
      11   [ #  #  #  #  :          0 :         while (*s++ != 0 && length < maxlength)
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
      12                 :          0 :                 length++;
      13                 :          0 :         return length;
      14                 :            : }
      15                 :            : EXPORT_SYMBOL(ucs2_strnlen);
      16                 :            : 
      17                 :            : unsigned long
      18                 :          0 : ucs2_strlen(const ucs2_char_t *s)
      19                 :            : {
      20                 :          0 :         return ucs2_strnlen(s, ~0UL);
      21                 :            : }
      22                 :            : EXPORT_SYMBOL(ucs2_strlen);
      23                 :            : 
      24                 :            : /*
      25                 :            :  * Return the number of bytes is the length of this string
      26                 :            :  * Note: this is NOT the same as the number of unicode characters
      27                 :            :  */
      28                 :            : unsigned long
      29                 :          0 : ucs2_strsize(const ucs2_char_t *data, unsigned long maxlength)
      30                 :            : {
      31                 :          0 :         return ucs2_strnlen(data, maxlength/sizeof(ucs2_char_t)) * sizeof(ucs2_char_t);
      32                 :            : }
      33                 :            : EXPORT_SYMBOL(ucs2_strsize);
      34                 :            : 
      35                 :            : int
      36                 :          0 : ucs2_strncmp(const ucs2_char_t *a, const ucs2_char_t *b, size_t len)
      37                 :            : {
      38                 :          0 :         while (1) {
      39         [ #  # ]:          0 :                 if (len == 0)
      40                 :            :                         return 0;
      41         [ #  # ]:          0 :                 if (*a < *b)
      42                 :            :                         return -1;
      43         [ #  # ]:          0 :                 if (*a > *b)
      44                 :            :                         return 1;
      45         [ #  # ]:          0 :                 if (*a == 0) /* implies *b == 0 */
      46                 :            :                         return 0;
      47                 :          0 :                 a++;
      48                 :          0 :                 b++;
      49                 :          0 :                 len--;
      50                 :            :         }
      51                 :            : }
      52                 :            : EXPORT_SYMBOL(ucs2_strncmp);
      53                 :            : 
      54                 :            : unsigned long
      55                 :          0 : ucs2_utf8size(const ucs2_char_t *src)
      56                 :            : {
      57                 :          0 :         unsigned long i;
      58                 :          0 :         unsigned long j = 0;
      59                 :            : 
      60         [ #  # ]:          0 :         for (i = 0; src[i]; i++) {
      61                 :          0 :                 u16 c = src[i];
      62                 :            : 
      63         [ #  # ]:          0 :                 if (c >= 0x800)
      64                 :          0 :                         j += 3;
      65         [ #  # ]:          0 :                 else if (c >= 0x80)
      66                 :          0 :                         j += 2;
      67                 :            :                 else
      68                 :          0 :                         j += 1;
      69                 :            :         }
      70                 :            : 
      71                 :          0 :         return j;
      72                 :            : }
      73                 :            : EXPORT_SYMBOL(ucs2_utf8size);
      74                 :            : 
      75                 :            : /*
      76                 :            :  * copy at most maxlength bytes of whole utf8 characters to dest from the
      77                 :            :  * ucs2 string src.
      78                 :            :  *
      79                 :            :  * The return value is the number of characters copied, not including the
      80                 :            :  * final NUL character.
      81                 :            :  */
      82                 :            : unsigned long
      83                 :          0 : ucs2_as_utf8(u8 *dest, const ucs2_char_t *src, unsigned long maxlength)
      84                 :            : {
      85                 :          0 :         unsigned int i;
      86                 :          0 :         unsigned long j = 0;
      87                 :          0 :         unsigned long limit = ucs2_strnlen(src, maxlength);
      88                 :            : 
      89   [ #  #  #  # ]:          0 :         for (i = 0; maxlength && i < limit; i++) {
      90                 :          0 :                 u16 c = src[i];
      91                 :            : 
      92         [ #  # ]:          0 :                 if (c >= 0x800) {
      93         [ #  # ]:          0 :                         if (maxlength < 3)
      94                 :            :                                 break;
      95                 :          0 :                         maxlength -= 3;
      96                 :          0 :                         dest[j++] = 0xe0 | (c & 0xf000) >> 12;
      97                 :          0 :                         dest[j++] = 0x80 | (c & 0x0fc0) >> 6;
      98                 :          0 :                         dest[j++] = 0x80 | (c & 0x003f);
      99         [ #  # ]:          0 :                 } else if (c >= 0x80) {
     100         [ #  # ]:          0 :                         if (maxlength < 2)
     101                 :            :                                 break;
     102                 :          0 :                         maxlength -= 2;
     103                 :          0 :                         dest[j++] = 0xc0 | (c & 0x7c0) >> 6;
     104                 :          0 :                         dest[j++] = 0x80 | (c & 0x03f);
     105                 :            :                 } else {
     106                 :          0 :                         maxlength -= 1;
     107                 :          0 :                         dest[j++] = c & 0x7f;
     108                 :            :                 }
     109                 :            :         }
     110         [ #  # ]:          0 :         if (maxlength)
     111                 :          0 :                 dest[j] = '\0';
     112                 :          0 :         return j;
     113                 :            : }
     114                 :            : EXPORT_SYMBOL(ucs2_as_utf8);
     115                 :            : 
     116                 :            : MODULE_LICENSE("GPL v2");

Generated by: LCOV version 1.14