From 231bfcdc0391cde9077e6ae0cd14dc6831fb1b88 Mon Sep 17 00:00:00 2001 From: Omar Polo Date: Mon, 21 Dec 2020 14:38:31 +0100 Subject: [PATCH] make -d handle correctly non-absolute paths before the -d option only accepted absolute paths, and this wasn't documented. Even more, with the default value of "docs" it won't work. Now it transforms all relative paths to absolute paths before going on. --- gmid.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/gmid.c b/gmid.c index 1e57bca..e5cf21d 100644 --- a/gmid.c +++ b/gmid.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -992,6 +993,21 @@ loop(struct tls *ctx, int sock) } } +char * +absolutify_path(const char *path) +{ + char *wd, *r; + + if (*path == '/') + return strdup(path); + + wd = getwd(NULL); + if (asprintf(&r, "%s/%s", wd, path) == -1) + err(1, "asprintf"); + free(wd); + return r; +} + void usage(const char *me) { @@ -1019,7 +1035,7 @@ main(int argc, char **argv) connected_clients = 0; - dir = "docs/"; + dir = absolutify_path("docs"); cgi = NULL; port = 1965; foreground = 0; @@ -1031,7 +1047,9 @@ main(int argc, char **argv) break; case 'd': - dir = optarg; + free((char*)dir); + if ((dir = absolutify_path(optarg)) == NULL) + err(1, "absolutify_path"); break; case 'f':