aboutsummaryrefslogtreecommitdiff
path: root/bin/ls/ls.c
diff options
context:
space:
mode:
Diffstat (limited to 'bin/ls/ls.c')
-rw-r--r--bin/ls/ls.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/bin/ls/ls.c b/bin/ls/ls.c
index 6cacf4fd3a02..cddbb7955b43 100644
--- a/bin/ls/ls.c
+++ b/bin/ls/ls.c
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/syslimits.h>
#include <sys/ioctl.h>
#include <sys/mac.h>
@@ -685,6 +686,7 @@ display(FTSENT *p, FTSENT *list, int options)
flen = 0;
labelstr = NULL;
if (f_label) {
+ char name[PATH_MAX + 1];
mac_t label;
int error;
@@ -696,12 +698,20 @@ display(FTSENT *p, FTSENT *list, int options)
goto label_out;
}
+ if (cur->fts_level == FTS_ROOTLEVEL)
+ snprintf(name, sizeof(name),
+ "%s", cur->fts_name);
+ else
+ snprintf(name, sizeof(name),
+ "%s/%s", cur->fts_parent->fts_accpath,
+ cur->fts_name);
+
if (options & FTS_LOGICAL)
- error = mac_get_file(
- cur->fts_path, label);
+ error = mac_get_file(name,
+ label);
else
- error = mac_get_link(
- cur->fts_name, label);
+ error = mac_get_link(name,
+ label);
if (error == -1) {
perror(cur->fts_name);
mac_free(label);