#include #include "gebs/gebs.h" #include "incbin/incbin.h" #include "stb/stb_ds.h" #include "baked.h" #include "locked.h" INCBIN(gpp1, "./gpp1"); INCBIN(home_html, "./tmpls/home.html"); INCBIN(page_missing_html, "./tmpls/page-missing.html"); INCBIN(template_blog_html, "./tmpls/template-blog.html"); INCBIN(blog_html, "./tmpls/blog.html"); INCBIN(simple_css, "./etc/simple.css"); INCBIN(favicon_ico, "./etc/favicon.ico"); #if MY_DEBUG INCBIN(hotreload_js, "./etc/hotreload.js"); #endif INCBIN(theme_js, "./etc/theme.js"); INCBIN(highlight_js, "./etc/highlight.js"); INCBIN(hljs_rainbow_css, "./etc/hljs-rainbow.css"); INCBIN(marked_js, "./etc/marked.js"); INCBIN(me_jpg, "./etc/me.jpg"); INCBIN(tmoa_engine_jpg, "./etc/tmoa-engine.jpg"); INCBIN(tmoa_garbage_jpg, "./etc/tmoa-garbage.jpg"); INCBIN(blog_welcome_md, "./blog/welcome.md"); INCBIN(blog_weird_page_md, "./blog/weird-page.md"); INCBIN(blog_curious_case_of_gebs_md, "./blog/curious-case-of-gebs.md"); INCBIN(blog_the_making_of_aboba_md, "./blog/the-making-of-aboba.md"); static locked(Baked_Resource *) baked_resources = locked_init(nil); void lock_baked_resources(void) { lockx(&baked_resources); } void unlock_baked_resources(void) { unlockx(&baked_resources); } void add_baked_resource(char *key, const uchar *data, size_t size) { int fd = memfd_create(key, 0); if (fd < 0) { LOGE("Could not create resource %s. Aborting...\n", key); abort(); } write(fd, data, size); shput(baked_resources.value, key, fd); } void init_baked_resources(void) { lockx(&baked_resources); add_baked_resource("home.html", home_html_data, home_html_size); add_baked_resource("page-missing.html", page_missing_html_data, page_missing_html_size); add_baked_resource("template-blog.html", template_blog_html_data, template_blog_html_size); add_baked_resource("blog.html", blog_html_data, blog_html_size); add_baked_resource("gpp1", gpp1_data, gpp1_size); add_baked_resource("simple.css", simple_css_data, simple_css_size); add_baked_resource("favicon.ico", favicon_ico_data, favicon_ico_size); #if MY_DEBUG add_baked_resource("hotreload.js", hotreload_js_data, hotreload_js_size); #endif add_baked_resource("theme.js", theme_js_data, theme_js_size); add_baked_resource("highlight.js", highlight_js_data, highlight_js_size); add_baked_resource("hljs-rainbow.css", hljs_rainbow_css_data, hljs_rainbow_css_size); add_baked_resource("marked.js", marked_js_data, marked_js_size); add_baked_resource("me.jpg", me_jpg_data, me_jpg_size); add_baked_resource("tmoa-engine.jpg", tmoa_engine_jpg_data, tmoa_engine_jpg_size); add_baked_resource("tmoa-garbage.jpg", tmoa_garbage_jpg_data, tmoa_garbage_jpg_size); add_baked_resource("blog-welcome.md", blog_welcome_md_data, blog_welcome_md_size); add_baked_resource("blog-weird-page.md", blog_weird_page_md_data, blog_weird_page_md_size); add_baked_resource("blog-curious-case-of-gebs.md", blog_curious_case_of_gebs_md_data, blog_curious_case_of_gebs_md_size); add_baked_resource("blog-the-making-of-aboba.md", blog_the_making_of_aboba_md_data, blog_the_making_of_aboba_md_size); unlockx(&baked_resources); } void free_baked_resources(void) { lockx(&baked_resources); for (size_t i = 0; i < shlen(baked_resources.value); i++) { close(baked_resources.value[i].value); } shfree(baked_resources.value); unlockx(&baked_resources); } bool get_baked_resource_path(char *key, char *buf, size_t size) { if (shgeti(baked_resources.value, key) != -1) { int fd = shget(baked_resources.value, key); snprintf(buf, size, "/proc/%d/fd/%d", getpid(), fd); unlockx(&baked_resources); return true; } return false; } void baked_resource_each(void (*f)(Baked_Resource *resource, void *udata), void *udata) { for (size_t i = 0; i < shlen(baked_resources.value); i++) { f(&baked_resources.value[i], udata); } }