static void cleanup(void *const unused) { HTTPServerFree(&server_raw); HTTPServerFree(&server_tls); BlogFree(&blog); SLNRepoFree(&repo); async_pool_destroy_shared(); }
BlogRef BlogCreate(SLNRepoRef const repo) { assertf(repo, "Blog requires valid repo"); BlogRef blog = calloc(1, sizeof(struct Blog)); if(!blog) return NULL; blog->repo = repo; blog->dir = aasprintf("%s/blog", SLNRepoGetDir(repo)); blog->cacheDir = aasprintf("%s/blog", SLNRepoGetCacheDir(repo)); if(!blog->dir || !blog->cacheDir) { BlogFree(&blog); return NULL; } // Automatically attempt to create a default blog resource directory. // If it fails, it's probably because it already exists. // If not, we'll find out when we try to load a template. (void)async_fs_symlink(INSTALL_PREFIX "/share/stronglink/blog", blog->dir, 0); if( !load_template(blog, "header.html", &blog->header) || !load_template(blog, "footer.html", &blog->footer) || !load_template(blog, "backlinks.html", &blog->backlinks) || !load_template(blog, "entry-start.html", &blog->entry_start) || !load_template(blog, "entry-end.html", &blog->entry_end) || !load_template(blog, "preview.html", &blog->preview) || !load_template(blog, "empty.html", &blog->empty) || !load_template(blog, "compose.html", &blog->compose) || !load_template(blog, "upload.html", &blog->upload) || !load_template(blog, "login.html", &blog->login) || !load_template(blog, "notfound.html", &blog->notfound) || !load_template(blog, "noresults.html", &blog->noresults) ) { BlogFree(&blog); return NULL; } async_mutex_init(blog->pending_mutex, 0); async_cond_init(blog->pending_cond, 0); return blog; }
static void cleanup(void *const unused) { HTTPServerFree(&server_raw); HTTPServerFree(&server_tls); RSSServerFree(&rss); BlogFree(&blog); SLNRepoFree(&repo); async_pool_enter(NULL); fflush(NULL); // Everything. async_pool_leave(NULL); async_pool_destroy_shared(); }