summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2019-07-18 19:57:32 -0400
committerJakob Kaivo <jkk@ung.org>2019-07-18 19:57:32 -0400
commit6cc006e821030853640030ded24b11e27f2d4ec7 (patch)
tree9305d9c7cb672bde945d52573422476abe087dd9
parentf87be61844fed4988ed90863854b19d047297a37 (diff)
moving towards correct
-rw-r--r--index.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/index.c b/index.c
index 87aeaa3..b617b91 100644
--- a/index.c
+++ b/index.c
@@ -1,7 +1,60 @@
#define _XOPEN_SOURCE 700
+#include <fcntl.h>
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
#include "blog.h"
+#include <errno.h>
+
void add_to_index(const char *path, const char *title)
{
+ printf("Status: 200 OK\r\n");
+ printf("Content-Type: text/plain\r\n\r\n");
+
+ int blogdir = open(DATA_DIRECTORY, O_DIRECTORY);
+ if (blogdir == -1) {
+ printf("open(DATA_DIRECTORY): %s\n", strerror(errno));
+ return;
+ }
+
+ char *dir = strdup(path);
+ if (dir == NULL) {
+ printf("strdup(path): %s\n", strerror(errno));
+ return;
+ }
+
+ char index_path[FILENAME_MAX] = { 0 };
+ snprintf(index_path, sizeof(index_path), "%s/index.html", dirname(dir));
+
+ /* open index.html */
+ int index_fd = openat(blogdir, index_path, O_RDWR | O_CREAT, 0644);
+ if (index_fd == -1) {
+ printf("open(index_path): %s\n", strerror(errno));
+ return;
+ }
+
+ /* find the end of text */
+ off_t eot = 0;
+
+ if (eot == 0) {
+ dprintf(index_fd, HTML_HEAD, "index");
+ } else {
+ ftruncate(index_fd, eot);
+ }
+
+ /* add link */
+ dprintf(index_fd, "<a href=\"/%s\">%s</a><br>", path, title);
+
+ /* (re-)add footer */
+ dprintf(index_fd, HTML_TAIL, current_year());
+
+ close(index_fd);
+
+
+ free(dir);
+ close(blogdir);
}