mirror of
https://github.com/jarun/nnn.git
synced 2025-01-09 17:39:38 +00:00
Do not resolve symlinks in bookmarks
This commit is contained in:
parent
db1efba256
commit
1df63a78e4
21
src/nnn.c
21
src/nnn.c
|
@ -1163,12 +1163,12 @@ static char *common_prefix(const char *path, char *prefix)
|
||||||
* The library function realpath() resolves symlinks.
|
* The library function realpath() resolves symlinks.
|
||||||
* If there's a symlink in file list we want to show the symlink not what it's points to.
|
* If there's a symlink in file list we want to show the symlink not what it's points to.
|
||||||
*/
|
*/
|
||||||
static char *abspath(const char *path, const char *cwd)
|
static char *abspath(const char *path, const char *cwd, char *buf)
|
||||||
{
|
{
|
||||||
if (!path || !cwd)
|
if (!path)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
size_t dst_size = 0, src_size = xstrlen(path), cwd_size = xstrlen(cwd);
|
size_t dst_size = 0, src_size = xstrlen(path), cwd_size = cwd ? xstrlen(cwd) : 0;
|
||||||
size_t len = src_size;
|
size_t len = src_size;
|
||||||
const char *src;
|
const char *src;
|
||||||
char *dst;
|
char *dst;
|
||||||
|
@ -1177,15 +1177,20 @@ static char *abspath(const char *path, const char *cwd)
|
||||||
* ./ (find .)
|
* ./ (find .)
|
||||||
* no separator (fd .): this needs an additional char for '/'
|
* no separator (fd .): this needs an additional char for '/'
|
||||||
*/
|
*/
|
||||||
char *resolved_path = malloc(src_size + (*path == '/' ? 0 : cwd_size) + 2);
|
char *resolved_path = buf ? buf : malloc(src_size + (*path == '/' ? 0 : cwd_size) + 2);
|
||||||
|
|
||||||
if (!resolved_path)
|
if (!resolved_path)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* Turn relative paths into absolute */
|
/* Turn relative paths into absolute */
|
||||||
if (path[0] != '/')
|
if (path[0] != '/') {
|
||||||
|
if (!cwd) {
|
||||||
|
if (!buf)
|
||||||
|
free(resolved_path);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
dst_size = xstrsncpy(resolved_path, cwd, cwd_size + 1) - 1;
|
dst_size = xstrsncpy(resolved_path, cwd, cwd_size + 1) - 1;
|
||||||
else
|
} else
|
||||||
resolved_path[0] = '\0';
|
resolved_path[0] = '\0';
|
||||||
|
|
||||||
src = path;
|
src = path;
|
||||||
|
@ -3752,7 +3757,7 @@ static char *get_kv_val(kv *kvarr, char *buf, int key, uchar_t max, uchar_t id)
|
||||||
|
|
||||||
val = bmstr + kvarr[r].off;
|
val = bmstr + kvarr[r].off;
|
||||||
convert_tilde(val, g_buf);
|
convert_tilde(val, g_buf);
|
||||||
return realpath(((val[0] == '~') ? g_buf : val), buf);
|
return abspath(((val[0] == '~') ? g_buf : val), NULL, buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7814,7 +7819,7 @@ static char *load_input(int fd, const char *path)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
paths[i] = abspath(paths[i], cwd);
|
paths[i] = abspath(paths[i], cwd, NULL);
|
||||||
if (!paths[i]) {
|
if (!paths[i]) {
|
||||||
entries = i; // free from the previous entry
|
entries = i; // free from the previous entry
|
||||||
goto malloc_2;
|
goto malloc_2;
|
||||||
|
|
Loading…
Reference in a new issue