------------------------------ On Wed, May 7, 2014 1:08 PM BST Sergei Antonov wrote: >hfsplus_readdir() did not return DT_LNK record type for symbolic links. It >emitted them as regular files (DT_REG). Programs relying on information from >readdir did not work correctly with HFS+. > >CC: Al Viro <viro@xxxxxxxxxxxxxxxxxx> >CC: Christoph Hellwig <hch@xxxxxxxxxxxxx> >CC: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> >CC: Vyacheslav Dubeyko <slava@xxxxxxxxxxx> >CC: Hin-Tak Leung <htl10@xxxxxxxxxxxxxxxxxxxxx> >Signed-off-by: Sergei Antonov <saproj@xxxxxxxxx> >--- This sounds wrong - a node is either a symlink (a file) or a directory, not both? > fs/hfsplus/dir.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > >diff --git a/fs/hfsplus/dir.c b/fs/hfsplus/dir.c >index bdec665..c5ccb11 100644 >--- a/fs/hfsplus/dir.c >+++ b/fs/hfsplus/dir.c >@@ -212,13 +212,17 @@ static int hfsplus_readdir(struct file *file, struct dir_context *ctx) > be32_to_cpu(entry.folder.id), DT_DIR)) > break; > } else if (type == HFSPLUS_FILE) { >+ u16 mode; >+ > if (fd.entrylength < sizeof(struct hfsplus_cat_file)) { > pr_err("small file entry\n"); > err = -EIO; > goto out; > } >+ mode = be16_to_cpu(entry.file.permissions.mode); > if (!dir_emit(ctx, strbuf, len, >- be32_to_cpu(entry.file.id), DT_REG)) >+ be32_to_cpu(entry.file.id), >+ S_ISLNK(mode) ? DT_LNK : DT_REG)) > break; > } else { > pr_err("bad catalog entry type\n"); >-- >1.9.0 > -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html