LCOV - code coverage report
Current view: top level - include/linux - unicode.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc3-djwx @ Mon Jul 31 20:08:22 PDT 2023 Lines: 2 2 100.0 %
Date: 2023-07-31 20:08:22 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _LINUX_UNICODE_H
       3             : #define _LINUX_UNICODE_H
       4             : 
       5             : #include <linux/init.h>
       6             : #include <linux/dcache.h>
       7             : 
       8             : struct utf8data;
       9             : struct utf8data_table;
      10             : 
      11             : #define UNICODE_MAJ_SHIFT               16
      12             : #define UNICODE_MIN_SHIFT               8
      13             : 
      14             : #define UNICODE_AGE(MAJ, MIN, REV)                      \
      15             :         (((unsigned int)(MAJ) << UNICODE_MAJ_SHIFT) |     \
      16             :          ((unsigned int)(MIN) << UNICODE_MIN_SHIFT) |     \
      17             :          ((unsigned int)(REV)))
      18             : 
      19             : static inline u8 unicode_major(unsigned int age)
      20             : {
      21           3 :         return (age >> UNICODE_MAJ_SHIFT) & 0xff;
      22             : }
      23             : 
      24             : static inline u8 unicode_minor(unsigned int age)
      25             : {
      26           3 :         return (age >> UNICODE_MIN_SHIFT) & 0xff;
      27             : }
      28             : 
      29             : static inline u8 unicode_rev(unsigned int age)
      30             : {
      31             :         return age & 0xff;
      32             : }
      33             : 
      34             : /*
      35             :  * Two normalization forms are supported:
      36             :  * 1) NFDI
      37             :  *   - Apply unicode normalization form NFD.
      38             :  *   - Remove any Default_Ignorable_Code_Point.
      39             :  * 2) NFDICF
      40             :  *   - Apply unicode normalization form NFD.
      41             :  *   - Remove any Default_Ignorable_Code_Point.
      42             :  *   - Apply a full casefold (C + F).
      43             :  */
      44             : enum utf8_normalization {
      45             :         UTF8_NFDI = 0,
      46             :         UTF8_NFDICF,
      47             :         UTF8_NMAX,
      48             : };
      49             : 
      50             : struct unicode_map {
      51             :         unsigned int version;
      52             :         const struct utf8data *ntab[UTF8_NMAX];
      53             :         const struct utf8data_table *tables;
      54             : };
      55             : 
      56             : int utf8_validate(const struct unicode_map *um, const struct qstr *str);
      57             : 
      58             : int utf8_strncmp(const struct unicode_map *um,
      59             :                  const struct qstr *s1, const struct qstr *s2);
      60             : 
      61             : int utf8_strncasecmp(const struct unicode_map *um,
      62             :                  const struct qstr *s1, const struct qstr *s2);
      63             : int utf8_strncasecmp_folded(const struct unicode_map *um,
      64             :                             const struct qstr *cf,
      65             :                             const struct qstr *s1);
      66             : 
      67             : int utf8_normalize(const struct unicode_map *um, const struct qstr *str,
      68             :                    unsigned char *dest, size_t dlen);
      69             : 
      70             : int utf8_casefold(const struct unicode_map *um, const struct qstr *str,
      71             :                   unsigned char *dest, size_t dlen);
      72             : 
      73             : int utf8_casefold_hash(const struct unicode_map *um, const void *salt,
      74             :                        struct qstr *str);
      75             : 
      76             : struct unicode_map *utf8_load(unsigned int version);
      77             : void utf8_unload(struct unicode_map *um);
      78             : 
      79             : #endif /* _LINUX_UNICODE_H */

Generated by: LCOV version 1.14