summaryrefslogtreecommitdiffstats
path: root/misc-utils/namei.c
diff options
context:
space:
mode:
authorKarel Zak2009-10-07 01:34:36 +0200
committerKarel Zak2009-10-07 01:34:36 +0200
commitd1dca71078a9ed8eef35ba2b790d1e7db9421f66 (patch)
tree9c0c87896156c66e8ca27bf863bd00c0f1c31e40 /misc-utils/namei.c
parentwipefs: fix coding style (diff)
downloadkernel-qcow2-util-linux-d1dca71078a9ed8eef35ba2b790d1e7db9421f66.tar.gz
kernel-qcow2-util-linux-d1dca71078a9ed8eef35ba2b790d1e7db9421f66.tar.xz
kernel-qcow2-util-linux-d1dca71078a9ed8eef35ba2b790d1e7db9421f66.zip
namei: fix alone symlink evaluation
$ mkdir aaa $ ln -s aaa mylink old version: $ namei mylink namei: could not stat 'mylink/aaa': No such file or directory new version: $ namei mylink f: mylink l mylink -> aaa d aaa Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/namei.c')
-rw-r--r--misc-utils/namei.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/misc-utils/namei.c b/misc-utils/namei.c
index b8930cdf0..ebd82fdb8 100644
--- a/misc-utils/namei.c
+++ b/misc-utils/namei.c
@@ -190,14 +190,15 @@ readlink_to_namei(struct namei *nm, const char *path)
if (*sym != '/') {
char *p = strrchr(path, '/');
- nm->relstart = p ? p - path : strlen(path);
- sz += nm->relstart + 1;
+ nm->relstart = p ? p - path : 0;
+ if (nm->relstart)
+ sz += nm->relstart + 1;
}
nm->abslink = malloc(sz + 1);
if (!nm->abslink)
err(EXIT_FAILURE, _("out of memory?"));
- if (*sym != '/') {
+ if (*sym != '/' && nm->relstart) {
/* create the absolute path from the relative symlink */
memcpy(nm->abslink, path, nm->relstart);
*(nm->abslink + nm->relstart) = '/';