summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2023-02-02 03:37:17 +0100
committerGravatar default2023-02-02 03:37:17 +0100
commitec07b0c59d0313faedd147d08a65ade0feaf88b9 (patch)
treeacef4e76b7a5fddc7ae6207a48e1ac07a1dd056d
parentMoved the angry emoticon above the sad one to avoid clashes. (diff)
downloadpenes-snac2-ec07b0c59d0313faedd147d08a65ade0feaf88b9.tar.gz
penes-snac2-ec07b0c59d0313faedd147d08a65ade0feaf88b9.tar.xz
penes-snac2-ec07b0c59d0313faedd147d08a65ade0feaf88b9.zip
Backport from xs.
-rw-r--r--xs.h41
-rw-r--r--xs_curl.h4
-rw-r--r--xs_version.h2
3 files changed, 26 insertions, 21 deletions
diff --git a/xs.h b/xs.h
index 28b2725..2be297b 100644
--- a/xs.h
+++ b/xs.h
@@ -78,8 +78,8 @@ xs_list *xs_list_new(void);
78xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz); 78xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz);
79#define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data)) 79#define xs_list_append(list, data) xs_list_append_m(list, data, xs_size(data))
80int xs_list_iter(xs_list **list, xs_val **value); 80int xs_list_iter(xs_list **list, xs_val **value);
81int xs_list_len(xs_list *list); 81int xs_list_len(const xs_list *list);
82char *xs_list_get(xs_list *list, int num); 82char *xs_list_get(const xs_list *list, int num);
83xs_list *xs_list_del(xs_list *list, int num); 83xs_list *xs_list_del(xs_list *list, int num);
84xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data); 84xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data);
85xs_list *xs_list_insert_sorted(xs_list *list, const char *str); 85xs_list *xs_list_insert_sorted(xs_list *list, const char *str);
@@ -87,8 +87,8 @@ xs_list *xs_list_set(xs_list *list, int num, const xs_val *data);
87xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last); 87xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last);
88#define xs_list_pop(list, data) xs_list_dequeue(list, data, 1) 88#define xs_list_pop(list, data) xs_list_dequeue(list, data, 1)
89#define xs_list_shift(list, data) xs_list_dequeue(list, data, 0) 89#define xs_list_shift(list, data) xs_list_dequeue(list, data, 0)
90int xs_list_in(xs_list *list, const xs_val *val); 90int xs_list_in(const xs_list *list, const xs_val *val);
91xs_str *xs_join(xs_list *list, const char *sep); 91xs_str *xs_join(const xs_list *list, const char *sep);
92xs_list *xs_split_n(const char *str, const char *sep, int times); 92xs_list *xs_split_n(const char *str, const char *sep, int times);
93#define xs_split(str, sep) xs_split_n(str, sep, XS_ALL) 93#define xs_split(str, sep) xs_split_n(str, sep, XS_ALL)
94 94
@@ -96,7 +96,7 @@ xs_dict *xs_dict_new(void);
96xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); 96xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz);
97#define xs_dict_append(dict, key, data) xs_dict_append_m(dict, key, data, xs_size(data)) 97#define xs_dict_append(dict, key, data) xs_dict_append_m(dict, key, data, xs_size(data))
98int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); 98int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value);
99xs_dict *xs_dict_get(xs_dict *dict, const xs_str *key); 99xs_dict *xs_dict_get(const xs_dict *dict, const xs_str *key);
100xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); 100xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key);
101xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data); 101xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data);
102 102
@@ -610,33 +610,35 @@ int xs_list_iter(xs_list **list, xs_val **value)
610} 610}
611 611
612 612
613int xs_list_len(xs_list *list) 613int xs_list_len(const xs_list *list)
614/* returns the number of elements in the list */ 614/* returns the number of elements in the list */
615{ 615{
616 XS_ASSERT_TYPE_NULL(list, XSTYPE_LIST); 616 XS_ASSERT_TYPE_NULL(list, XSTYPE_LIST);
617 617
618 int c = 0; 618 int c = 0;
619 xs_list *p = (xs_list *)list;
619 xs_val *v; 620 xs_val *v;
620 621
621 while (xs_list_iter(&list, &v)) 622 while (xs_list_iter(&p, &v))
622 c++; 623 c++;
623 624
624 return c; 625 return c;
625} 626}
626 627
627 628
628xs_val *xs_list_get(xs_list *list, int num) 629xs_val *xs_list_get(const xs_list *list, int num)
629/* returns the element #num */ 630/* returns the element #num */
630{ 631{
631 XS_ASSERT_TYPE(list, XSTYPE_LIST); 632 XS_ASSERT_TYPE(list, XSTYPE_LIST);
632 633
633 int c = 0;
634 xs_val *v;
635
636 if (num < 0) 634 if (num < 0)
637 num = xs_list_len(list) + num; 635 num = xs_list_len(list) + num;
638 636
639 while (xs_list_iter(&list, &v)) { 637 int c = 0;
638 xs_list *p = (xs_list *)list;
639 xs_val *v;
640
641 while (xs_list_iter(&p, &v)) {
640 if (c == num) 642 if (c == num)
641 return v; 643 return v;
642 644
@@ -740,16 +742,17 @@ xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last)
740} 742}
741 743
742 744
743int xs_list_in(xs_list *list, const xs_val *val) 745int xs_list_in(const xs_list *list, const xs_val *val)
744/* returns the position of val in list or -1 */ 746/* returns the position of val in list or -1 */
745{ 747{
746 XS_ASSERT_TYPE_NULL(list, XSTYPE_LIST); 748 XS_ASSERT_TYPE_NULL(list, XSTYPE_LIST);
747 749
748 int n = 0; 750 int n = 0;
751 xs_list *p = (xs_list *)list;
749 xs_val *v; 752 xs_val *v;
750 int sz = xs_size(val); 753 int sz = xs_size(val);
751 754
752 while (xs_list_iter(&list, &v)) { 755 while (xs_list_iter(&p, &v)) {
753 if (sz == xs_size(v) && memcmp(val, v, sz) == 0) 756 if (sz == xs_size(v) && memcmp(val, v, sz) == 0)
754 return n; 757 return n;
755 758
@@ -760,18 +763,19 @@ int xs_list_in(xs_list *list, const xs_val *val)
760} 763}
761 764
762 765
763xs_str *xs_join(xs_list *list, const char *sep) 766xs_str *xs_join(const xs_list *list, const char *sep)
764/* joins a list into a string */ 767/* joins a list into a string */
765{ 768{
766 XS_ASSERT_TYPE(list, XSTYPE_LIST); 769 XS_ASSERT_TYPE(list, XSTYPE_LIST);
767 770
768 xs_str *s = NULL; 771 xs_str *s = NULL;
772 xs_list *p = (xs_list *)list;
769 xs_val *v; 773 xs_val *v;
770 int c = 0; 774 int c = 0;
771 int offset = 0; 775 int offset = 0;
772 int ssz = strlen(sep); 776 int ssz = strlen(sep);
773 777
774 while (xs_list_iter(&list, &v)) { 778 while (xs_list_iter(&p, &v)) {
775 /* refuse to join non-string values */ 779 /* refuse to join non-string values */
776 if (xs_type(v) == XSTYPE_STRING) { 780 if (xs_type(v) == XSTYPE_STRING) {
777 int sz; 781 int sz;
@@ -898,16 +902,17 @@ int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value)
898} 902}
899 903
900 904
901xs_val *xs_dict_get(xs_dict *dict, const xs_str *key) 905xs_val *xs_dict_get(const xs_dict *dict, const xs_str *key)
902/* returns the value directed by key */ 906/* returns the value directed by key */
903{ 907{
904 XS_ASSERT_TYPE(dict, XSTYPE_DICT); 908 XS_ASSERT_TYPE(dict, XSTYPE_DICT);
905 XS_ASSERT_TYPE(key, XSTYPE_STRING); 909 XS_ASSERT_TYPE(key, XSTYPE_STRING);
906 910
911 xs_dict *p = (xs_dict *)dict;
907 xs_str *k; 912 xs_str *k;
908 xs_val *v; 913 xs_val *v;
909 914
910 while (xs_dict_iter(&dict, &k, &v)) { 915 while (xs_dict_iter(&p, &k, &v)) {
911 if (strcmp(k, key) == 0) 916 if (strcmp(k, key) == 0)
912 return v; 917 return v;
913 } 918 }
diff --git a/xs_curl.h b/xs_curl.h
index 45f3a91..2637c02 100644
--- a/xs_curl.h
+++ b/xs_curl.h
@@ -124,8 +124,8 @@ xs_dict *xs_http_request(char *method, char *url, xs_dict *headers,
124 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ipd); 124 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ipd);
125 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _data_callback); 125 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _data_callback);
126 126
127 if (strcmp(method, "POST") == 0) { 127 if (strcmp(method, "POST") == 0 || strcmp(method, "PUT") == 0) {
128 curl_easy_setopt(curl, CURLOPT_POST, 1L); 128 curl_easy_setopt(curl, method[1] == 'O' ? CURLOPT_POST : CURLOPT_PUT, 1L);
129 129
130 if (body != NULL) { 130 if (body != NULL) {
131 if (b_size <= 0) 131 if (b_size <= 0)
diff --git a/xs_version.h b/xs_version.h
index 0fe4322..0429b2e 100644
--- a/xs_version.h
+++ b/xs_version.h
@@ -1 +1 @@
/* 86f70ffc75a8c9601adde42146af65c14d41518a */ /* 452a86b01d695705a3f61a9b26208855c11118b1 */