cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

unicode.h (2012B)


      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
      8struct utf8data;
      9struct 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
     19static inline u8 unicode_major(unsigned int age)
     20{
     21	return (age >> UNICODE_MAJ_SHIFT) & 0xff;
     22}
     23
     24static inline u8 unicode_minor(unsigned int age)
     25{
     26	return (age >> UNICODE_MIN_SHIFT) & 0xff;
     27}
     28
     29static 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 */
     44enum utf8_normalization {
     45	UTF8_NFDI = 0,
     46	UTF8_NFDICF,
     47	UTF8_NMAX,
     48};
     49
     50struct unicode_map {
     51	unsigned int version;
     52	const struct utf8data *ntab[UTF8_NMAX];
     53	const struct utf8data_table *tables;
     54};
     55
     56int utf8_validate(const struct unicode_map *um, const struct qstr *str);
     57
     58int utf8_strncmp(const struct unicode_map *um,
     59		 const struct qstr *s1, const struct qstr *s2);
     60
     61int utf8_strncasecmp(const struct unicode_map *um,
     62		 const struct qstr *s1, const struct qstr *s2);
     63int utf8_strncasecmp_folded(const struct unicode_map *um,
     64			    const struct qstr *cf,
     65			    const struct qstr *s1);
     66
     67int utf8_normalize(const struct unicode_map *um, const struct qstr *str,
     68		   unsigned char *dest, size_t dlen);
     69
     70int utf8_casefold(const struct unicode_map *um, const struct qstr *str,
     71		  unsigned char *dest, size_t dlen);
     72
     73int utf8_casefold_hash(const struct unicode_map *um, const void *salt,
     74		       struct qstr *str);
     75
     76struct unicode_map *utf8_load(unsigned int version);
     77void utf8_unload(struct unicode_map *um);
     78
     79#endif /* _LINUX_UNICODE_H */