commit ec07b0c

default  ·  2023-02-02 02:37:17 +0000 UTC
parent 6c03390
Backport from xs.
3 files changed,  +26, -21
M xs.h
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 */