From 411c49bcf32d36b9988dc27968a92f3edf8ebed1 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 24 Mar 2019 12:57:32 +0000 Subject: fs/adfs: factor out object fixups Factor out the directory object fixups, which parse the filetype and optionally apply the filetype suffix to the filename. Acked-by: Al Viro Signed-off-by: Russell King --- fs/adfs/dir_f.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) (limited to 'fs/adfs/dir_f.c') diff --git a/fs/adfs/dir_f.c b/fs/adfs/dir_f.c index 0fbfd0b04ae0..1bab896918ed 100644 --- a/fs/adfs/dir_f.c +++ b/fs/adfs/dir_f.c @@ -216,23 +216,8 @@ adfs_dir2obj(struct adfs_dir *dir, struct object_info *obj, obj->execaddr = adfs_readval(de->direxec, 4); obj->size = adfs_readval(de->dirlen, 4); obj->attr = de->newdiratts; - obj->filetype = -1; - /* - * object is a file and is filetyped and timestamped? - * RISC OS 12-bit filetype is stored in load_address[19:8] - */ - if ((0 == (obj->attr & ADFS_NDA_DIRECTORY)) && - (0xfff00000 == (0xfff00000 & obj->loadaddr))) { - obj->filetype = (__u16) ((0x000fff00 & obj->loadaddr) >> 8); - - /* optionally append the ,xyz hex filetype suffix */ - if (ADFS_SB(dir->sb)->s_ftsuffix) - obj->name_len += - append_filetype_suffix( - &obj->name[obj->name_len], - obj->filetype); - } + adfs_object_fixup(dir, obj); } /* -- cgit v1.2.3 From adb514a4e0f6d87ff43d1bc0a948c38530a0dc83 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 24 Mar 2019 13:22:28 +0000 Subject: fs/adfs: factor out filename fixup Move the filename fixup to adfs_object_fixup() so we only have one implementation of this. Acked-by: Al Viro Signed-off-by: Russell King --- fs/adfs/dir_f.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'fs/adfs/dir_f.c') diff --git a/fs/adfs/dir_f.c b/fs/adfs/dir_f.c index 1bab896918ed..033884541a63 100644 --- a/fs/adfs/dir_f.c +++ b/fs/adfs/dir_f.c @@ -41,21 +41,6 @@ static inline void adfs_writeval(unsigned char *p, int len, unsigned int val) } } -static inline int adfs_readname(char *buf, char *ptr, int maxlen) -{ - char *old_buf = buf; - - while ((unsigned char)*ptr >= ' ' && maxlen--) { - if (*ptr == '/') - *buf++ = '.'; - else - *buf++ = *ptr; - ptr++; - } - - return buf - old_buf; -} - #define ror13(v) ((v >> 13) | (v << 19)) #define dir_u8(idx) \ @@ -210,7 +195,16 @@ static inline void adfs_dir2obj(struct adfs_dir *dir, struct object_info *obj, struct adfs_direntry *de) { - obj->name_len = adfs_readname(obj->name, de->dirobname, ADFS_F_NAME_LEN); + unsigned int name_len; + + for (name_len = 0; name_len < ADFS_F_NAME_LEN; name_len++) { + if (de->dirobname[name_len] < ' ') + break; + + obj->name[name_len] = de->dirobname[name_len]; + } + + obj->name_len = name_len; obj->file_id = adfs_readval(de->dirinddiscadd, 3); obj->loadaddr = adfs_readval(de->dirload, 4); obj->execaddr = adfs_readval(de->direxec, 4); -- cgit v1.2.3