diff options
| author | 2023-02-02 03:37:17 +0100 | |
|---|---|---|
| committer | 2023-02-02 03:37:17 +0100 | |
| commit | ec07b0c59d0313faedd147d08a65ade0feaf88b9 (patch) | |
| tree | acef4e76b7a5fddc7ae6207a48e1ac07a1dd056d | |
| parent | Moved the angry emoticon above the sad one to avoid clashes. (diff) | |
| download | snac2-ec07b0c59d0313faedd147d08a65ade0feaf88b9.tar.gz snac2-ec07b0c59d0313faedd147d08a65ade0feaf88b9.tar.xz snac2-ec07b0c59d0313faedd147d08a65ade0feaf88b9.zip | |
Backport from xs.
| -rw-r--r-- | xs.h | 41 | ||||
| -rw-r--r-- | xs_curl.h | 4 | ||||
| -rw-r--r-- | xs_version.h | 2 |
3 files changed, 26 insertions, 21 deletions
| @@ -78,8 +78,8 @@ xs_list *xs_list_new(void); | |||
| 78 | xs_list *xs_list_append_m(xs_list *list, const char *mem, int dsz); | 78 | xs_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)) |
| 80 | int xs_list_iter(xs_list **list, xs_val **value); | 80 | int xs_list_iter(xs_list **list, xs_val **value); |
| 81 | int xs_list_len(xs_list *list); | 81 | int xs_list_len(const xs_list *list); |
| 82 | char *xs_list_get(xs_list *list, int num); | 82 | char *xs_list_get(const xs_list *list, int num); |
| 83 | xs_list *xs_list_del(xs_list *list, int num); | 83 | xs_list *xs_list_del(xs_list *list, int num); |
| 84 | xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data); | 84 | xs_list *xs_list_insert(xs_list *list, int num, const xs_val *data); |
| 85 | xs_list *xs_list_insert_sorted(xs_list *list, const char *str); | 85 | xs_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); | |||
| 87 | xs_list *xs_list_dequeue(xs_list *list, xs_val **data, int last); | 87 | xs_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) |
| 90 | int xs_list_in(xs_list *list, const xs_val *val); | 90 | int xs_list_in(const xs_list *list, const xs_val *val); |
| 91 | xs_str *xs_join(xs_list *list, const char *sep); | 91 | xs_str *xs_join(const xs_list *list, const char *sep); |
| 92 | xs_list *xs_split_n(const char *str, const char *sep, int times); | 92 | xs_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); | |||
| 96 | xs_dict *xs_dict_append_m(xs_dict *dict, const xs_str *key, const xs_val *mem, int dsz); | 96 | xs_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)) |
| 98 | int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); | 98 | int xs_dict_iter(xs_dict **dict, xs_str **key, xs_val **value); |
| 99 | xs_dict *xs_dict_get(xs_dict *dict, const xs_str *key); | 99 | xs_dict *xs_dict_get(const xs_dict *dict, const xs_str *key); |
| 100 | xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); | 100 | xs_dict *xs_dict_del(xs_dict *dict, const xs_str *key); |
| 101 | xs_dict *xs_dict_set(xs_dict *dict, const xs_str *key, const xs_val *data); | 101 | xs_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 | ||
| 613 | int xs_list_len(xs_list *list) | 613 | int 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 | ||
| 628 | xs_val *xs_list_get(xs_list *list, int num) | 629 | xs_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 | ||
| 743 | int xs_list_in(xs_list *list, const xs_val *val) | 745 | int 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 | ||
| 763 | xs_str *xs_join(xs_list *list, const char *sep) | 766 | xs_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 | ||
| 901 | xs_val *xs_dict_get(xs_dict *dict, const xs_str *key) | 905 | xs_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 | } |
| @@ -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 */ | ||