summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Vazgenovich Shakaryan <dvshakaryan@gmail.com>2018-09-17 20:35:11 -0700
committerDavid Vazgenovich Shakaryan <dvshakaryan@gmail.com>2018-09-17 20:35:11 -0700
commit395c4c8b7d251bcae9b7092cbc73c1665c1f17ec (patch)
tree3d1957147bad3d84ba3a835c945e3c49270f6b71
parent101cb879ba853eabf714020eb09f138bc58c8c9c (diff)
downloadjournal-395c4c8b7d251bcae9b7092cbc73c1665c1f17ec.tar.gz
journal-395c4c8b7d251bcae9b7092cbc73c1665c1f17ec.tar.xz
various cleanup and improvements
-rw-r--r--journal.c45
1 files changed, 24 insertions, 21 deletions
diff --git a/journal.c b/journal.c
index c7bd9ba..08ddf09 100644
--- a/journal.c
+++ b/journal.c
@@ -1,3 +1,4 @@
+#define _XOPEN_SOURCE
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
@@ -11,9 +12,9 @@
static char *entries[MAX_ENTRIES];
static int num_entries;
-static void load_entries()
+static void load_entries(char *dir, size_t *max_fn_size)
{
- DIR *d = opendir(ENTRY_DIR);
+ DIR *d = opendir(dir);
if (!d) exit(1);
struct dirent *de;
@@ -21,28 +22,26 @@ static void load_entries()
if (de->d_name[0] == '.') continue;
if (num_entries == MAX_ENTRIES) exit(1);
- size_t entry_size = strlen(de->d_name) + 1;
- char *entry = malloc(entry_size);
- memcpy(entry, de->d_name, entry_size);
+ size_t fn_size = strlen(de->d_name) + 1;
+ if (fn_size > *max_fn_size)
+ *max_fn_size = fn_size;
+ char *entry = malloc(fn_size);
+ memcpy(entry, de->d_name, fn_size);
entries[num_entries++] = entry;
}
closedir(d);
}
-static void print_entry(char *entry)
+static void print_entry(char *path, char *ts)
{
- size_t len = strlen(entry) + 1;
- char *path = malloc(sizeof(ENTRY_DIR) + len);
- memcpy(path, ENTRY_DIR"/", sizeof(ENTRY_DIR));
- memcpy(path + sizeof(ENTRY_DIR), entry, len);
FILE *f = fopen(path, "r");
- free(path);
if (!f) return;
+ struct tm tm;
+ strptime(ts, "%s", &tm);
char date[11];
- long time = atol(entry);
- strftime(date, sizeof(date), "%Y/%m/%d", localtime(&time));
+ strftime(date, sizeof(date), "%Y/%m/%d", &tm);
printf("<div class='entry'><p><span class='date'>%s</span>&emsp;", date);
for (int c = getc(f), nl = 0; c != EOF; c = getc(f)) {
@@ -60,8 +59,7 @@ static void print_entry(char *entry)
}
fclose(f);
-
- printf("</p></div>\n");
+ puts("</p></div>");
}
static int entry_cmp(const void *a, const void *b)
@@ -71,10 +69,11 @@ static int entry_cmp(const void *a, const void *b)
int main()
{
- load_entries();
+ size_t max_fn_size = 0;
+ load_entries(ENTRY_DIR, &max_fn_size);
qsort(entries, num_entries, sizeof(char *), entry_cmp);
- printf(
+ puts(
"<!DOCTYPE html>\n"
"<html lang='en'>\n"
"<head>\n"
@@ -84,16 +83,20 @@ int main()
"<title>"TITLE"</title>\n"
"</head>\n"
"<body>\n"
- "<h1>"TITLE"</h1>\n");
+ "<h1>"TITLE"</h1>");
+ char *path = malloc(sizeof(ENTRY_DIR) + max_fn_size);
+ memcpy(path, ENTRY_DIR"/", sizeof(ENTRY_DIR));
for (int i = 0; i < num_entries; ++i) {
- print_entry(entries[i]);
+ strcpy(path + sizeof(ENTRY_DIR), entries[i]);
+ print_entry(path, entries[i]);
free(entries[i]);
}
- printf(
+ free(path);
+ puts(
"</body>\n"
- "</html>\n");
+ "</html>");
return 0;
}