mirror of
https://github.com/MiSTer-devel/Linux-Kernel_MiSTer.git
synced 2026-04-19 03:04:24 +00:00
exfat: use ATTR_SYSTEM as symlink flag to preserve links while copying on Windows or other OS.
This commit is contained in:
@@ -62,17 +62,17 @@
|
||||
#define ATTR_NORMAL 0x0000
|
||||
#define ATTR_READONLY 0x0001
|
||||
#define ATTR_HIDDEN 0x0002
|
||||
#define ATTR_SYSTEM 0x0004
|
||||
#define ATTR_SYMLINK 0x0004
|
||||
#define ATTR_VOLUME 0x0008
|
||||
#define ATTR_SUBDIR 0x0010
|
||||
#define ATTR_ARCHIVE 0x0020
|
||||
#define ATTR_SYMLINK 0x0040
|
||||
#define ATTR_SYMLINK_OLD 0x0040
|
||||
#define ATTR_EXTEND 0x000F
|
||||
#define ATTR_RWMASK 0x007E
|
||||
|
||||
/* file creation modes */
|
||||
#define FM_REGULAR 0x00
|
||||
#define FM_SYMLINK 0x40
|
||||
#define FM_REGULAR ATTR_NORMAL
|
||||
#define FM_SYMLINK ATTR_SYMLINK
|
||||
|
||||
/* return values */
|
||||
#define FFS_SUCCESS 0
|
||||
|
||||
@@ -1470,7 +1470,7 @@ static int exfat_fill_inode(struct inode *inode, FILE_ID_T *fid)
|
||||
i_size_write(inode, info.Size);
|
||||
EXFAT_I(inode)->mmu_private = i_size_read(inode);
|
||||
set_nlink(inode, info.NumSubdirs);
|
||||
} else if (info.Attr & ATTR_SYMLINK) { /* symbolic link */
|
||||
} else if (info.Attr & (ATTR_SYMLINK | ATTR_SYMLINK_OLD)) { /* symbolic link */
|
||||
inode->i_generation |= 1;
|
||||
inode->i_mode = exfat_make_mode(sbi, info.Attr, S_IRWXUGO);
|
||||
inode->i_op = &exfat_symlink_inode_operations;
|
||||
|
||||
@@ -135,7 +135,7 @@ static inline mode_t exfat_make_mode(struct exfat_sb_info *sbi,
|
||||
|
||||
if (attr & ATTR_SUBDIR)
|
||||
return (mode & ~sbi->options.fs_dmask) | S_IFDIR;
|
||||
else if (attr & ATTR_SYMLINK)
|
||||
else if (attr & (ATTR_SYMLINK | ATTR_SYMLINK_OLD))
|
||||
return (mode & ~sbi->options.fs_dmask) | S_IFLNK;
|
||||
else
|
||||
return (mode & ~sbi->options.fs_fmask) | S_IFREG;
|
||||
|
||||
Reference in New Issue
Block a user