/src/dovecot/src/lib/str.h
Line | Count | Source (jump to first uncovered line) |
1 | | #ifndef STR_H |
2 | | #define STR_H |
3 | | |
4 | | #include "buffer.h" |
5 | | |
6 | | string_t *str_new(pool_t pool, size_t initial_size); |
7 | | string_t *t_str_new(size_t initial_size); |
8 | | /* Allocate a constant string using the given str as the input data. |
9 | | str pointer is saved directly, so it must not be freed until the returned |
10 | | string is no longer used. len must contain strlen(str). */ |
11 | | string_t *str_new_const(pool_t pool, const char *str, size_t len); |
12 | | string_t *t_str_new_const(const char *str, size_t len); |
13 | | void str_free(string_t **str); |
14 | | char *str_free_without_data(string_t **str); |
15 | | |
16 | | const char *str_c(string_t *str); |
17 | | char *str_c_modifiable(string_t *str); |
18 | | bool str_equals(const string_t *str1, const string_t *str2) ATTR_PURE; |
19 | | |
20 | | static inline const unsigned char *str_data(const string_t *str) |
21 | 822 | { |
22 | 822 | return (const unsigned char*)str->data; |
23 | 822 | } Unexecuted instantiation: fuzz-imap-utf7.c:str_data Line | Count | Source | 21 | 822 | { | 22 | 822 | return (const unsigned char*)str->data; | 23 | 822 | } |
Unexecuted instantiation: data-stack.c:str_data Unexecuted instantiation: event-log.c:str_data Unexecuted instantiation: failures.c:str_data Unexecuted instantiation: iostream-pump.c:str_data Unexecuted instantiation: istream.c:str_data Unexecuted instantiation: lib-event.c:str_data Unexecuted instantiation: path-util.c:str_data Unexecuted instantiation: restrict-access.c:str_data Unexecuted instantiation: str.c:str_data Unexecuted instantiation: strescape.c:str_data Unexecuted instantiation: strfuncs.c:str_data Unexecuted instantiation: unichar.c:str_data Unexecuted instantiation: backtrace-string.c:str_data Unexecuted instantiation: event-filter.c:str_data Unexecuted instantiation: event-filter-lexer.c:str_data Unexecuted instantiation: wildcard-match.c:str_data |
24 | | static inline size_t str_len(const string_t *str) |
25 | 87.9k | { |
26 | 87.9k | return str->used; |
27 | 87.9k | } Unexecuted instantiation: fuzz-imap-utf7.c:str_len Line | Count | Source | 25 | 87.9k | { | 26 | 87.9k | return str->used; | 27 | 87.9k | } |
Unexecuted instantiation: data-stack.c:str_len Unexecuted instantiation: event-log.c:str_len Unexecuted instantiation: failures.c:str_len Unexecuted instantiation: iostream-pump.c:str_len Unexecuted instantiation: istream.c:str_len Unexecuted instantiation: lib-event.c:str_len Unexecuted instantiation: path-util.c:str_len Unexecuted instantiation: restrict-access.c:str_len Unexecuted instantiation: str.c:str_len Unexecuted instantiation: strescape.c:str_len Unexecuted instantiation: strfuncs.c:str_len Unexecuted instantiation: unichar.c:str_len Unexecuted instantiation: backtrace-string.c:str_len Unexecuted instantiation: event-filter.c:str_len Unexecuted instantiation: event-filter-lexer.c:str_len Unexecuted instantiation: wildcard-match.c:str_len |
28 | | |
29 | | /* Append NUL-terminated string. If the trailing NUL isn't found earlier, |
30 | | append a maximum of max_len characters. */ |
31 | | void str_append_max(string_t *str, const char *cstr, size_t max_len); |
32 | | |
33 | | static inline void str_append(string_t *str, const char *cstr) |
34 | 1.26M | { |
35 | 1.26M | buffer_append(str, cstr, strlen(cstr)); |
36 | 1.26M | } Unexecuted instantiation: fuzz-imap-utf7.c:str_append Line | Count | Source | 34 | 1.26M | { | 35 | 1.26M | buffer_append(str, cstr, strlen(cstr)); | 36 | 1.26M | } |
Unexecuted instantiation: data-stack.c:str_append Unexecuted instantiation: event-log.c:str_append Unexecuted instantiation: failures.c:str_append Unexecuted instantiation: iostream-pump.c:str_append Unexecuted instantiation: istream.c:str_append Unexecuted instantiation: lib-event.c:str_append Unexecuted instantiation: path-util.c:str_append Unexecuted instantiation: restrict-access.c:str_append Unexecuted instantiation: str.c:str_append Unexecuted instantiation: strescape.c:str_append Unexecuted instantiation: strfuncs.c:str_append Unexecuted instantiation: unichar.c:str_append Unexecuted instantiation: backtrace-string.c:str_append Unexecuted instantiation: event-filter.c:str_append Unexecuted instantiation: event-filter-lexer.c:str_append Unexecuted instantiation: wildcard-match.c:str_append |
37 | | static inline void str_append_data(string_t *str, const void *data, size_t len) |
38 | 2.00k | { |
39 | 2.00k | buffer_append(str, data, len); |
40 | 2.00k | } Unexecuted instantiation: fuzz-imap-utf7.c:str_append_data imap-utf7.c:str_append_data Line | Count | Source | 38 | 2.00k | { | 39 | 2.00k | buffer_append(str, data, len); | 40 | 2.00k | } |
Unexecuted instantiation: data-stack.c:str_append_data Unexecuted instantiation: event-log.c:str_append_data Unexecuted instantiation: failures.c:str_append_data Unexecuted instantiation: iostream-pump.c:str_append_data Unexecuted instantiation: istream.c:str_append_data Unexecuted instantiation: lib-event.c:str_append_data Unexecuted instantiation: path-util.c:str_append_data Unexecuted instantiation: restrict-access.c:str_append_data Unexecuted instantiation: str.c:str_append_data Unexecuted instantiation: strescape.c:str_append_data Unexecuted instantiation: strfuncs.c:str_append_data Unexecuted instantiation: unichar.c:str_append_data Unexecuted instantiation: backtrace-string.c:str_append_data Unexecuted instantiation: event-filter.c:str_append_data Unexecuted instantiation: event-filter-lexer.c:str_append_data Unexecuted instantiation: wildcard-match.c:str_append_data |
41 | | |
42 | | static inline void str_append_c(string_t *str, unsigned char chr) |
43 | 67.7M | { |
44 | 67.7M | buffer_append_c(str, chr); |
45 | 67.7M | } Unexecuted instantiation: fuzz-imap-utf7.c:str_append_c Line | Count | Source | 43 | 67.7M | { | 44 | 67.7M | buffer_append_c(str, chr); | 45 | 67.7M | } |
Unexecuted instantiation: data-stack.c:str_append_c Unexecuted instantiation: event-log.c:str_append_c Unexecuted instantiation: failures.c:str_append_c Unexecuted instantiation: iostream-pump.c:str_append_c Unexecuted instantiation: istream.c:str_append_c Unexecuted instantiation: lib-event.c:str_append_c Unexecuted instantiation: path-util.c:str_append_c Unexecuted instantiation: restrict-access.c:str_append_c Unexecuted instantiation: str.c:str_append_c Unexecuted instantiation: strescape.c:str_append_c Unexecuted instantiation: strfuncs.c:str_append_c Unexecuted instantiation: unichar.c:str_append_c Unexecuted instantiation: backtrace-string.c:str_append_c Unexecuted instantiation: event-filter.c:str_append_c Unexecuted instantiation: event-filter-lexer.c:str_append_c Unexecuted instantiation: wildcard-match.c:str_append_c |
46 | | /* This macro ensures we add unsigned char to str to avoid |
47 | | implicit casts which cause errors with clang's implicit integer truncation |
48 | | sanitizer. Issues caught by these sanitizers are not undefined behavior, |
49 | | but are often unintentional. |
50 | | We also need to check that the type we are adding is compatible with char, |
51 | | so that we don't end up doing a narrowing cast. */ |
52 | | #ifdef HAVE_TYPE_CHECKS |
53 | | # define str_append_c(str, chr) \ |
54 | 67.7M | str_append_c((str), __builtin_choose_expr( \ |
55 | 67.7M | __builtin_types_compatible_p(typeof((chr)), char), \ |
56 | 67.7M | (unsigned char)(chr), (chr))) |
57 | | #endif |
58 | | |
59 | | static inline void str_append_str(string_t *dest, const string_t *src) |
60 | 0 | { |
61 | 0 | buffer_append(dest, src->data, src->used); |
62 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:str_append_str Unexecuted instantiation: imap-utf7.c:str_append_str Unexecuted instantiation: data-stack.c:str_append_str Unexecuted instantiation: event-log.c:str_append_str Unexecuted instantiation: failures.c:str_append_str Unexecuted instantiation: iostream-pump.c:str_append_str Unexecuted instantiation: istream.c:str_append_str Unexecuted instantiation: lib-event.c:str_append_str Unexecuted instantiation: path-util.c:str_append_str Unexecuted instantiation: restrict-access.c:str_append_str Unexecuted instantiation: str.c:str_append_str Unexecuted instantiation: strescape.c:str_append_str Unexecuted instantiation: strfuncs.c:str_append_str Unexecuted instantiation: unichar.c:str_append_str Unexecuted instantiation: backtrace-string.c:str_append_str Unexecuted instantiation: event-filter.c:str_append_str Unexecuted instantiation: event-filter-lexer.c:str_append_str Unexecuted instantiation: wildcard-match.c:str_append_str |
63 | | |
64 | | /* Append printf()-like data */ |
65 | | void str_printfa(string_t *str, const char *fmt, ...) |
66 | | ATTR_FORMAT(2, 3); |
67 | | void str_vprintfa(string_t *str, const char *fmt, va_list args) |
68 | | ATTR_FORMAT(2, 0); |
69 | | |
70 | | static inline void str_insert(string_t *str, size_t pos, const char *cstr) |
71 | 0 | { |
72 | 0 | buffer_insert(str, pos, cstr, strlen(cstr)); |
73 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:str_insert Unexecuted instantiation: imap-utf7.c:str_insert Unexecuted instantiation: data-stack.c:str_insert Unexecuted instantiation: event-log.c:str_insert Unexecuted instantiation: failures.c:str_insert Unexecuted instantiation: iostream-pump.c:str_insert Unexecuted instantiation: istream.c:str_insert Unexecuted instantiation: lib-event.c:str_insert Unexecuted instantiation: path-util.c:str_insert Unexecuted instantiation: restrict-access.c:str_insert Unexecuted instantiation: str.c:str_insert Unexecuted instantiation: strescape.c:str_insert Unexecuted instantiation: strfuncs.c:str_insert Unexecuted instantiation: unichar.c:str_insert Unexecuted instantiation: backtrace-string.c:str_insert Unexecuted instantiation: event-filter.c:str_insert Unexecuted instantiation: event-filter-lexer.c:str_insert Unexecuted instantiation: wildcard-match.c:str_insert |
74 | | |
75 | | static inline void str_delete(string_t *str, size_t pos, size_t len) |
76 | 0 | { |
77 | 0 | buffer_delete(str, pos, len); |
78 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:str_delete Unexecuted instantiation: imap-utf7.c:str_delete Unexecuted instantiation: data-stack.c:str_delete Unexecuted instantiation: event-log.c:str_delete Unexecuted instantiation: failures.c:str_delete Unexecuted instantiation: iostream-pump.c:str_delete Unexecuted instantiation: istream.c:str_delete Unexecuted instantiation: lib-event.c:str_delete Unexecuted instantiation: path-util.c:str_delete Unexecuted instantiation: restrict-access.c:str_delete Unexecuted instantiation: str.c:str_delete Unexecuted instantiation: strescape.c:str_delete Unexecuted instantiation: strfuncs.c:str_delete Unexecuted instantiation: unichar.c:str_delete Unexecuted instantiation: backtrace-string.c:str_delete Unexecuted instantiation: event-filter.c:str_delete Unexecuted instantiation: event-filter-lexer.c:str_delete Unexecuted instantiation: wildcard-match.c:str_delete |
79 | | |
80 | | static inline void str_replace(string_t *str, size_t pos, size_t len, |
81 | | const char *cstr) |
82 | 0 | { |
83 | 0 | buffer_replace(str, pos, len, cstr, strlen(cstr)); |
84 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:str_replace Unexecuted instantiation: imap-utf7.c:str_replace Unexecuted instantiation: data-stack.c:str_replace Unexecuted instantiation: event-log.c:str_replace Unexecuted instantiation: failures.c:str_replace Unexecuted instantiation: iostream-pump.c:str_replace Unexecuted instantiation: istream.c:str_replace Unexecuted instantiation: lib-event.c:str_replace Unexecuted instantiation: path-util.c:str_replace Unexecuted instantiation: restrict-access.c:str_replace Unexecuted instantiation: str.c:str_replace Unexecuted instantiation: strescape.c:str_replace Unexecuted instantiation: strfuncs.c:str_replace Unexecuted instantiation: unichar.c:str_replace Unexecuted instantiation: backtrace-string.c:str_replace Unexecuted instantiation: event-filter.c:str_replace Unexecuted instantiation: event-filter-lexer.c:str_replace Unexecuted instantiation: wildcard-match.c:str_replace |
85 | | |
86 | | /* Truncate the string to specified length. If it's already smaller, |
87 | | do nothing. */ |
88 | | static inline void str_truncate(string_t *str, size_t len) |
89 | 0 | { |
90 | 0 | if (str_len(str) > len) |
91 | 0 | buffer_set_used_size(str, len); |
92 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:str_truncate Unexecuted instantiation: imap-utf7.c:str_truncate Unexecuted instantiation: data-stack.c:str_truncate Unexecuted instantiation: event-log.c:str_truncate Unexecuted instantiation: failures.c:str_truncate Unexecuted instantiation: iostream-pump.c:str_truncate Unexecuted instantiation: istream.c:str_truncate Unexecuted instantiation: lib-event.c:str_truncate Unexecuted instantiation: path-util.c:str_truncate Unexecuted instantiation: restrict-access.c:str_truncate Unexecuted instantiation: str.c:str_truncate Unexecuted instantiation: strescape.c:str_truncate Unexecuted instantiation: strfuncs.c:str_truncate Unexecuted instantiation: unichar.c:str_truncate Unexecuted instantiation: backtrace-string.c:str_truncate Unexecuted instantiation: event-filter.c:str_truncate Unexecuted instantiation: event-filter-lexer.c:str_truncate Unexecuted instantiation: wildcard-match.c:str_truncate |
93 | | |
94 | | /* Clear the string */ |
95 | | static inline void str_clear(string_t *str) |
96 | 0 | { |
97 | 0 | buffer_clear(str); |
98 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:str_clear Unexecuted instantiation: imap-utf7.c:str_clear Unexecuted instantiation: data-stack.c:str_clear Unexecuted instantiation: event-log.c:str_clear Unexecuted instantiation: failures.c:str_clear Unexecuted instantiation: iostream-pump.c:str_clear Unexecuted instantiation: istream.c:str_clear Unexecuted instantiation: lib-event.c:str_clear Unexecuted instantiation: path-util.c:str_clear Unexecuted instantiation: restrict-access.c:str_clear Unexecuted instantiation: str.c:str_clear Unexecuted instantiation: strescape.c:str_clear Unexecuted instantiation: strfuncs.c:str_clear Unexecuted instantiation: unichar.c:str_clear Unexecuted instantiation: backtrace-string.c:str_clear Unexecuted instantiation: event-filter.c:str_clear Unexecuted instantiation: event-filter-lexer.c:str_clear Unexecuted instantiation: wildcard-match.c:str_clear |
99 | | static inline void str_clear_safe(string_t *str) |
100 | 0 | { |
101 | 0 | buffer_clear_safe(str); |
102 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:str_clear_safe Unexecuted instantiation: imap-utf7.c:str_clear_safe Unexecuted instantiation: data-stack.c:str_clear_safe Unexecuted instantiation: event-log.c:str_clear_safe Unexecuted instantiation: failures.c:str_clear_safe Unexecuted instantiation: iostream-pump.c:str_clear_safe Unexecuted instantiation: istream.c:str_clear_safe Unexecuted instantiation: lib-event.c:str_clear_safe Unexecuted instantiation: path-util.c:str_clear_safe Unexecuted instantiation: restrict-access.c:str_clear_safe Unexecuted instantiation: str.c:str_clear_safe Unexecuted instantiation: strescape.c:str_clear_safe Unexecuted instantiation: strfuncs.c:str_clear_safe Unexecuted instantiation: unichar.c:str_clear_safe Unexecuted instantiation: backtrace-string.c:str_clear_safe Unexecuted instantiation: event-filter.c:str_clear_safe Unexecuted instantiation: event-filter-lexer.c:str_clear_safe Unexecuted instantiation: wildcard-match.c:str_clear_safe |
103 | | |
104 | | /* Truncate the string to specified length, but also make sure the truncation |
105 | | doesn't happen in the middle of an UTF-8 character sequence. In that case, |
106 | | the string will end up being up to a few bytes smaller than len. If it's |
107 | | already smaller to begin with, do nothing. */ |
108 | | void str_truncate_utf8(string_t *str, size_t len); |
109 | | |
110 | | #endif |