aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaulo Alcantara <pcacjr@zytor.com>2012-09-02 20:03:13 -0300
committerPaulo Alcantara <pcacjr@zytor.com>2012-09-02 20:07:20 -0300
commit75cf6cebf0ffdf75f359528b01fc9039062e7b34 (patch)
treee0561313bc94664ba90edf2cc1542ac5ad12269b
parent1e4d29ab0fde3f81701b3de206179e6ecd545420 (diff)
downloadsyslinux-75cf6cebf0ffdf75f359528b01fc9039062e7b34.tar.gz
syslinux-75cf6cebf0ffdf75f359528b01fc9039062e7b34.tar.xz
syslinux-75cf6cebf0ffdf75f359528b01fc9039062e7b34.zip
xfs: Fix the way we check di_mode of an inode
The previous way to judge the di_mode of an inode could not distinguish S_IFREG and S_IFLNK. Fix it to a better judgement. Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
-rw-r--r--core/fs/xfs/xfs.c2
-rw-r--r--core/fs/xfs/xfs_dir2.c24
2 files changed, 13 insertions, 13 deletions
diff --git a/core/fs/xfs/xfs.c b/core/fs/xfs/xfs.c
index 7102d7a1..98d62551 100644
--- a/core/fs/xfs/xfs.c
+++ b/core/fs/xfs/xfs.c
@@ -322,7 +322,7 @@ static struct inode *xfs_iget_root(struct fs_info *fs)
xfs_debug("Root inode has been found!");
- if (!(be16_to_cpu(core->di_mode) & S_IFDIR)) {
+ if ((be16_to_cpu(core->di_mode) & S_IFMT) != S_IFDIR) {
xfs_error("root inode is not a directory ?! No makes sense...");
goto out;
}
diff --git a/core/fs/xfs/xfs_dir2.c b/core/fs/xfs/xfs_dir2.c
index 45b4ff10..c52196ae 100644
--- a/core/fs/xfs/xfs_dir2.c
+++ b/core/fs/xfs/xfs_dir2.c
@@ -158,14 +158,14 @@ found:
inode->ino = ino;
inode->size = be64_to_cpu(ncore->di_size);
- if (be16_to_cpu(ncore->di_mode) & S_IFDIR) {
+ if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFDIR) {
inode->mode = DT_DIR;
xfs_debug("Found a directory inode!");
- } else if (be16_to_cpu(ncore->di_mode) & S_IFREG) {
+ } else if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFREG) {
inode->mode = DT_REG;
xfs_debug("Found a file inode!");
xfs_debug("inode size %llu", inode->size);
- } else if (be16_to_cpu(ncore->di_mode) & S_IFLNK) {
+ } else if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFLNK) {
inode->mode = DT_LNK;
xfs_debug("Found a symbolic link inode!");
}
@@ -260,14 +260,14 @@ found:
XFS_PVT(inode)->i_ino_blk = ino_to_bytes(fs, ino) >> BLOCK_SHIFT(fs);
inode->size = be64_to_cpu(ncore->di_size);
- if (be16_to_cpu(ncore->di_mode) & S_IFDIR) {
+ if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFDIR) {
inode->mode = DT_DIR;
xfs_debug("Found a directory inode!");
- } else if (be16_to_cpu(ncore->di_mode) & S_IFREG) {
+ } else if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFREG) {
inode->mode = DT_REG;
xfs_debug("Found a file inode!");
xfs_debug("inode size %llu", inode->size);
- } else if (be16_to_cpu(ncore->di_mode) & S_IFLNK) {
+ } else if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFLNK) {
inode->mode = DT_LNK;
xfs_debug("Found a symbolic link inode!");
}
@@ -414,14 +414,14 @@ found:
BLOCK_SHIFT(parent->fs);
ip->size = be64_to_cpu(ncore->di_size);
- if (be16_to_cpu(ncore->di_mode) & S_IFDIR) {
+ if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFDIR) {
ip->mode = DT_DIR;
xfs_debug("Found a directory inode!");
- } else if (be16_to_cpu(ncore->di_mode) & S_IFREG) {
+ } else if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFREG) {
ip->mode = DT_REG;
xfs_debug("Found a file inode!");
xfs_debug("inode size %llu", ip->size);
- } else if (be16_to_cpu(ncore->di_mode) & S_IFLNK) {
+ } else if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFLNK) {
ip->mode = DT_LNK;
xfs_debug("Found a symbolic link inode!");
}
@@ -731,14 +731,14 @@ found:
BLOCK_SHIFT(parent->fs);
ip->size = be64_to_cpu(ncore->di_size);
- if (be16_to_cpu(ncore->di_mode) & S_IFDIR) {
+ if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFDIR) {
ip->mode = DT_DIR;
xfs_debug("Found a directory inode!");
- } else if (be16_to_cpu(ncore->di_mode) & S_IFREG) {
+ } else if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFREG) {
ip->mode = DT_REG;
xfs_debug("Found a file inode!");
xfs_debug("inode size %llu", ip->size);
- } else if (be16_to_cpu(ncore->di_mode) & S_IFLNK) {
+ } else if ((be16_to_cpu(ncore->di_mode) & S_IFMT) == S_IFLNK) {
ip->mode = DT_LNK;
xfs_debug("Found a symbolic link inode!");
}