[PATCH] hfs: set type/creator for symlinks
authorRoman Zippel <zippel@linux-m68k.org>
Thu, 19 Jan 2006 01:43:12 +0000 (17:43 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 19 Jan 2006 03:20:23 +0000 (19:20 -0800)
Set the correct type and creator for symlinks.

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/hfsplus/catalog.c
fs/hfsplus/hfsplus_raw.h

index 04058c8..f2d7c49 100644 (file)
@@ -119,8 +119,13 @@ static int hfsplus_cat_build_record(hfsplus_cat_entry *entry, u32 cnid, struct i
                        file->access_date = hfsp_now2mt();
                if (cnid == inode->i_ino) {
                        hfsplus_set_perms(inode, &file->permissions);
-                       file->user_info.fdType = cpu_to_be32(HFSPLUS_SB(inode->i_sb).type);
-                       file->user_info.fdCreator = cpu_to_be32(HFSPLUS_SB(inode->i_sb).creator);
+                       if (S_ISLNK(inode->i_mode)) {
+                               file->user_info.fdType = cpu_to_be32(HFSP_SYMLINK_TYPE);
+                               file->user_info.fdCreator = cpu_to_be32(HFSP_SYMLINK_CREATOR);
+                       } else {
+                               file->user_info.fdType = cpu_to_be32(HFSPLUS_SB(inode->i_sb).type);
+                               file->user_info.fdCreator = cpu_to_be32(HFSPLUS_SB(inode->i_sb).creator);
+                       }
                        if ((file->permissions.rootflags | file->permissions.userflags) & HFSPLUS_FLG_IMMUTABLE)
                                file->flags |= cpu_to_be16(HFSPLUS_FILE_LOCKED);
                } else {
index ccc4796..4920553 100644 (file)
@@ -43,6 +43,9 @@
 #define HFSP_HARDLINK_TYPE     0x686c6e6b      /* 'hlnk' */
 #define HFSP_HFSPLUS_CREATOR   0x6866732b      /* 'hfs+' */
 
+#define HFSP_SYMLINK_TYPE      0x736c6e6b      /* 'slnk' */
+#define HFSP_SYMLINK_CREATOR   0x72686170      /* 'rhap' */
+
 #define HFSP_MOUNT_VERSION     0x482b4c78      /* 'H+Lx' */
 
 /* Structures used on disk */