From a7152012558006b0f0ffca633c8c90ff4ce9726d Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 6 Jan 2016 15:21:41 +0000 Subject: [PATCH] Print the resolved path for cwd Avoids weird things like /etc/.. when displaying cwd. Also no need for cwd to be on the heap. --- noice.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/noice.c b/noice.c index 9f4f0cb0..41172409 100644 --- a/noice.c +++ b/noice.c @@ -595,8 +595,9 @@ populate(void) void redraw(void) { + char cwd[PATH_MAX], cwdresolved[PATH_MAX]; + size_t ncols; int nlines, odd; - char *cwd; int i; nlines = MIN(LINES - 4, n); @@ -615,11 +616,14 @@ redraw(void) DPRINTF_S(path); /* No text wrapping in cwd line */ - cwd = xmalloc(COLS * sizeof(char)); - strlcpy(cwd, path, COLS * sizeof(char)); - cwd[COLS - strlen(CWD) - 1] = '\0'; + ncols = COLS; + if (ncols > PATH_MAX) + ncols = PATH_MAX; + strlcpy(cwd, path, ncols); + cwd[ncols - strlen(CWD) - 1] = '\0'; + realpath(cwd, cwdresolved); - printw(CWD "%s\n\n", cwd); + printw(CWD "%s\n\n", cwdresolved); /* Print listing */ odd = ISODD(nlines);