From abbee959bf5c87a8b2ad0b2d55d9ddb955147892 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yaroslav=20de=20la=20Pe=C3=B1a=20Smirnov?= Date: Mon, 8 Nov 2021 23:29:08 +0300 Subject: Minor fixes here and there * Added year variable to album template * Fixed a minor leak and dangling pointer * Other small improvements --- Makefile | 4 ++++ include/components.h | 2 ++ src/components.c | 11 ++++++++++- src/render.c | 8 ++++++-- src/site.c | 1 + template-vars.md | 1 + 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index ed44d6e..d5b07eb 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,9 @@ ifdef DEBUG BUILDIR:=build/debug CFLAGS:=-std=c99 -O0 -g -DDEBUG $(XFLAGS) endif +ifdef ASAN +CFLAGS+= -fsanitize=address -fno-omit-frame-pointer +endif OBJDIR=$(BUILDIR)/obj @@ -37,6 +40,7 @@ $(OBJDIR)/%.o: %.c $(CC) -c $(CFLAGS) $(IDIRS) -o $@ $< $(LIBS) revela: $(ALL_OBJS) + mkdir -p $(@D) $(CC) $(LDFLAGS) -o $(BUILDIR)/$@ $^ $(LIBS) $(CFLAGS) clean: diff --git a/include/components.h b/include/components.h index ba5c866..c56de77 100644 --- a/include/components.h +++ b/include/components.h @@ -77,6 +77,8 @@ int album_cmp(const void *a, const void *b); void album_add_image(struct album *, struct image *); +void album_set_year(struct album *); + void album_destroy(void *data); #endif diff --git a/src/components.c b/src/components.c index 082eab9..8937a83 100644 --- a/src/components.c +++ b/src/components.c @@ -199,7 +199,7 @@ album_new(struct album_config *conf, struct site_config *sconf, const char *src, album->slug = slugify(rsrc, sconf->base_url, &album->url); album->images = bstree_new(image_cmp, image_destroy); album->tstamp = MAXTIME; - album->map = hashmap_new_with_cap(8); + album->map = hashmap_new_with_cap(16); album->thumbs = vector_new(128); album->previews = vector_new(sconf->max_previews); @@ -222,6 +222,15 @@ album_add_image(struct album *album, struct image *image) bstree_add(album->images, image); } +void +album_set_year(struct album *album) +{ + char *delim = strchr(album->datestr, '-'); + size_t n = delim - album->datestr; + strncpy(album->year, album->datestr, n); + album->year[n] = '\0'; +} + void album_destroy(void *data) { diff --git a/src/render.c b/src/render.c index 7c72cad..acd1de2 100644 --- a/src/render.c +++ b/src/render.c @@ -93,6 +93,8 @@ albums_walk(struct bstnode *node, void *data) hashmap_insert(album->map, "title", album->config->title); hashmap_insert(album->map, "desc", album->config->desc); hashmap_insert(album->map, "link", album->url); + hashmap_insert(album->map, "date", (char *)album->datestr); + hashmap_insert(album->map, "year", album->year); bstree_inorder_walk(album->images->root, images_walk, NULL); @@ -158,7 +160,7 @@ render_make_index(struct render *r, const char *path) bool render_make_album(struct render *r, const char *path, const struct album *album) { - hashmap_insert(r->common_vars, "album", album->map); + if (!r->dry_run) hashmap_insert(r->common_vars, "album", album->map); RENDER_MAKE_START; @@ -201,7 +203,7 @@ render_init(struct render *r, const char *root, struct site_config *conf, r->modtime = tstat.st_mtim; - if (r->dry_run) return true; + if (r->dry_run) goto cleanup; r->env = env_new(tmplpath); if (r->env == NULL) { @@ -221,6 +223,8 @@ render_init(struct render *r, const char *root, struct site_config *conf, bstree_inorder_walk(albums->root, albums_walk, (void *)r); +cleanup: + free(tmplpath); return true; } diff --git a/src/site.c b/src/site.c index 1acdc7c..e96c52c 100644 --- a/src/site.c +++ b/src/site.c @@ -181,6 +181,7 @@ traverse(struct site *site, const char *path, struct stat *dstat) } if (album->images->root != NULL) { + album_set_year(album); bstree_add(site->albums, album); closedir(dir); return true; diff --git a/template-vars.md b/template-vars.md index 2108b87..f222813 100644 --- a/template-vars.md +++ b/template-vars.md @@ -21,6 +21,7 @@ A very rough and dirty representation of the variables in each template. - `desc` - `link` - `date` + - `year` - `previews` (vector of thumbs) - `thumbs` (vector) - `link` -- cgit v1.2.3