commit - e2a579f8ac2e4f79d90c67a8df621e645efa61e6
commit + ad52719b127c5ffa3157b58c12d09de68263096b
blob - 64e06b1637edf214578d2eea527f80610e53512e
blob + 56f68d2ec9e87a11740c8f91e155fa7e4a59ff88
--- rover.c
+++ rover.c
wcolor_set(rover.window, RVC_FIFO, NULL);
else if (S_ISSOCK(EMODE(j)))
wcolor_set(rover.window, RVC_SOCK, NULL);
- if (!S_ISDIR(EMODE(j))) {
+ if (S_ISDIR(EMODE(j))) {
+ mbstowcs(WBUF, ENAME(j), PATH_MAX);
+ if (ISLINK(j))
+ wcscat(WBUF, L"/");
+ } else {
char *suffix, *suffixes = "BKMGTPEZY";
off_t human_size = ESIZE(j) * 10;
int length = mbstowcs(NULL, ENAME(j), 0);
swprintf(WBUF, PATH_MAX, L"%s%*d.%d %c", ENAME(j),
(int) (COLS - length - 8),
(int) human_size / 10, (int) human_size % 10, *suffix);
- } else
- mbstowcs(WBUF, ENAME(j), PATH_MAX);
+ }
mvwhline(rover.window, i + 1, 1, ' ', COLS - 2);
mvwaddnwstr(rover.window, i + 1, 2, WBUF, COLS - 4);
if (marking && MARKED(j)) {
if (flags & SHOW_DIRS) {
rows[i].name = malloc(strlen(ep->d_name) + 2);
strcpy(rows[i].name, ep->d_name);
- strcat(rows[i].name, "/");
+ if (!rows[i].islink)
+ strcat(rows[i].name, "/");
rows[i].mode = statbuf.st_mode;
i++;
}
if (!strcmp(ep->d_name, ".") || !strcmp(ep->d_name, ".."))
continue;
snprintf(subpath, PATH_MAX, "%s%s", path, ep->d_name);
- stat(subpath, &statbuf);
+ lstat(subpath, &statbuf);
if (S_ISDIR(statbuf.st_mode)) {
strcat(subpath, "/");
ret |= process_dir(pre, proc, pos, subpath);