diff options
| author | 2024-03-15 04:10:11 +0100 | |
|---|---|---|
| committer | 2024-03-15 04:10:11 +0100 | |
| commit | 7aa5250eb8c68472e476faf8399e98f2ba9a9c3b (patch) | |
| tree | c18ee69ac1bbf727d9295be9a62820badce8df22 | |
| parent | Updated TODO. (diff) | |
| download | penes-snac2-7aa5250eb8c68472e476faf8399e98f2ba9a9c3b.tar.gz penes-snac2-7aa5250eb8c68472e476faf8399e98f2ba9a9c3b.tar.xz penes-snac2-7aa5250eb8c68472e476faf8399e98f2ba9a9c3b.zip | |
Backport from xs.
| -rw-r--r-- | activitypub.c | 4 | ||||
| -rw-r--r-- | html.c | 28 | ||||
| -rw-r--r-- | httpd.c | 2 | ||||
| -rw-r--r-- | mastoapi.c | 118 | ||||
| -rw-r--r-- | xs.h | 99 | ||||
| -rw-r--r-- | xs_version.h | 2 |
6 files changed, 138 insertions, 115 deletions
diff --git a/activitypub.c b/activitypub.c index fae0c15..eb1552d 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -1074,7 +1074,7 @@ xs_dict *msg_collection(snac *snac, char *id) | |||
| 1074 | 1074 | ||
| 1075 | msg = xs_dict_append(msg, "attributedTo", snac->actor); | 1075 | msg = xs_dict_append(msg, "attributedTo", snac->actor); |
| 1076 | msg = xs_dict_append(msg, "orderedItems", ol); | 1076 | msg = xs_dict_append(msg, "orderedItems", ol); |
| 1077 | msg = xs_dict_append(msg, "totalItems", xs_stock_0); | 1077 | msg = xs_dict_append(msg, "totalItems", xs_stock(0)); |
| 1078 | 1078 | ||
| 1079 | return msg; | 1079 | return msg; |
| 1080 | } | 1080 | } |
| @@ -1610,7 +1610,7 @@ int update_question(snac *user, const char *id) | |||
| 1610 | const char *name = xs_dict_get(v, "name"); | 1610 | const char *name = xs_dict_get(v, "name"); |
| 1611 | if (name) { | 1611 | if (name) { |
| 1612 | lopts = xs_list_append(lopts, name); | 1612 | lopts = xs_list_append(lopts, name); |
| 1613 | rcnt = xs_dict_set(rcnt, name, xs_stock_0); | 1613 | rcnt = xs_dict_set(rcnt, name, xs_stock(0)); |
| 1614 | } | 1614 | } |
| 1615 | } | 1615 | } |
| 1616 | 1616 | ||
| @@ -774,7 +774,7 @@ static xs_html *html_user_body(snac *user, int read_only) | |||
| 774 | 774 | ||
| 775 | xs_dict *val_links = user->links; | 775 | xs_dict *val_links = user->links; |
| 776 | if (xs_is_null(val_links)) | 776 | if (xs_is_null(val_links)) |
| 777 | val_links = xs_stock_dict; | 777 | val_links = xs_stock(XSTYPE_DICT); |
| 778 | 778 | ||
| 779 | xs_html *snac_metadata = xs_html_tag("div", | 779 | xs_html *snac_metadata = xs_html_tag("div", |
| 780 | xs_html_attr("class", "snac-metadata")); | 780 | xs_html_attr("class", "snac-metadata")); |
| @@ -852,8 +852,8 @@ xs_html *html_top_controls(snac *snac) | |||
| 852 | "new_post_div", "new_post_form", | 852 | "new_post_div", "new_post_form", |
| 853 | L("What's on your mind?"), "", | 853 | L("What's on your mind?"), "", |
| 854 | NULL, NULL, | 854 | NULL, NULL, |
| 855 | xs_stock_false, "", | 855 | xs_stock(XSTYPE_FALSE), "", |
| 856 | xs_stock_false, NULL, | 856 | xs_stock(XSTYPE_FALSE), NULL, |
| 857 | NULL, 1), | 857 | NULL, 1), |
| 858 | 858 | ||
| 859 | /** operations **/ | 859 | /** operations **/ |
| @@ -1285,7 +1285,7 @@ xs_html *html_entry_controls(snac *snac, char *actor, const xs_dict *msg, const | |||
| 1285 | "", prev_src, | 1285 | "", prev_src, |
| 1286 | id, NULL, | 1286 | id, NULL, |
| 1287 | xs_dict_get(msg, "sensitive"), xs_dict_get(msg, "summary"), | 1287 | xs_dict_get(msg, "sensitive"), xs_dict_get(msg, "summary"), |
| 1288 | xs_stock_false, redir, | 1288 | xs_stock(XSTYPE_FALSE), redir, |
| 1289 | NULL, 0)), | 1289 | NULL, 0)), |
| 1290 | xs_html_tag("p", NULL)); | 1290 | xs_html_tag("p", NULL)); |
| 1291 | } | 1291 | } |
| @@ -1304,7 +1304,7 @@ xs_html *html_entry_controls(snac *snac, char *actor, const xs_dict *msg, const | |||
| 1304 | "", ct, | 1304 | "", ct, |
| 1305 | NULL, NULL, | 1305 | NULL, NULL, |
| 1306 | xs_dict_get(msg, "sensitive"), xs_dict_get(msg, "summary"), | 1306 | xs_dict_get(msg, "sensitive"), xs_dict_get(msg, "summary"), |
| 1307 | xs_stock_false, redir, | 1307 | xs_stock(XSTYPE_FALSE), redir, |
| 1308 | id, 0)), | 1308 | id, 0)), |
| 1309 | xs_html_tag("p", NULL)); | 1309 | xs_html_tag("p", NULL)); |
| 1310 | } | 1310 | } |
| @@ -2181,8 +2181,8 @@ xs_html *html_people_list(snac *snac, xs_list *list, char *header, char *t) | |||
| 2181 | dm_div_id, dm_form_id, | 2181 | dm_div_id, dm_form_id, |
| 2182 | "", "", | 2182 | "", "", |
| 2183 | NULL, actor_id, | 2183 | NULL, actor_id, |
| 2184 | xs_stock_false, "", | 2184 | xs_stock(XSTYPE_FALSE), "", |
| 2185 | xs_stock_false, NULL, | 2185 | xs_stock(XSTYPE_FALSE), NULL, |
| 2186 | NULL, 0), | 2186 | NULL, 0), |
| 2187 | xs_html_tag("p", NULL)); | 2187 | xs_html_tag("p", NULL)); |
| 2188 | 2188 | ||
| @@ -2802,7 +2802,7 @@ int html_post_handler(const xs_dict *req, const char *q_path, | |||
| 2802 | msg = msg_note(&snac, content_2, to, in_reply_to, attach_list, priv); | 2802 | msg = msg_note(&snac, content_2, to, in_reply_to, attach_list, priv); |
| 2803 | 2803 | ||
| 2804 | if (sensitive != NULL) { | 2804 | if (sensitive != NULL) { |
| 2805 | msg = xs_dict_set(msg, "sensitive", xs_stock_true); | 2805 | msg = xs_dict_set(msg, "sensitive", xs_stock(XSTYPE_TRUE)); |
| 2806 | msg = xs_dict_set(msg, "summary", xs_is_null(summary) ? "..." : summary); | 2806 | msg = xs_dict_set(msg, "summary", xs_is_null(summary) ? "..." : summary); |
| 2807 | } | 2807 | } |
| 2808 | 2808 | ||
| @@ -3036,17 +3036,17 @@ int html_post_handler(const xs_dict *req, const char *q_path, | |||
| 3036 | snac.config = xs_dict_set(snac.config, "purge_days", days); | 3036 | snac.config = xs_dict_set(snac.config, "purge_days", days); |
| 3037 | } | 3037 | } |
| 3038 | if ((v = xs_dict_get(p_vars, "drop_dm_from_unknown")) != NULL && strcmp(v, "on") == 0) | 3038 | if ((v = xs_dict_get(p_vars, "drop_dm_from_unknown")) != NULL && strcmp(v, "on") == 0) |
| 3039 | snac.config = xs_dict_set(snac.config, "drop_dm_from_unknown", xs_stock_true); | 3039 | snac.config = xs_dict_set(snac.config, "drop_dm_from_unknown", xs_stock(XSTYPE_TRUE)); |
| 3040 | else | 3040 | else |
| 3041 | snac.config = xs_dict_set(snac.config, "drop_dm_from_unknown", xs_stock_false); | 3041 | snac.config = xs_dict_set(snac.config, "drop_dm_from_unknown", xs_stock(XSTYPE_FALSE)); |
| 3042 | if ((v = xs_dict_get(p_vars, "bot")) != NULL && strcmp(v, "on") == 0) | 3042 | if ((v = xs_dict_get(p_vars, "bot")) != NULL && strcmp(v, "on") == 0) |
| 3043 | snac.config = xs_dict_set(snac.config, "bot", xs_stock_true); | 3043 | snac.config = xs_dict_set(snac.config, "bot", xs_stock(XSTYPE_TRUE)); |
| 3044 | else | 3044 | else |
| 3045 | snac.config = xs_dict_set(snac.config, "bot", xs_stock_false); | 3045 | snac.config = xs_dict_set(snac.config, "bot", xs_stock(XSTYPE_FALSE)); |
| 3046 | if ((v = xs_dict_get(p_vars, "private")) != NULL && strcmp(v, "on") == 0) | 3046 | if ((v = xs_dict_get(p_vars, "private")) != NULL && strcmp(v, "on") == 0) |
| 3047 | snac.config = xs_dict_set(snac.config, "private", xs_stock_true); | 3047 | snac.config = xs_dict_set(snac.config, "private", xs_stock(XSTYPE_TRUE)); |
| 3048 | else | 3048 | else |
| 3049 | snac.config = xs_dict_set(snac.config, "private", xs_stock_false); | 3049 | snac.config = xs_dict_set(snac.config, "private", xs_stock(XSTYPE_FALSE)); |
| 3050 | if ((v = xs_dict_get(p_vars, "metadata")) != NULL) { | 3050 | if ((v = xs_dict_get(p_vars, "metadata")) != NULL) { |
| 3051 | /* split the metadata and store it as a dict */ | 3051 | /* split the metadata and store it as a dict */ |
| 3052 | xs_dict *md = xs_dict_new(); | 3052 | xs_dict *md = xs_dict_new(); |
| @@ -814,7 +814,7 @@ void httpd(void) | |||
| 814 | 814 | ||
| 815 | /* send as many exit jobs as working threads */ | 815 | /* send as many exit jobs as working threads */ |
| 816 | for (n = 1; n < p_state->n_threads; n++) | 816 | for (n = 1; n < p_state->n_threads; n++) |
| 817 | job_post(xs_stock_false, 0); | 817 | job_post(xs_stock(XSTYPE_FALSE), 0); |
| 818 | 818 | ||
| 819 | /* wait for all the threads to exit */ | 819 | /* wait for all the threads to exit */ |
| 820 | for (n = 0; n < p_state->n_threads; n++) | 820 | for (n = 0; n < p_state->n_threads; n++) |
| @@ -522,12 +522,12 @@ xs_dict *mastoapi_account(const xs_dict *actor) | |||
| 522 | acct = xs_dict_append(acct, "id", acct_md5); | 522 | acct = xs_dict_append(acct, "id", acct_md5); |
| 523 | acct = xs_dict_append(acct, "username", prefu); | 523 | acct = xs_dict_append(acct, "username", prefu); |
| 524 | acct = xs_dict_append(acct, "display_name", display_name); | 524 | acct = xs_dict_append(acct, "display_name", display_name); |
| 525 | acct = xs_dict_append(acct, "discoverable", xs_stock_true); | 525 | acct = xs_dict_append(acct, "discoverable", xs_stock(XSTYPE_TRUE)); |
| 526 | acct = xs_dict_append(acct, "group", xs_stock_false); | 526 | acct = xs_dict_append(acct, "group", xs_stock(XSTYPE_FALSE)); |
| 527 | acct = xs_dict_append(acct, "hide_collections", xs_stock_false); | 527 | acct = xs_dict_append(acct, "hide_collections", xs_stock(XSTYPE_FALSE)); |
| 528 | acct = xs_dict_append(acct, "indexable", xs_stock_true); | 528 | acct = xs_dict_append(acct, "indexable", xs_stock(XSTYPE_TRUE)); |
| 529 | acct = xs_dict_append(acct, "noindex", xs_stock_false); | 529 | acct = xs_dict_append(acct, "noindex", xs_stock(XSTYPE_FALSE)); |
| 530 | acct = xs_dict_append(acct, "roles", xs_stock_list); | 530 | acct = xs_dict_append(acct, "roles", xs_stock(XSTYPE_LIST)); |
| 531 | 531 | ||
| 532 | { | 532 | { |
| 533 | /* create the acct field as user@host */ | 533 | /* create the acct field as user@host */ |
| @@ -549,9 +549,9 @@ xs_dict *mastoapi_account(const xs_dict *actor) | |||
| 549 | note = ""; | 549 | note = ""; |
| 550 | 550 | ||
| 551 | if (strcmp(xs_dict_get(actor, "type"), "Service") == 0) | 551 | if (strcmp(xs_dict_get(actor, "type"), "Service") == 0) |
| 552 | acct = xs_dict_append(acct, "bot", xs_stock_true); | 552 | acct = xs_dict_append(acct, "bot", xs_stock(XSTYPE_TRUE)); |
| 553 | else | 553 | else |
| 554 | acct = xs_dict_append(acct, "bot", xs_stock_false); | 554 | acct = xs_dict_append(acct, "bot", xs_stock(XSTYPE_FALSE)); |
| 555 | 555 | ||
| 556 | acct = xs_dict_append(acct, "note", note); | 556 | acct = xs_dict_append(acct, "note", note); |
| 557 | 557 | ||
| @@ -609,7 +609,7 @@ xs_dict *mastoapi_account(const xs_dict *actor) | |||
| 609 | d1 = xs_dict_append(d1, "shortcode", nm); | 609 | d1 = xs_dict_append(d1, "shortcode", nm); |
| 610 | d1 = xs_dict_append(d1, "url", url); | 610 | d1 = xs_dict_append(d1, "url", url); |
| 611 | d1 = xs_dict_append(d1, "static_url", url); | 611 | d1 = xs_dict_append(d1, "static_url", url); |
| 612 | d1 = xs_dict_append(d1, "visible_in_picker", xs_stock_true); | 612 | d1 = xs_dict_append(d1, "visible_in_picker", xs_stock(XSTYPE_TRUE)); |
| 613 | 613 | ||
| 614 | eml = xs_list_append(eml, d1); | 614 | eml = xs_list_append(eml, d1); |
| 615 | } | 615 | } |
| @@ -620,10 +620,10 @@ xs_dict *mastoapi_account(const xs_dict *actor) | |||
| 620 | acct = xs_dict_append(acct, "emojis", eml); | 620 | acct = xs_dict_append(acct, "emojis", eml); |
| 621 | } | 621 | } |
| 622 | 622 | ||
| 623 | acct = xs_dict_append(acct, "locked", xs_stock_false); | 623 | acct = xs_dict_append(acct, "locked", xs_stock(XSTYPE_FALSE)); |
| 624 | acct = xs_dict_append(acct, "followers_count", xs_stock_0); | 624 | acct = xs_dict_append(acct, "followers_count", xs_stock(0)); |
| 625 | acct = xs_dict_append(acct, "following_count", xs_stock_0); | 625 | acct = xs_dict_append(acct, "following_count", xs_stock(0)); |
| 626 | acct = xs_dict_append(acct, "statuses_count", xs_stock_0); | 626 | acct = xs_dict_append(acct, "statuses_count", xs_stock(0)); |
| 627 | 627 | ||
| 628 | xs *fields = xs_list_new(); | 628 | xs *fields = xs_list_new(); |
| 629 | p = xs_dict_get(actor, "attachment"); | 629 | p = xs_dict_get(actor, "attachment"); |
| @@ -631,19 +631,19 @@ xs_dict *mastoapi_account(const xs_dict *actor) | |||
| 631 | 631 | ||
| 632 | /* dict of validated links */ | 632 | /* dict of validated links */ |
| 633 | xs_dict *val_links = NULL; | 633 | xs_dict *val_links = NULL; |
| 634 | xs_dict *metadata = xs_stock_dict; | 634 | xs_dict *metadata = xs_stock(XSTYPE_DICT); |
| 635 | snac user = {0}; | 635 | snac user = {0}; |
| 636 | 636 | ||
| 637 | if (xs_startswith(id, srv_baseurl)) { | 637 | if (xs_startswith(id, srv_baseurl)) { |
| 638 | /* if it's a local user, open it and pick its validated links */ | 638 | /* if it's a local user, open it and pick its validated links */ |
| 639 | if (user_open(&user, prefu)) { | 639 | if (user_open(&user, prefu)) { |
| 640 | val_links = user.links; | 640 | val_links = user.links; |
| 641 | metadata = xs_dict_get_def(user.config, "metadata", xs_stock_dict); | 641 | metadata = xs_dict_get_def(user.config, "metadata", xs_stock(XSTYPE_DICT)); |
| 642 | } | 642 | } |
| 643 | } | 643 | } |
| 644 | 644 | ||
| 645 | if (xs_is_null(val_links)) | 645 | if (xs_is_null(val_links)) |
| 646 | val_links = xs_stock_dict; | 646 | val_links = xs_stock(XSTYPE_DICT); |
| 647 | 647 | ||
| 648 | while (xs_list_iter(&p, &v)) { | 648 | while (xs_list_iter(&p, &v)) { |
| 649 | char *type = xs_dict_get(v, "type"); | 649 | char *type = xs_dict_get(v, "type"); |
| @@ -672,7 +672,7 @@ xs_dict *mastoapi_account(const xs_dict *actor) | |||
| 672 | d = xs_dict_append(d, "value", value); | 672 | d = xs_dict_append(d, "value", value); |
| 673 | d = xs_dict_append(d, "verified_at", | 673 | d = xs_dict_append(d, "verified_at", |
| 674 | xs_type(val_date) == XSTYPE_STRING && *val_date ? | 674 | xs_type(val_date) == XSTYPE_STRING && *val_date ? |
| 675 | val_date : xs_stock_null); | 675 | val_date : xs_stock(XSTYPE_NULL)); |
| 676 | 676 | ||
| 677 | fields = xs_list_append(fields, d); | 677 | fields = xs_list_append(fields, d); |
| 678 | } | 678 | } |
| @@ -710,13 +710,13 @@ xs_dict *mastoapi_poll(snac *snac, const xs_dict *msg) | |||
| 710 | xs *fd = mastoapi_date(xs_dict_get(msg, "endTime")); | 710 | xs *fd = mastoapi_date(xs_dict_get(msg, "endTime")); |
| 711 | poll = xs_dict_append(poll, "expires_at", fd); | 711 | poll = xs_dict_append(poll, "expires_at", fd); |
| 712 | poll = xs_dict_append(poll, "expired", | 712 | poll = xs_dict_append(poll, "expired", |
| 713 | xs_dict_get(msg, "closed") != NULL ? xs_stock_true : xs_stock_false); | 713 | xs_dict_get(msg, "closed") != NULL ? xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE)); |
| 714 | 714 | ||
| 715 | if ((opts = xs_dict_get(msg, "oneOf")) != NULL) | 715 | if ((opts = xs_dict_get(msg, "oneOf")) != NULL) |
| 716 | poll = xs_dict_append(poll, "multiple", xs_stock_false); | 716 | poll = xs_dict_append(poll, "multiple", xs_stock(XSTYPE_FALSE)); |
| 717 | else { | 717 | else { |
| 718 | opts = xs_dict_get(msg, "anyOf"); | 718 | opts = xs_dict_get(msg, "anyOf"); |
| 719 | poll = xs_dict_append(poll, "multiple", xs_stock_true); | 719 | poll = xs_dict_append(poll, "multiple", xs_stock(XSTYPE_TRUE)); |
| 720 | } | 720 | } |
| 721 | 721 | ||
| 722 | while (xs_list_iter(&opts, &v)) { | 722 | while (xs_list_iter(&opts, &v)) { |
| @@ -743,7 +743,7 @@ xs_dict *mastoapi_poll(snac *snac, const xs_dict *msg) | |||
| 743 | 743 | ||
| 744 | poll = xs_dict_append(poll, "voted", | 744 | poll = xs_dict_append(poll, "voted", |
| 745 | (snac && was_question_voted(snac, xs_dict_get(msg, "id"))) ? | 745 | (snac && was_question_voted(snac, xs_dict_get(msg, "id"))) ? |
| 746 | xs_stock_true : xs_stock_false); | 746 | xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE)); |
| 747 | 747 | ||
| 748 | return poll; | 748 | return poll; |
| 749 | } | 749 | } |
| @@ -809,7 +809,7 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg) | |||
| 809 | 809 | ||
| 810 | tmp = xs_dict_get(msg, "sensitive"); | 810 | tmp = xs_dict_get(msg, "sensitive"); |
| 811 | if (xs_is_null(tmp)) | 811 | if (xs_is_null(tmp)) |
| 812 | tmp = xs_stock_false; | 812 | tmp = xs_stock(XSTYPE_FALSE); |
| 813 | 813 | ||
| 814 | st = xs_dict_append(st, "sensitive", tmp); | 814 | st = xs_dict_append(st, "sensitive", tmp); |
| 815 | 815 | ||
| @@ -928,7 +928,7 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg) | |||
| 928 | d1 = xs_dict_append(d1, "shortcode", nm); | 928 | d1 = xs_dict_append(d1, "shortcode", nm); |
| 929 | d1 = xs_dict_append(d1, "url", url); | 929 | d1 = xs_dict_append(d1, "url", url); |
| 930 | d1 = xs_dict_append(d1, "static_url", url); | 930 | d1 = xs_dict_append(d1, "static_url", url); |
| 931 | d1 = xs_dict_append(d1, "visible_in_picker", xs_stock_true); | 931 | d1 = xs_dict_append(d1, "visible_in_picker", xs_stock(XSTYPE_TRUE)); |
| 932 | d1 = xs_dict_append(d1, "category", "Emojis"); | 932 | d1 = xs_dict_append(d1, "category", "Emojis"); |
| 933 | 933 | ||
| 934 | eml = xs_list_append(eml, d1); | 934 | eml = xs_list_append(eml, d1); |
| @@ -949,7 +949,7 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg) | |||
| 949 | 949 | ||
| 950 | st = xs_dict_append(st, "favourites_count", ixc); | 950 | st = xs_dict_append(st, "favourites_count", ixc); |
| 951 | st = xs_dict_append(st, "favourited", | 951 | st = xs_dict_append(st, "favourited", |
| 952 | (snac && xs_list_in(idx, snac->md5) != -1) ? xs_stock_true : xs_stock_false); | 952 | (snac && xs_list_in(idx, snac->md5) != -1) ? xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE)); |
| 953 | 953 | ||
| 954 | xs_free(idx); | 954 | xs_free(idx); |
| 955 | xs_free(ixc); | 955 | xs_free(ixc); |
| @@ -958,7 +958,7 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg) | |||
| 958 | 958 | ||
| 959 | st = xs_dict_append(st, "reblogs_count", ixc); | 959 | st = xs_dict_append(st, "reblogs_count", ixc); |
| 960 | st = xs_dict_append(st, "reblogged", | 960 | st = xs_dict_append(st, "reblogged", |
| 961 | (snac && xs_list_in(idx, snac->md5) != -1) ? xs_stock_true : xs_stock_false); | 961 | (snac && xs_list_in(idx, snac->md5) != -1) ? xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE)); |
| 962 | 962 | ||
| 963 | /* get the last person who boosted this */ | 963 | /* get the last person who boosted this */ |
| 964 | xs *boosted_by_md5 = NULL; | 964 | xs *boosted_by_md5 = NULL; |
| @@ -973,8 +973,8 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg) | |||
| 973 | st = xs_dict_append(st, "replies_count", ixc); | 973 | st = xs_dict_append(st, "replies_count", ixc); |
| 974 | 974 | ||
| 975 | /* default in_reply_to values */ | 975 | /* default in_reply_to values */ |
| 976 | st = xs_dict_append(st, "in_reply_to_id", xs_stock_null); | 976 | st = xs_dict_append(st, "in_reply_to_id", xs_stock(XSTYPE_NULL)); |
| 977 | st = xs_dict_append(st, "in_reply_to_account_id", xs_stock_null); | 977 | st = xs_dict_append(st, "in_reply_to_account_id", xs_stock(XSTYPE_NULL)); |
| 978 | 978 | ||
| 979 | tmp = xs_dict_get(msg, "inReplyTo"); | 979 | tmp = xs_dict_get(msg, "inReplyTo"); |
| 980 | if (!xs_is_null(tmp)) { | 980 | if (!xs_is_null(tmp)) { |
| @@ -992,9 +992,9 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg) | |||
| 992 | } | 992 | } |
| 993 | } | 993 | } |
| 994 | 994 | ||
| 995 | st = xs_dict_append(st, "reblog", xs_stock_null); | 995 | st = xs_dict_append(st, "reblog", xs_stock(XSTYPE_NULL)); |
| 996 | st = xs_dict_append(st, "card", xs_stock_null); | 996 | st = xs_dict_append(st, "card", xs_stock(XSTYPE_NULL)); |
| 997 | st = xs_dict_append(st, "language", xs_stock_null); | 997 | st = xs_dict_append(st, "language", xs_stock(XSTYPE_NULL)); |
| 998 | 998 | ||
| 999 | tmp = xs_dict_get(msg, "sourceContent"); | 999 | tmp = xs_dict_get(msg, "sourceContent"); |
| 1000 | if (xs_is_null(tmp)) | 1000 | if (xs_is_null(tmp)) |
| @@ -1005,7 +1005,7 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg) | |||
| 1005 | tmp = xs_dict_get(msg, "updated"); | 1005 | tmp = xs_dict_get(msg, "updated"); |
| 1006 | xs *fd2 = NULL; | 1006 | xs *fd2 = NULL; |
| 1007 | if (xs_is_null(tmp)) | 1007 | if (xs_is_null(tmp)) |
| 1008 | tmp = xs_stock_null; | 1008 | tmp = xs_stock(XSTYPE_NULL); |
| 1009 | else { | 1009 | else { |
| 1010 | fd2 = mastoapi_date(tmp); | 1010 | fd2 = mastoapi_date(tmp); |
| 1011 | tmp = fd2; | 1011 | tmp = fd2; |
| @@ -1018,12 +1018,12 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg) | |||
| 1018 | st = xs_dict_append(st, "poll", poll); | 1018 | st = xs_dict_append(st, "poll", poll); |
| 1019 | } | 1019 | } |
| 1020 | else | 1020 | else |
| 1021 | st = xs_dict_append(st, "poll", xs_stock_null); | 1021 | st = xs_dict_append(st, "poll", xs_stock(XSTYPE_NULL)); |
| 1022 | 1022 | ||
| 1023 | st = xs_dict_append(st, "bookmarked", xs_stock_false); | 1023 | st = xs_dict_append(st, "bookmarked", xs_stock(XSTYPE_FALSE)); |
| 1024 | 1024 | ||
| 1025 | st = xs_dict_append(st, "pinned", | 1025 | st = xs_dict_append(st, "pinned", |
| 1026 | (snac && is_pinned(snac, id)) ? xs_stock_true : xs_stock_false); | 1026 | (snac && is_pinned(snac, id)) ? xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE)); |
| 1027 | 1027 | ||
| 1028 | /* is it a boost? */ | 1028 | /* is it a boost? */ |
| 1029 | if (!xs_is_null(boosted_by_md5)) { | 1029 | if (!xs_is_null(boosted_by_md5)) { |
| @@ -1067,21 +1067,21 @@ xs_dict *mastoapi_relationship(snac *snac, const char *md5) | |||
| 1067 | 1067 | ||
| 1068 | rel = xs_dict_append(rel, "id", md5); | 1068 | rel = xs_dict_append(rel, "id", md5); |
| 1069 | rel = xs_dict_append(rel, "following", | 1069 | rel = xs_dict_append(rel, "following", |
| 1070 | following_check(snac, actor) ? xs_stock_true : xs_stock_false); | 1070 | following_check(snac, actor) ? xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE)); |
| 1071 | 1071 | ||
| 1072 | rel = xs_dict_append(rel, "showing_reblogs", xs_stock_true); | 1072 | rel = xs_dict_append(rel, "showing_reblogs", xs_stock(XSTYPE_TRUE)); |
| 1073 | rel = xs_dict_append(rel, "notifying", xs_stock_false); | 1073 | rel = xs_dict_append(rel, "notifying", xs_stock(XSTYPE_FALSE)); |
| 1074 | rel = xs_dict_append(rel, "followed_by", | 1074 | rel = xs_dict_append(rel, "followed_by", |
| 1075 | follower_check(snac, actor) ? xs_stock_true : xs_stock_false); | 1075 | follower_check(snac, actor) ? xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE)); |
| 1076 | 1076 | ||
| 1077 | rel = xs_dict_append(rel, "blocking", | 1077 | rel = xs_dict_append(rel, "blocking", |
| 1078 | is_muted(snac, actor) ? xs_stock_true : xs_stock_false); | 1078 | is_muted(snac, actor) ? xs_stock(XSTYPE_TRUE) : xs_stock(XSTYPE_FALSE)); |
| 1079 | 1079 | ||
| 1080 | rel = xs_dict_append(rel, "muting", xs_stock_false); | 1080 | rel = xs_dict_append(rel, "muting", xs_stock(XSTYPE_FALSE)); |
| 1081 | rel = xs_dict_append(rel, "muting_notifications", xs_stock_false); | 1081 | rel = xs_dict_append(rel, "muting_notifications", xs_stock(XSTYPE_FALSE)); |
| 1082 | rel = xs_dict_append(rel, "requested", xs_stock_false); | 1082 | rel = xs_dict_append(rel, "requested", xs_stock(XSTYPE_FALSE)); |
| 1083 | rel = xs_dict_append(rel, "domain_blocking", xs_stock_false); | 1083 | rel = xs_dict_append(rel, "domain_blocking", xs_stock(XSTYPE_FALSE)); |
| 1084 | rel = xs_dict_append(rel, "endorsed", xs_stock_false); | 1084 | rel = xs_dict_append(rel, "endorsed", xs_stock(XSTYPE_FALSE)); |
| 1085 | rel = xs_dict_append(rel, "note", ""); | 1085 | rel = xs_dict_append(rel, "note", ""); |
| 1086 | } | 1086 | } |
| 1087 | 1087 | ||
| @@ -1149,7 +1149,7 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 1149 | acct = xs_dict_append(acct, "last_status_at", xs_dict_get(snac1.config, "published")); | 1149 | acct = xs_dict_append(acct, "last_status_at", xs_dict_get(snac1.config, "published")); |
| 1150 | acct = xs_dict_append(acct, "note", xs_dict_get(snac1.config, "bio")); | 1150 | acct = xs_dict_append(acct, "note", xs_dict_get(snac1.config, "bio")); |
| 1151 | acct = xs_dict_append(acct, "url", snac1.actor); | 1151 | acct = xs_dict_append(acct, "url", snac1.actor); |
| 1152 | acct = xs_dict_append(acct, "locked", xs_stock_false); | 1152 | acct = xs_dict_append(acct, "locked", xs_stock(XSTYPE_FALSE)); |
| 1153 | acct = xs_dict_append(acct, "bot", xs_dict_get(snac1.config, "bot")); | 1153 | acct = xs_dict_append(acct, "bot", xs_dict_get(snac1.config, "bot")); |
| 1154 | 1154 | ||
| 1155 | xs *src = xs_json_loads("{\"privacy\":\"public\"," | 1155 | xs *src = xs_json_loads("{\"privacy\":\"public\"," |
| @@ -1186,7 +1186,7 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 1186 | 1186 | ||
| 1187 | xs_dict *val_links = snac1.links; | 1187 | xs_dict *val_links = snac1.links; |
| 1188 | if (xs_is_null(val_links)) | 1188 | if (xs_is_null(val_links)) |
| 1189 | val_links = xs_stock_dict; | 1189 | val_links = xs_stock(XSTYPE_DICT); |
| 1190 | 1190 | ||
| 1191 | int c = 0; | 1191 | int c = 0; |
| 1192 | while (xs_dict_next(metadata, &k, &v, &c)) { | 1192 | while (xs_dict_next(metadata, &k, &v, &c)) { |
| @@ -1206,7 +1206,7 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 1206 | d = xs_dict_append(d, "value", v); | 1206 | d = xs_dict_append(d, "value", v); |
| 1207 | d = xs_dict_append(d, "verified_at", | 1207 | d = xs_dict_append(d, "verified_at", |
| 1208 | xs_type(val_date) == XSTYPE_STRING && *val_date ? | 1208 | xs_type(val_date) == XSTYPE_STRING && *val_date ? |
| 1209 | val_date : xs_stock_null); | 1209 | val_date : xs_stock(XSTYPE_NULL)); |
| 1210 | 1210 | ||
| 1211 | fields = xs_list_append(fields, d); | 1211 | fields = xs_list_append(fields, d); |
| 1212 | } | 1212 | } |
| @@ -1214,9 +1214,9 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 1214 | acct = xs_dict_set(acct, "fields", fields); | 1214 | acct = xs_dict_set(acct, "fields", fields); |
| 1215 | } | 1215 | } |
| 1216 | 1216 | ||
| 1217 | acct = xs_dict_append(acct, "followers_count", xs_stock_0); | 1217 | acct = xs_dict_append(acct, "followers_count", xs_stock(0)); |
| 1218 | acct = xs_dict_append(acct, "following_count", xs_stock_0); | 1218 | acct = xs_dict_append(acct, "following_count", xs_stock(0)); |
| 1219 | acct = xs_dict_append(acct, "statuses_count", xs_stock_0); | 1219 | acct = xs_dict_append(acct, "statuses_count", xs_stock(0)); |
| 1220 | 1220 | ||
| 1221 | *body = xs_json_dumps(acct, 4); | 1221 | *body = xs_json_dumps(acct, 4); |
| 1222 | *ctype = "application/json"; | 1222 | *ctype = "application/json"; |
| @@ -1813,7 +1813,7 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 1813 | 1813 | ||
| 1814 | ins = xs_dict_append(ins, "email", v); | 1814 | ins = xs_dict_append(ins, "email", v); |
| 1815 | 1815 | ||
| 1816 | ins = xs_dict_append(ins, "rules", xs_stock_list); | 1816 | ins = xs_dict_append(ins, "rules", xs_stock(XSTYPE_LIST)); |
| 1817 | 1817 | ||
| 1818 | xs *l1 = xs_list_append(xs_list_new(), "en"); | 1818 | xs *l1 = xs_list_append(xs_list_new(), "en"); |
| 1819 | ins = xs_dict_append(ins, "languages", l1); | 1819 | ins = xs_dict_append(ins, "languages", l1); |
| @@ -1824,14 +1824,14 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 1824 | 1824 | ||
| 1825 | ins = xs_dict_append(ins, "urls", urls); | 1825 | ins = xs_dict_append(ins, "urls", urls); |
| 1826 | 1826 | ||
| 1827 | xs *d2 = xs_dict_append(xs_dict_new(), "user_count", xs_stock_0); | 1827 | xs *d2 = xs_dict_append(xs_dict_new(), "user_count", xs_stock(0)); |
| 1828 | d2 = xs_dict_append(d2, "status_count", xs_stock_0); | 1828 | d2 = xs_dict_append(d2, "status_count", xs_stock(0)); |
| 1829 | d2 = xs_dict_append(d2, "domain_count", xs_stock_0); | 1829 | d2 = xs_dict_append(d2, "domain_count", xs_stock(0)); |
| 1830 | ins = xs_dict_append(ins, "stats", d2); | 1830 | ins = xs_dict_append(ins, "stats", d2); |
| 1831 | 1831 | ||
| 1832 | ins = xs_dict_append(ins, "registrations", xs_stock_false); | 1832 | ins = xs_dict_append(ins, "registrations", xs_stock(XSTYPE_FALSE)); |
| 1833 | ins = xs_dict_append(ins, "approval_required", xs_stock_false); | 1833 | ins = xs_dict_append(ins, "approval_required", xs_stock(XSTYPE_FALSE)); |
| 1834 | ins = xs_dict_append(ins, "invites_enabled", xs_stock_false); | 1834 | ins = xs_dict_append(ins, "invites_enabled", xs_stock(XSTYPE_FALSE)); |
| 1835 | 1835 | ||
| 1836 | xs *cfg = xs_dict_new(); | 1836 | xs *cfg = xs_dict_new(); |
| 1837 | 1837 | ||
| @@ -2079,7 +2079,7 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 2079 | d = xs_dict_append(d, "name", q); | 2079 | d = xs_dict_append(d, "name", q); |
| 2080 | xs *url = xs_fmt("%s?t=%s", srv_baseurl, q); | 2080 | xs *url = xs_fmt("%s?t=%s", srv_baseurl, q); |
| 2081 | d = xs_dict_append(d, "url", url); | 2081 | d = xs_dict_append(d, "url", url); |
| 2082 | d = xs_dict_append(d, "history", xs_stock_list); | 2082 | d = xs_dict_append(d, "history", xs_stock(XSTYPE_LIST)); |
| 2083 | 2083 | ||
| 2084 | htl = xs_list_append(htl, d); | 2084 | htl = xs_list_append(htl, d); |
| 2085 | } | 2085 | } |
| @@ -2257,7 +2257,7 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path, | |||
| 2257 | strcmp(visibility, "public") == 0 ? 0 : 1); | 2257 | strcmp(visibility, "public") == 0 ? 0 : 1); |
| 2258 | 2258 | ||
| 2259 | if (!xs_is_null(summary) && *summary) { | 2259 | if (!xs_is_null(summary) && *summary) { |
| 2260 | msg = xs_dict_set(msg, "sensitive", xs_stock_true); | 2260 | msg = xs_dict_set(msg, "sensitive", xs_stock(XSTYPE_TRUE)); |
| 2261 | msg = xs_dict_set(msg, "summary", summary); | 2261 | msg = xs_dict_set(msg, "summary", summary); |
| 2262 | } | 2262 | } |
| 2263 | 2263 | ||
| @@ -61,6 +61,7 @@ xs_val *xs_collapse(xs_val *data, int offset, int size); | |||
| 61 | xs_val *xs_insert_m(xs_val *data, int offset, const char *mem, int size); | 61 | xs_val *xs_insert_m(xs_val *data, int offset, const char *mem, int size); |
| 62 | #define xs_insert(data, offset, data2) xs_insert_m(data, offset, data2, xs_size(data2)) | 62 | #define xs_insert(data, offset, data2) xs_insert_m(data, offset, data2, xs_size(data2)) |
| 63 | #define xs_append_m(data, mem, size) xs_insert_m(data, xs_size(data) - 1, mem, size) | 63 | #define xs_append_m(data, mem, size) xs_insert_m(data, xs_size(data) - 1, mem, size) |
| 64 | xs_val *xs_stock(int type); | ||
| 64 | 65 | ||
| 65 | xs_str *xs_str_new(const char *str); | 66 | xs_str *xs_str_new(const char *str); |
| 66 | xs_str *xs_str_new_sz(const char *mem, int sz); | 67 | xs_str *xs_str_new_sz(const char *mem, int sz); |
| @@ -137,34 +138,11 @@ unsigned int xs_hash_func(const char *data, int size); | |||
| 137 | #define XS_ASSERT_TYPE_NULL(v, t) (void)(0) | 138 | #define XS_ASSERT_TYPE_NULL(v, t) (void)(0) |
| 138 | #endif | 139 | #endif |
| 139 | 140 | ||
| 140 | extern xs_val xs_stock_null[]; | ||
| 141 | extern xs_val xs_stock_true[]; | ||
| 142 | extern xs_val xs_stock_false[]; | ||
| 143 | extern xs_val xs_stock_0[]; | ||
| 144 | extern xs_val xs_stock_1[]; | ||
| 145 | extern xs_val xs_stock_list[]; | ||
| 146 | extern xs_val xs_stock_dict[]; | ||
| 147 | |||
| 148 | #define xs_return(v) xs_val *__r = v; v = NULL; return __r | 141 | #define xs_return(v) xs_val *__r = v; v = NULL; return __r |
| 149 | 142 | ||
| 150 | 143 | ||
| 151 | #ifdef XS_IMPLEMENTATION | 144 | #ifdef XS_IMPLEMENTATION |
| 152 | 145 | ||
| 153 | xs_val xs_stock_null[] = { XSTYPE_NULL }; | ||
| 154 | xs_val xs_stock_true[] = { XSTYPE_TRUE }; | ||
| 155 | xs_val xs_stock_false[] = { XSTYPE_FALSE }; | ||
| 156 | xs_val xs_stock_0[] = { XSTYPE_NUMBER, '0', '\0' }; | ||
| 157 | xs_val xs_stock_1[] = { XSTYPE_NUMBER, '1', '\0' }; | ||
| 158 | |||
| 159 | #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ | ||
| 160 | xs_val xs_stock_list[] = { XSTYPE_LIST, 0, 0, 0, 1 + _XS_TYPE_SIZE + 1, XSTYPE_EOM }; | ||
| 161 | xs_val xs_stock_dict[] = { XSTYPE_DICT, 0, 0, 0, 1 + _XS_TYPE_SIZE + 1, XSTYPE_EOM }; | ||
| 162 | #else | ||
| 163 | xs_val xs_stock_list[] = { XSTYPE_LIST, 1 + _XS_TYPE_SIZE + 1, 0, 0, 0, XSTYPE_EOM }; | ||
| 164 | xs_val xs_stock_dict[] = { XSTYPE_DICT, 1 + _XS_TYPE_SIZE + 1, 0, 0, 0, XSTYPE_EOM }; | ||
| 165 | #endif | ||
| 166 | |||
| 167 | |||
| 168 | void *_xs_realloc(void *ptr, size_t size, const char *file, int line, const char *func) | 146 | void *_xs_realloc(void *ptr, size_t size, const char *file, int line, const char *func) |
| 169 | { | 147 | { |
| 170 | xs_val *ndata = realloc(ptr, size); | 148 | xs_val *ndata = realloc(ptr, size); |
| @@ -369,10 +347,14 @@ int xs_cmp(const xs_val *v1, const xs_val *v2) | |||
| 369 | xs_val *xs_dup(const xs_val *data) | 347 | xs_val *xs_dup(const xs_val *data) |
| 370 | /* creates a duplicate of data */ | 348 | /* creates a duplicate of data */ |
| 371 | { | 349 | { |
| 372 | int sz = xs_size(data); | 350 | xs_val *s = NULL; |
| 373 | xs_val *s = xs_realloc(NULL, _xs_blk_size(sz)); | 351 | |
| 352 | if (data) { | ||
| 353 | int sz = xs_size(data); | ||
| 354 | s = xs_realloc(NULL, _xs_blk_size(sz)); | ||
| 374 | 355 | ||
| 375 | memcpy(s, data, sz); | 356 | memcpy(s, data, sz); |
| 357 | } | ||
| 376 | 358 | ||
| 377 | return s; | 359 | return s; |
| 378 | } | 360 | } |
| @@ -437,6 +419,39 @@ xs_val *xs_insert_m(xs_val *data, int offset, const char *mem, int size) | |||
| 437 | } | 419 | } |
| 438 | 420 | ||
| 439 | 421 | ||
| 422 | xs_val *xs_stock(int type) | ||
| 423 | /* returns stock values */ | ||
| 424 | { | ||
| 425 | static xs_val stock_null[] = { XSTYPE_NULL }; | ||
| 426 | static xs_val stock_true[] = { XSTYPE_TRUE }; | ||
| 427 | static xs_val stock_false[] = { XSTYPE_FALSE }; | ||
| 428 | static xs_val stock_0[] = { XSTYPE_NUMBER, '0', '\0' }; | ||
| 429 | static xs_val stock_1[] = { XSTYPE_NUMBER, '1', '\0' }; | ||
| 430 | static xs_list *stock_list = NULL; | ||
| 431 | static xs_dict *stock_dict = NULL; | ||
| 432 | |||
| 433 | switch (type) { | ||
| 434 | case 0: return stock_0; | ||
| 435 | case 1: return stock_1; | ||
| 436 | case XSTYPE_NULL: return stock_null; | ||
| 437 | case XSTYPE_TRUE: return stock_true; | ||
| 438 | case XSTYPE_FALSE: return stock_false; | ||
| 439 | |||
| 440 | case XSTYPE_LIST: | ||
| 441 | if (stock_list == NULL) | ||
| 442 | stock_list = xs_list_new(); | ||
| 443 | return stock_list; | ||
| 444 | |||
| 445 | case XSTYPE_DICT: | ||
| 446 | if (stock_dict == NULL) | ||
| 447 | stock_dict = xs_dict_new(); | ||
| 448 | return stock_dict; | ||
| 449 | } | ||
| 450 | |||
| 451 | return NULL; | ||
| 452 | } | ||
| 453 | |||
| 454 | |||
| 440 | /** strings **/ | 455 | /** strings **/ |
| 441 | 456 | ||
| 442 | xs_str *xs_str_new(const char *str) | 457 | xs_str *xs_str_new(const char *str) |
| @@ -647,10 +662,14 @@ xs_str *xs_tolower_i(xs_str *str) | |||
| 647 | xs_list *xs_list_new(void) | 662 | xs_list *xs_list_new(void) |
| 648 | /* creates a new list */ | 663 | /* creates a new list */ |
| 649 | { | 664 | { |
| 650 | return memcpy( | 665 | int sz = 1 + _XS_TYPE_SIZE + 1; |
| 651 | xs_realloc(NULL, _xs_blk_size(sizeof(xs_stock_list))), | 666 | xs_list *l = xs_realloc(NULL, sz); |
| 652 | xs_stock_list, sizeof(xs_stock_list) | 667 | memset(l, '\0', sz); |
| 653 | ); | 668 | |
| 669 | l[0] = XSTYPE_LIST; | ||
| 670 | _xs_put_size(&l[1], sz); | ||
| 671 | |||
| 672 | return l; | ||
| 654 | } | 673 | } |
| 655 | 674 | ||
| 656 | 675 | ||
| @@ -660,8 +679,8 @@ xs_list *_xs_list_write_litem(xs_list *list, int offset, const char *mem, int ds | |||
| 660 | XS_ASSERT_TYPE(list, XSTYPE_LIST); | 679 | XS_ASSERT_TYPE(list, XSTYPE_LIST); |
| 661 | 680 | ||
| 662 | if (mem == NULL) { | 681 | if (mem == NULL) { |
| 663 | mem = xs_stock_null; | 682 | mem = xs_stock(XSTYPE_NULL); |
| 664 | dsz = sizeof(xs_stock_null); | 683 | dsz = xs_size(mem); |
| 665 | } | 684 | } |
| 666 | 685 | ||
| 667 | list = xs_expand(list, offset, dsz + 1); | 686 | list = xs_expand(list, offset, dsz + 1); |
| @@ -947,10 +966,14 @@ xs_list *xs_list_cat(xs_list *l1, const xs_list *l2) | |||
| 947 | xs_dict *xs_dict_new(void) | 966 | xs_dict *xs_dict_new(void) |
| 948 | /* creates a new dict */ | 967 | /* creates a new dict */ |
| 949 | { | 968 | { |
| 950 | return memcpy( | 969 | int sz = 1 + _XS_TYPE_SIZE + 1; |
| 951 | xs_realloc(NULL, _xs_blk_size(sizeof(xs_stock_dict))), | 970 | xs_dict *d = xs_realloc(NULL, sz); |
| 952 | xs_stock_dict, sizeof(xs_stock_dict) | 971 | memset(d, '\0', sz); |
| 953 | ); | 972 | |
| 973 | d[0] = XSTYPE_DICT; | ||
| 974 | _xs_put_size(&d[1], sz); | ||
| 975 | |||
| 976 | return d; | ||
| 954 | } | 977 | } |
| 955 | 978 | ||
| 956 | 979 | ||
| @@ -962,8 +985,8 @@ xs_dict *_xs_dict_write_ditem(xs_dict *dict, int offset, const xs_str *key, | |||
| 962 | XS_ASSERT_TYPE(key, XSTYPE_STRING); | 985 | XS_ASSERT_TYPE(key, XSTYPE_STRING); |
| 963 | 986 | ||
| 964 | if (data == NULL) { | 987 | if (data == NULL) { |
| 965 | data = xs_stock_null; | 988 | data = xs_stock(XSTYPE_NULL); |
| 966 | dsz = sizeof(xs_stock_null); | 989 | dsz = xs_size(data); |
| 967 | } | 990 | } |
| 968 | 991 | ||
| 969 | int ksz = xs_size(key); | 992 | int ksz = xs_size(key); |
diff --git a/xs_version.h b/xs_version.h index 50dcb5e..ef52120 100644 --- a/xs_version.h +++ b/xs_version.h | |||
| @@ -1 +1 @@ | |||
| /* f46d5b29627b20a6e9ec4ef60c01df1d2d778520 2024-03-09T08:26:31+01:00 */ | /* 0df383371d207b0adfda40912ee54b37e5b01152 2024-03-15T03:45:39+01:00 */ | ||