commit ec07b0c
default
·
2023-02-02 02:37:17 +0000 UTC
parent 6c03390
Backport from xs.
3 files changed,
+26,
-21
M
xs.h
+23,
-18
1@@ -78,8 +78,8 @@ xs_list *xs_list_new(void);
2 xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz);
3 #define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data))
4 int xs_list_iter(xs_list **list, xs_val **value);
5-int xs_list_len(xs_list *list);
6-char *xs_list_get(xs_list *list, int num);
7+int xs_list_len(const xs_list *list);
8+char *xs_list_get(const xs_list *list, int num);
9 xs_list *xs_list_del(xs_list *list, int num);
10 xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data);
11 xs_list *xs_list_insert_sorted(xs_list *list, const char *str);
12@@ -87,8 +87,8 @@ xs_list *xs_list_set(xs_list *list, int num, const xs_val *data);
13 xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last);
14 #define xs_list_pop(list, data) xs_list_dequeue(list, data, 1)
15 #define xs_list_shift(list, data) xs_list_dequeue(list, data, 0)
16-int xs_list_in(xs_list *list, const xs_val *val);
17-xs_str *xs_join(xs_list *list, const char *sep);
18+int xs_list_in(const xs_list *list, const xs_val *val);
19+xs_str *xs_join(const xs_list *list, const char *sep);
20 xs_list *xs_split_n(const char *str, const char *sep, int times);
21 #define xs_split(str, sep) xs_split_n(str, sep, XS_ALL)
22
23@@ -96,7 +96,7 @@ xs_dict *xs_dict_new(void);
24 xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz);
25 #define xs_dict_append(dict, key, data) xs_dict_append_m(dict, key, data, xs_size(data))
26 int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value);
27-xs_dict *xs_dict_get(xs_dict *dict, const xs_str *key);
28+xs_dict *xs_dict_get(const xs_dict *dict, const xs_str *key);
29 xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key);
30 xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data);
31
32@@ -610,33 +610,35 @@ int xs_list_iter(xs_list **list, xs_val **value)
33 }
34
35
36-int xs_list_len(xs_list *list)
37+int xs_list_len(const xs_list *list)
38 /* returns the number of elements in the list */
39 {
40 XS_ASSERT_TYPE_NULL(list, XSTYPE_LIST);
41
42 int c = 0;
43+ xs_list *p = (xs_list *)list;
44 xs_val *v;
45
46- while (xs_list_iter(&list, &v))
47+ while (xs_list_iter(&p, &v))
48 c++;
49
50 return c;
51 }
52
53
54-xs_val *xs_list_get(xs_list *list, int num)
55+xs_val *xs_list_get(const xs_list *list, int num)
56 /* returns the element #num */
57 {
58 XS_ASSERT_TYPE(list, XSTYPE_LIST);
59
60- int c = 0;
61- xs_val *v;
62-
63 if (num < 0)
64 num = xs_list_len(list) + num;
65
66- while (xs_list_iter(&list, &v)) {
67+ int c = 0;
68+ xs_list *p = (xs_list *)list;
69+ xs_val *v;
70+
71+ while (xs_list_iter(&p, &v)) {
72 if (c == num)
73 return v;
74
75@@ -740,16 +742,17 @@ xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last)
76 }
77
78
79-int xs_list_in(xs_list *list, const xs_val *val)
80+int xs_list_in(const xs_list *list, const xs_val *val)
81 /* returns the position of val in list or -1 */
82 {
83 XS_ASSERT_TYPE_NULL(list, XSTYPE_LIST);
84
85 int n = 0;
86+ xs_list *p = (xs_list *)list;
87 xs_val *v;
88 int sz = xs_size(val);
89
90- while (xs_list_iter(&list, &v)) {
91+ while (xs_list_iter(&p, &v)) {
92 if (sz == xs_size(v) && memcmp(val, v, sz) == 0)
93 return n;
94
95@@ -760,18 +763,19 @@ int xs_list_in(xs_list *list, const xs_val *val)
96 }
97
98
99-xs_str *xs_join(xs_list *list, const char *sep)
100+xs_str *xs_join(const xs_list *list, const char *sep)
101 /* joins a list into a string */
102 {
103 XS_ASSERT_TYPE(list, XSTYPE_LIST);
104
105 xs_str *s = NULL;
106+ xs_list *p = (xs_list *)list;
107 xs_val *v;
108 int c = 0;
109 int offset = 0;
110 int ssz = strlen(sep);
111
112- while (xs_list_iter(&list, &v)) {
113+ while (xs_list_iter(&p, &v)) {
114 /* refuse to join non-string values */
115 if (xs_type(v) == XSTYPE_STRING) {
116 int sz;
117@@ -898,16 +902,17 @@ int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value)
118 }
119
120
121-xs_val *xs_dict_get(xs_dict *dict, const xs_str *key)
122+xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key)
123 /* returns the value directed by key */
124 {
125 XS_ASSERT_TYPE(dict, XSTYPE_DICT);
126 XS_ASSERT_TYPE(key, XSTYPE_STRING);
127
128+ xs_dict *p = (xs_dict *)dict;
129 xs_str *k;
130 xs_val *v;
131
132- while (xs_dict_iter(&dict, &k, &v)) {
133+ while (xs_dict_iter(&p, &k, &v)) {
134 if (strcmp(k, key) == 0)
135 return v;
136 }
+2,
-2
1@@ -124,8 +124,8 @@ xs_dict *xs_http_request(char *method, char *url, xs_dict *headers,
2 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ipd);
3 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _data_callback);
4
5- if (strcmp(method, "POST") == 0) {
6- curl_easy_setopt(curl, CURLOPT_POST, 1L);
7+ if (strcmp(method, "POST") == 0 || strcmp(method, "PUT") == 0) {
8+ curl_easy_setopt(curl, method[1] == 'O' ? CURLOPT_POST : CURLOPT_PUT, 1L);
9
10 if (body != NULL) {
11 if (b_size <= 0)
+1,
-1
1@@ -1 +1 @@
2-/* 86f70ffc75a8c9601adde42146af65c14d41518a */
3+/* 452a86b01d695705a3f61a9b26208855c11118b1 */