diff --git a/usr.sbin/makefs/zfs/fs.c b/usr.sbin/makefs/zfs/fs.c --- a/usr.sbin/makefs/zfs/fs.c +++ b/usr.sbin/makefs/zfs/fs.c @@ -300,12 +300,17 @@ ssize_t n; int fd; - fs_populate_path(cur, arg, path, sizeof(path), &fd); + if (cur->symlink != NULL) { + n = strlcpy(buf, cur->symlink, bufsz); + assert(n < bufsz); + } else { + fs_populate_path(cur, arg, path, sizeof(path), &fd); - n = readlinkat(fd, path, buf, bufsz - 1); - if (n == -1) - err(1, "readlinkat(%s)", cur->name); - buf[n] = '\0'; + n = readlinkat(fd, path, buf, bufsz - 1); + if (n == -1) + err(1, "readlinkat(%s)", cur->name); + buf[n] = '\0'; + } } static void