diff options
| -rw-r--r-- | fs/adfs/adfs.h | 1 | ||||
| -rw-r--r-- | fs/adfs/dir.c | 21 | ||||
| -rw-r--r-- | fs/adfs/dir_f.c | 17 | ||||
| -rw-r--r-- | fs/adfs/dir_fplus.c | 18 |
4 files changed, 24 insertions, 33 deletions
diff --git a/fs/adfs/adfs.h b/fs/adfs/adfs.h index c76db75f02aa..1097bee65fa9 100644 --- a/fs/adfs/adfs.h +++ b/fs/adfs/adfs.h | |||
| @@ -172,6 +172,7 @@ extern const struct dentry_operations adfs_dentry_operations; | |||
| 172 | extern const struct adfs_dir_ops adfs_f_dir_ops; | 172 | extern const struct adfs_dir_ops adfs_f_dir_ops; |
| 173 | extern const struct adfs_dir_ops adfs_fplus_dir_ops; | 173 | extern const struct adfs_dir_ops adfs_fplus_dir_ops; |
| 174 | 174 | ||
| 175 | void adfs_object_fixup(struct adfs_dir *dir, struct object_info *obj); | ||
| 175 | extern int adfs_dir_update(struct super_block *sb, struct object_info *obj, | 176 | extern int adfs_dir_update(struct super_block *sb, struct object_info *obj, |
| 176 | int wait); | 177 | int wait); |
| 177 | 178 | ||
diff --git a/fs/adfs/dir.c b/fs/adfs/dir.c index be4b4f950500..03490f16300d 100644 --- a/fs/adfs/dir.c +++ b/fs/adfs/dir.c | |||
| @@ -16,6 +16,27 @@ | |||
| 16 | */ | 16 | */ |
| 17 | static DEFINE_RWLOCK(adfs_dir_lock); | 17 | static DEFINE_RWLOCK(adfs_dir_lock); |
| 18 | 18 | ||
| 19 | void adfs_object_fixup(struct adfs_dir *dir, struct object_info *obj) | ||
| 20 | { | ||
| 21 | obj->filetype = -1; | ||
| 22 | |||
| 23 | /* | ||
| 24 | * object is a file and is filetyped and timestamped? | ||
| 25 | * RISC OS 12-bit filetype is stored in load_address[19:8] | ||
| 26 | */ | ||
| 27 | if ((0 == (obj->attr & ADFS_NDA_DIRECTORY)) && | ||
| 28 | (0xfff00000 == (0xfff00000 & obj->loadaddr))) { | ||
| 29 | obj->filetype = (__u16) ((0x000fff00 & obj->loadaddr) >> 8); | ||
| 30 | |||
| 31 | /* optionally append the ,xyz hex filetype suffix */ | ||
| 32 | if (ADFS_SB(dir->sb)->s_ftsuffix) | ||
| 33 | obj->name_len += | ||
| 34 | append_filetype_suffix( | ||
| 35 | &obj->name[obj->name_len], | ||
| 36 | obj->filetype); | ||
| 37 | } | ||
| 38 | } | ||
| 39 | |||
| 19 | static int | 40 | static int |
| 20 | adfs_readdir(struct file *file, struct dir_context *ctx) | 41 | adfs_readdir(struct file *file, struct dir_context *ctx) |
| 21 | { | 42 | { |
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, | |||
| 216 | obj->execaddr = adfs_readval(de->direxec, 4); | 216 | obj->execaddr = adfs_readval(de->direxec, 4); |
| 217 | obj->size = adfs_readval(de->dirlen, 4); | 217 | obj->size = adfs_readval(de->dirlen, 4); |
| 218 | obj->attr = de->newdiratts; | 218 | obj->attr = de->newdiratts; |
| 219 | obj->filetype = -1; | ||
| 220 | 219 | ||
| 221 | /* | 220 | adfs_object_fixup(dir, obj); |
| 222 | * object is a file and is filetyped and timestamped? | ||
| 223 | * RISC OS 12-bit filetype is stored in load_address[19:8] | ||
| 224 | */ | ||
| 225 | if ((0 == (obj->attr & ADFS_NDA_DIRECTORY)) && | ||
| 226 | (0xfff00000 == (0xfff00000 & obj->loadaddr))) { | ||
| 227 | obj->filetype = (__u16) ((0x000fff00 & obj->loadaddr) >> 8); | ||
| 228 | |||
| 229 | /* optionally append the ,xyz hex filetype suffix */ | ||
| 230 | if (ADFS_SB(dir->sb)->s_ftsuffix) | ||
| 231 | obj->name_len += | ||
| 232 | append_filetype_suffix( | ||
| 233 | &obj->name[obj->name_len], | ||
| 234 | obj->filetype); | ||
| 235 | } | ||
| 236 | } | 221 | } |
| 237 | 222 | ||
| 238 | /* | 223 | /* |
diff --git a/fs/adfs/dir_fplus.c b/fs/adfs/dir_fplus.c index c92cfb638c18..308009d00a5b 100644 --- a/fs/adfs/dir_fplus.c +++ b/fs/adfs/dir_fplus.c | |||
| @@ -197,23 +197,7 @@ adfs_fplus_getnext(struct adfs_dir *dir, struct object_info *obj) | |||
| 197 | if (obj->name[i] == '/') | 197 | if (obj->name[i] == '/') |
| 198 | obj->name[i] = '.'; | 198 | obj->name[i] = '.'; |
| 199 | 199 | ||
| 200 | obj->filetype = -1; | 200 | adfs_object_fixup(dir, obj); |
| 201 | |||
| 202 | /* | ||
| 203 | * object is a file and is filetyped and timestamped? | ||
| 204 | * RISC OS 12-bit filetype is stored in load_address[19:8] | ||
| 205 | */ | ||
| 206 | if ((0 == (obj->attr & ADFS_NDA_DIRECTORY)) && | ||
| 207 | (0xfff00000 == (0xfff00000 & obj->loadaddr))) { | ||
| 208 | obj->filetype = (__u16) ((0x000fff00 & obj->loadaddr) >> 8); | ||
| 209 | |||
| 210 | /* optionally append the ,xyz hex filetype suffix */ | ||
| 211 | if (ADFS_SB(dir->sb)->s_ftsuffix) | ||
| 212 | obj->name_len += | ||
| 213 | append_filetype_suffix( | ||
| 214 | &obj->name[obj->name_len], | ||
| 215 | obj->filetype); | ||
| 216 | } | ||
| 217 | 201 | ||
| 218 | dir->pos += 1; | 202 | dir->pos += 1; |
| 219 | ret = 0; | 203 | ret = 0; |
