diff options
author | Russell King <rmk+kernel@armlinux.org.uk> | 2019-06-04 14:50:24 +0100 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2019-06-26 20:14:14 -0400 |
commit | b4ed8f75c82876342b3399942427392ba5f3bbb5 (patch) | |
tree | 255a51e96a772f90f358229791f06ccdcfdb6929 /fs/adfs/adfs.h | |
parent | 8616108de152447f99570dd45b6e3b8c71615fe5 (diff) | |
download | linux-b4ed8f75c82876342b3399942427392ba5f3bbb5.tar.gz linux-b4ed8f75c82876342b3399942427392ba5f3bbb5.tar.bz2 linux-b4ed8f75c82876342b3399942427392ba5f3bbb5.zip |
fs/adfs: add time stamp and file type helpers
Add some helpers to check whether the inode has a time stamp and file
type, and to parse the file type from the load address.
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/adfs/adfs.h')
-rw-r--r-- | fs/adfs/adfs.h | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/fs/adfs/adfs.h b/fs/adfs/adfs.h index 9eb9bea1cef2..b7e844d2f321 100644 --- a/fs/adfs/adfs.h +++ b/fs/adfs/adfs.h @@ -9,6 +9,15 @@ #define ADFS_BAD_FRAG 1 #define ADFS_ROOT_FRAG 2 +#define ADFS_FILETYPE_NONE ((u16)~0) + +/* RISC OS 12-bit filetype is stored in load_address[19:8] */ +static inline u16 adfs_filetype(u32 loadaddr) +{ + return (loadaddr & 0xfff00000) == 0xfff00000 ? + (loadaddr >> 8) & 0xfff : ADFS_FILETYPE_NONE; +} + #define ADFS_NDA_OWNER_READ (1 << 0) #define ADFS_NDA_OWNER_WRITE (1 << 1) #define ADFS_NDA_LOCKED (1 << 2) @@ -27,12 +36,20 @@ struct adfs_inode_info { __u32 parent_id; /* parent indirect disc address */ __u32 loadaddr; /* RISC OS load address */ __u32 execaddr; /* RISC OS exec address */ - unsigned int filetype; /* RISC OS file type */ unsigned int attr; /* RISC OS permissions */ - unsigned int stamped:1; /* RISC OS file has date/time */ struct inode vfs_inode; }; +static inline struct adfs_inode_info *ADFS_I(struct inode *inode) +{ + return container_of(inode, struct adfs_inode_info, vfs_inode); +} + +static inline bool adfs_inode_is_stamped(struct inode *inode) +{ + return (ADFS_I(inode)->loadaddr & 0xfff00000) == 0xfff00000; +} + /* * Forward-declare this */ @@ -68,11 +85,6 @@ static inline struct adfs_sb_info *ADFS_SB(struct super_block *sb) return sb->s_fs_info; } -static inline struct adfs_inode_info *ADFS_I(struct inode *inode) -{ - return container_of(inode, struct adfs_inode_info, vfs_inode); -} - /* * Directory handling */ @@ -105,9 +117,6 @@ struct object_info { __u8 attr; /* RISC OS attributes */ unsigned int name_len; /* name length */ char name[ADFS_MAX_NAME_LEN];/* file name */ - - /* RISC OS file type (12-bit: derived from loadaddr) */ - __u16 filetype; }; struct adfs_dir_ops { |