at v3.11-rc2 2.1 kB view raw
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 */ 8enum 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 13int 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 */ 57int string_unescape(char *src, char *dst, size_t size, unsigned int flags); 58 59static inline int string_unescape_inplace(char *buf, unsigned int flags) 60{ 61 return string_unescape(buf, buf, 0, flags); 62} 63 64static inline int string_unescape_any(char *src, char *dst, size_t size) 65{ 66 return string_unescape(src, dst, size, UNESCAPE_ANY); 67} 68 69static inline int string_unescape_any_inplace(char *buf) 70{ 71 return string_unescape_any(buf, buf, 0); 72} 73 74#endif