This source file includes following definitions.
- pcmk__intkey_table
- pcmk__intkey_table_insert
- pcmk__intkey_table_lookup
- pcmk__intkey_table_remove
- pcmk__strcase_any_of
- pcmk__add_word
- pcmk__str_empty
- pcmk__itoa
- pcmk__ftoa
- pcmk__ttoa
- pcmk__btoa
1
2
3
4
5
6
7
8
9
10 #ifndef PCMK__STRINGS_INTERNAL__H
11 #define PCMK__STRINGS_INTERNAL__H
12
13 #include <stdbool.h>
14
15 #include <glib.h>
16
17
18
19 #define PCMK__PARSE_INT_DEFAULT -1
20 #define PCMK__PARSE_DBL_DEFAULT -1.0
21
22
23
24 enum pcmk__str_flags {
25 pcmk__str_none = 0,
26 pcmk__str_casei = 1 << 0,
27 pcmk__str_null_matches = 1 << 1,
28 pcmk__str_regex = 1 << 2,
29 pcmk__str_star_matches = 1 << 3,
30 };
31
32 int pcmk__scan_double(const char *text, double *result,
33 const char *default_text, char **end_text);
34 int pcmk__guint_from_hash(GHashTable *table, const char *key, guint default_val,
35 guint *result);
36 bool pcmk__starts_with(const char *str, const char *prefix);
37 bool pcmk__ends_with(const char *s, const char *match);
38 bool pcmk__ends_with_ext(const char *s, const char *match);
39 char *pcmk__trim(char *str);
40 void pcmk__add_separated_word(char **list, size_t *len, const char *word,
41 const char *separator);
42 int pcmk__compress(const char *data, unsigned int length, unsigned int max,
43 char **result, unsigned int *result_len);
44
45 int pcmk__scan_ll(const char *text, long long *result, long long default_value);
46 int pcmk__scan_min_int(const char *text, int *result, int minimum);
47 int pcmk__scan_port(const char *text, int *port);
48 int pcmk__parse_ll_range(const char *srcstring, long long *start, long long *end);
49
50 GHashTable *pcmk__strkey_table(GDestroyNotify key_destroy_func,
51 GDestroyNotify value_destroy_func);
52 GHashTable *pcmk__strikey_table(GDestroyNotify key_destroy_func,
53 GDestroyNotify value_destroy_func);
54 GHashTable *pcmk__str_table_dup(GHashTable *old_table);
55
56
57
58
59
60
61
62
63
64
65
66 static inline GHashTable *
67 pcmk__intkey_table(GDestroyNotify value_destroy_func)
68 {
69 return g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL,
70 value_destroy_func);
71 }
72
73
74
75
76
77
78
79
80
81
82
83
84
85 static inline gboolean
86 pcmk__intkey_table_insert(GHashTable *hash_table, int key, gpointer value)
87 {
88 return g_hash_table_insert(hash_table, GINT_TO_POINTER(key), value);
89 }
90
91
92
93
94
95
96
97
98
99
100 static inline gpointer
101 pcmk__intkey_table_lookup(GHashTable *hash_table, int key)
102 {
103 return g_hash_table_lookup(hash_table, GINT_TO_POINTER(key));
104 }
105
106
107
108
109
110
111
112
113
114
115 static inline gboolean
116 pcmk__intkey_table_remove(GHashTable *hash_table, int key)
117 {
118 return g_hash_table_remove(hash_table, GINT_TO_POINTER(key));
119 }
120
121 gboolean pcmk__str_in_list(const gchar *s, GList *lst, uint32_t flags);
122
123 bool pcmk__strcase_any_of(const char *s, ...) G_GNUC_NULL_TERMINATED;
124 bool pcmk__str_any_of(const char *s, ...) G_GNUC_NULL_TERMINATED;
125 bool pcmk__char_in_any_str(int ch, ...) G_GNUC_NULL_TERMINATED;
126
127 int pcmk__strcmp(const char *s1, const char *s2, uint32_t flags);
128 int pcmk__numeric_strcasecmp(const char *s1, const char *s2);
129
130 static inline bool
131 pcmk__str_eq(const char *s1, const char *s2, uint32_t flags)
132 {
133 return pcmk__strcmp(s1, s2, flags) == 0;
134 }
135
136
137 static inline void
138 pcmk__add_word(char **list, size_t *len, const char *word)
139 {
140 return pcmk__add_separated_word(list, len, word, " ");
141 }
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161 #define pcmk__plural_alt(i, s1, s2) (((i) == 1)? (s1) : (s2))
162
163
164 #define pcmk__plural_s(i) pcmk__plural_alt(i, "", "s")
165
166 static inline int
167 pcmk__str_empty(const char *s)
168 {
169 return (s == NULL) || (s[0] == '\0');
170 }
171
172 static inline char *
173 pcmk__itoa(int an_int)
174 {
175 return crm_strdup_printf("%d", an_int);
176 }
177
178 static inline char *
179 pcmk__ftoa(double a_float)
180 {
181 return crm_strdup_printf("%f", a_float);
182 }
183
184 static inline char *
185 pcmk__ttoa(time_t epoch_time)
186 {
187 return crm_strdup_printf("%lld", (long long) epoch_time);
188 }
189
190
191 static inline const char *
192 pcmk__btoa(bool condition)
193 {
194 return condition? "true" : "false";
195 }
196
197 #endif