Blame view

include/charset.h 2.24 KB
78178bb0c   Rob Clark   lib: add some utf...
1
2
3
4
5
6
7
8
9
10
  /*
   *  charset conversion utils
   *
   *  Copyright (c) 2017 Rob Clark
   *
   *  SPDX-License-Identifier:     GPL-2.0+
   */
  
  #ifndef __CHARSET_H_
  #define __CHARSET_H_
f58c5ecb8   Heinrich Schuchardt   efi_loader: new f...
11
  #include <linux/types.h>
984f251fe   Heinrich Schuchardt   efi_loader: MAX_U...
12
  #define MAX_UTF8_PER_UTF16 3
78178bb0c   Rob Clark   lib: add some utf...
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  
  /**
   * utf16_strlen() - Get the length of an utf16 string
   *
   * Returns the number of 16 bit characters in an utf16 string, not
   * including the terminating NULL character.
   *
   * @in     the string to measure
   * @return the string length
   */
  size_t utf16_strlen(const uint16_t *in);
  
  /**
   * utf16_strnlen() - Get the length of a fixed-size utf16 string.
   *
   * Returns the number of 16 bit characters in an utf16 string,
   * not including the terminating NULL character, but at most
   * 'count' number of characters.  In doing this, utf16_strnlen()
   * looks at only the first 'count' characters.
   *
   * @in     the string to measure
   * @count  the maximum number of characters to count
   * @return the string length, up to a maximum of 'count'
   */
  size_t utf16_strnlen(const uint16_t *in, size_t count);
  
  /**
   * utf16_strcpy() - UTF16 equivalent of strcpy()
   */
  uint16_t *utf16_strcpy(uint16_t *dest, const uint16_t *src);
  
  /**
   * utf16_strdup() - UTF16 equivalent of strdup()
   */
  uint16_t *utf16_strdup(const uint16_t *s);
  
  /**
   * utf16_to_utf8() - Convert an utf16 string to utf8
   *
   * Converts 'size' characters of the utf16 string 'src' to utf8
   * written to the 'dest' buffer.
   *
984f251fe   Heinrich Schuchardt   efi_loader: MAX_U...
55
   * NOTE that a single utf16 character can generate up to 3 utf8
78178bb0c   Rob Clark   lib: add some utf...
56
57
58
59
60
61
62
63
   * characters.  See MAX_UTF8_PER_UTF16.
   *
   * @dest   the destination buffer to write the utf8 characters
   * @src    the source utf16 string
   * @size   the number of utf16 characters to convert
   * @return the pointer to the first unwritten byte in 'dest'
   */
  uint8_t *utf16_to_utf8(uint8_t *dest, const uint16_t *src, size_t size);
f58c5ecb8   Heinrich Schuchardt   efi_loader: new f...
64
65
66
67
68
69
70
71
72
73
74
75
  /**
   * utf8_to_utf16() - Convert an utf8 string to utf16
   *
   * Converts up to 'size' characters of the utf16 string 'src' to utf8
   * written to the 'dest' buffer. Stops at 0x00.
   *
   * @dest   the destination buffer to write the utf8 characters
   * @src    the source utf16 string
   * @size   maximum number of utf16 characters to convert
   * @return the pointer to the first unwritten byte in 'dest'
   */
  uint16_t *utf8_to_utf16(uint16_t *dest, const uint8_t *src, size_t size);
78178bb0c   Rob Clark   lib: add some utf...
76
  #endif /* __CHARSET_H_ */