Branch data Line data Source code
1 : : #ifndef _LINUX_STRING_HELPERS_H_
2 : : #define _LINUX_STRING_HELPERS_H_
3 : :
4 : : #include <linux/types.h>
5 : :
6 : : /* Descriptions of the types of units to
7 : : * print in */
8 : : enum string_size_units {
9 : : STRING_UNITS_10, /* use powers of 10^3 (standard SI) */
10 : : STRING_UNITS_2, /* use binary powers of 2^10 */
11 : : };
12 : :
13 : : int string_get_size(u64 size, enum string_size_units units,
14 : : char *buf, int len);
15 : :
16 : : #define UNESCAPE_SPACE 0x01
17 : : #define UNESCAPE_OCTAL 0x02
18 : : #define UNESCAPE_HEX 0x04
19 : : #define UNESCAPE_SPECIAL 0x08
20 : : #define UNESCAPE_ANY \
21 : : (UNESCAPE_SPACE | UNESCAPE_OCTAL | UNESCAPE_HEX | UNESCAPE_SPECIAL)
22 : :
23 : : /**
24 : : * string_unescape - unquote characters in the given string
25 : : * @src: source buffer (escaped)
26 : : * @dst: destination buffer (unescaped)
27 : : * @size: size of the destination buffer (0 to unlimit)
28 : : * @flags: combination of the flags (bitwise OR):
29 : : * %UNESCAPE_SPACE:
30 : : * '\f' - form feed
31 : : * '\n' - new line
32 : : * '\r' - carriage return
33 : : * '\t' - horizontal tab
34 : : * '\v' - vertical tab
35 : : * %UNESCAPE_OCTAL:
36 : : * '\NNN' - byte with octal value NNN (1 to 3 digits)
37 : : * %UNESCAPE_HEX:
38 : : * '\xHH' - byte with hexadecimal value HH (1 to 2 digits)
39 : : * %UNESCAPE_SPECIAL:
40 : : * '\"' - double quote
41 : : * '\\' - backslash
42 : : * '\a' - alert (BEL)
43 : : * '\e' - escape
44 : : * %UNESCAPE_ANY:
45 : : * all previous together
46 : : *
47 : : * Returns amount of characters processed to the destination buffer excluding
48 : : * trailing '\0'.
49 : : *
50 : : * Because the size of the output will be the same as or less than the size of
51 : : * the input, the transformation may be performed in place.
52 : : *
53 : : * Caller must provide valid source and destination pointers. Be aware that
54 : : * destination buffer will always be NULL-terminated. Source string must be
55 : : * NULL-terminated as well.
56 : : */
57 : : int string_unescape(char *src, char *dst, size_t size, unsigned int flags);
58 : :
59 : : static inline int string_unescape_inplace(char *buf, unsigned int flags)
60 : : {
61 : 0 : return string_unescape(buf, buf, 0, flags);
62 : : }
63 : :
64 : : static inline int string_unescape_any(char *src, char *dst, size_t size)
65 : : {
66 : : return string_unescape(src, dst, size, UNESCAPE_ANY);
67 : : }
68 : :
69 : : static inline int string_unescape_any_inplace(char *buf)
70 : : {
71 : : return string_unescape_any(buf, buf, 0);
72 : : }
73 : :
74 : : #endif
|