summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2024-03-15 04:10:11 +0100
committerGravatar default2024-03-15 04:10:11 +0100
commit7aa5250eb8c68472e476faf8399e98f2ba9a9c3b (patch)
treec18ee69ac1bbf727d9295be9a62820badce8df22
parentUpdated TODO. (diff)
downloadpenes-snac2-7aa5250eb8c68472e476faf8399e98f2ba9a9c3b.tar.gz
penes-snac2-7aa5250eb8c68472e476faf8399e98f2ba9a9c3b.tar.xz
penes-snac2-7aa5250eb8c68472e476faf8399e98f2ba9a9c3b.zip
Backport from xs.
-rw-r--r--activitypub.c4
-rw-r--r--html.c28
-rw-r--r--httpd.c2
-rw-r--r--mastoapi.c118
-rw-r--r--xs.h99
-rw-r--r--xs_version.h2
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
diff --git a/html.c b/html.c
index da37558..667b795 100644
--- a/html.c
+++ b/html.c
@@ -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();
diff --git a/httpd.c b/httpd.c
index d74642f..51ed1a2 100644
--- a/httpd.c
+++ b/httpd.c
@@ -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++)
diff --git a/mastoapi.c b/mastoapi.c
index cc8e144..0ec1429 100644
--- a/mastoapi.c
+++ b/mastoapi.c
@@ -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
diff --git a/xs.h b/xs.h
index 85464db..d2de44a 100644
--- a/xs.h
+++ b/xs.h
@@ -61,6 +61,7 @@ xs_val *xs_collapse(xs_val *data, int offset, int size);
61xs_val *xs_insert_m(xs_val *data, int offset, const char *mem, int size); 61xs_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)
64xs_val *xs_stock(int type);
64 65
65xs_str *xs_str_new(const char *str); 66xs_str *xs_str_new(const char *str);
66xs_str *xs_str_new_sz(const char *mem, int sz); 67xs_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
140extern xs_val xs_stock_null[];
141extern xs_val xs_stock_true[];
142extern xs_val xs_stock_false[];
143extern xs_val xs_stock_0[];
144extern xs_val xs_stock_1[];
145extern xs_val xs_stock_list[];
146extern 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
153xs_val xs_stock_null[] = { XSTYPE_NULL };
154xs_val xs_stock_true[] = { XSTYPE_TRUE };
155xs_val xs_stock_false[] = { XSTYPE_FALSE };
156xs_val xs_stock_0[] = { XSTYPE_NUMBER, '0', '\0' };
157xs_val xs_stock_1[] = { XSTYPE_NUMBER, '1', '\0' };
158
159#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
160xs_val xs_stock_list[] = { XSTYPE_LIST, 0, 0, 0, 1 + _XS_TYPE_SIZE + 1, XSTYPE_EOM };
161xs_val xs_stock_dict[] = { XSTYPE_DICT, 0, 0, 0, 1 + _XS_TYPE_SIZE + 1, XSTYPE_EOM };
162#else
163xs_val xs_stock_list[] = { XSTYPE_LIST, 1 + _XS_TYPE_SIZE + 1, 0, 0, 0, XSTYPE_EOM };
164xs_val xs_stock_dict[] = { XSTYPE_DICT, 1 + _XS_TYPE_SIZE + 1, 0, 0, 0, XSTYPE_EOM };
165#endif
166
167
168void *_xs_realloc(void *ptr, size_t size, const char *file, int line, const char *func) 146void *_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)
369xs_val *xs_dup(const xs_val *data) 347xs_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
422xs_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
442xs_str *xs_str_new(const char *str) 457xs_str *xs_str_new(const char *str)
@@ -647,10 +662,14 @@ xs_str *xs_tolower_i(xs_str *str)
647xs_list *xs_list_new(void) 662xs_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)
947xs_dict *xs_dict_new(void) 966xs_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 */