commit efe0a09
default
·
2023-03-18 09:28:04 +0000 UTC
parent ba78706
Backport from xs.
2 files changed,
+10,
-16
M
xs.h
M
xs.h
+9,
-15
1@@ -69,8 +69,9 @@ xs_str *xs_replace_i(xs_str *str, const char *sfrom, const char *sto);
2 #define xs_replace(str, sfrom, sto) xs_replace_i(xs_dup(str), sfrom, sto)
3 xs_str *xs_fmt(const char *fmt, ...);
4 int xs_str_in(const char *haystack, const char *needle);
5-int xs_startswith(const char *str, const char *prefix);
6-int xs_endswith(const char *str, const char *postfix);
7+int _xs_startsorends(const char *str, const char *xfix, int ends);
8+#define xs_startswith(str, prefix) _xs_startsorends(str, prefix, 0)
9+#define xs_endswith(str, postfix) _xs_startsorends(str, postfix, 1)
10 xs_str *xs_crop_i(xs_str *str, int start, int end);
11 xs_str *xs_strip_chars_i(xs_str *str, const char *chars);
12 #define xs_strip_i(str) xs_strip_chars_i(str, " \r\n\t\v\f")
13@@ -81,7 +82,7 @@ xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz);
14 #define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data))
15 int xs_list_iter(xs_list **list, xs_val **value);
16 int xs_list_len(const xs_list *list);
17-char *xs_list_get(const xs_list *list, int num);
18+xs_val *xs_list_get(const xs_list *list, int num);
19 xs_list *xs_list_del(xs_list *list, int num);
20 xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data);
21 xs_list *xs_list_insert_sorted(xs_list *list, const char *str);
22@@ -100,7 +101,7 @@ xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, i
23 xs_dict *xs_dict_prepend_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz);
24 #define xs_dict_prepend(dict, key, data) xs_dict_prepend_m(dict, key, data, xs_size(data))
25 int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value);
26-xs_dict *xs_dict_get(const xs_dict *dict, const xs_str *key);
27+xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key);
28 xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key);
29 xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data);
30
31@@ -475,20 +476,13 @@ int xs_str_in(const char *haystack, const char *needle)
32 }
33
34
35-int xs_startswith(const char *str, const char *prefix)
36-/* returns true if str starts with prefix */
37-{
38- return !!(xs_str_in(str, prefix) == 0);
39-}
40-
41-
42-int xs_endswith(const char *str, const char *postfix)
43-/* returns true if str ends with postfix */
44+int _xs_startsorends(const char *str, const char *xfix, int ends)
45+/* returns true if str starts or ends with xfix */
46 {
47 int ssz = strlen(str);
48- int psz = strlen(postfix);
49+ int psz = strlen(xfix);
50
51- return !!(ssz >= psz && memcmp(postfix, str + ssz - psz, psz) == 0);
52+ return !!(ssz >= psz && memcmp(xfix, str + (ends ? ssz - psz : 0), psz) == 0);
53 }
54
55
+1,
-1
1@@ -1 +1 @@
2-/* ee3466736d01d22d67ec800dbd4d3b0ccc4251b1 */
3+/* a261bec376598d97dc10eb19f4ecb765333d071b */