Changeset 155f792 in mainline for uspace/srv/fs/minixfs/mfs_inode.c
- Timestamp:
- 2011-03-20T11:30:25Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6adba0a8
- Parents:
- 930baca
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/minixfs/mfs_inode.c
r930baca r155f792 1 1 #include <stdlib.h> 2 2 #include <assert.h> 3 #include <errno.h> 3 4 #include <mem.h> 4 5 #include "mfs.h" 5 6 #include "mfs_utils.h" 6 7 7 struct mfs_ino de*mfs_read_inode_raw(const struct mfs_instance *instance,8 struct mfs_ino_info *mfs_read_inode_raw(const struct mfs_instance *instance, 8 9 uint16_t inum) 9 10 { 10 struct mfs_inode *ino; 11 struct mfs_inode *ino = NULL; 12 struct mfs_ino_info *ino_i = NULL; 11 13 struct mfs_sb_info *sbi; 12 14 block_t *b; … … 16 18 const size_t ino_size = sizeof(struct mfs_inode); 17 19 20 ino_i = (struct mfs_ino_info *) malloc(sizeof(struct mfs_ino_info)); 18 21 ino = (struct mfs_inode *) malloc(ino_size); 19 22 20 if (!ino )21 return NULL;23 if (!ino || !ino_i) 24 goto out_err; 22 25 23 26 sbi = instance->sbi; … … 26 29 const int itable_off = 2 + sbi->ibmap_blocks + sbi->zbmap_blocks; 27 30 28 block_get(&b, instance->handle, itable_off + inum / V1_INODES_PER_BLOCK, 29 BLOCK_FLAGS_NONE); 31 if (block_get(&b, instance->handle, itable_off + inum / V1_INODES_PER_BLOCK, 32 BLOCK_FLAGS_NONE) != EOK) 33 goto out_err; 30 34 31 35 memcpy(ino, ((uint8_t *) b->data) + ino_off * ino_size, ino_size); 32 36 33 ino ->i_mode = conv16(sbi->native, ino->i_mode);34 ino ->i_uid = conv16(sbi->native, ino->i_uid);35 ino ->i_size = conv32(sbi->native, ino->i_size);36 ino ->i_mtime = conv32(sbi->native, ino->i_mtime);37 ino_i->i_mode = conv16(sbi->native, ino->i_mode); 38 ino_i->i_uid = conv16(sbi->native, ino->i_uid); 39 ino_i->i_size = conv32(sbi->native, ino->i_size); 40 ino_i->i_mtime = conv32(sbi->native, ino->i_mtime); 37 41 38 42 for (i = 0; i < V1_NR_DIRECT_ZONES; ++i) 39 ino ->i_dzone[i] = conv16(sbi->native, ino->i_dzone[i]);43 ino_i->i_dzone[i] = conv16(sbi->native, ino->i_dzone[i]); 40 44 41 45 for (i = 0; i < V1_NR_INDIRECT_ZONES; ++i) 42 ino ->i_izone[i] = conv16(sbi->native, ino->i_izone[i]);46 ino_i->i_izone[i] = conv16(sbi->native, ino->i_izone[i]); 43 47 44 48 block_put(b); 45 49 46 return ino; 50 free(ino); 51 return ino_i; 52 53 out_err: 54 if (ino) 55 free(ino); 56 if (ino_i) 57 free(ino_i); 58 return NULL; 47 59 } 48 60 49 struct mfs 2_inode*mfs2_read_inode_raw(const struct mfs_instance *instance,61 struct mfs_ino_info *mfs2_read_inode_raw(const struct mfs_instance *instance, 50 62 uint32_t inum) 51 63 { 52 struct mfs2_inode *ino; 64 struct mfs2_inode *ino = NULL; 65 struct mfs_ino_info *ino_i = NULL; 53 66 struct mfs_sb_info *sbi; 54 67 block_t *b; … … 58 71 59 72 ino = (struct mfs2_inode *) malloc(ino_size); 73 ino_i = (struct mfs_ino_info *) malloc(sizeof(struct mfs_ino_info)); 60 74 61 if (!ino )62 return NULL;75 if (!ino || !ino_i) 76 goto out_err; 63 77 64 78 sbi = instance->sbi; … … 68 82 const int ino_off = inum % V3_INODES_PER_BLOCK(sbi->block_size); 69 83 70 block_get(&b, instance->handle,84 if (block_get(&b, instance->handle, 71 85 itable_off + inum / V3_INODES_PER_BLOCK(sbi->block_size), 72 BLOCK_FLAGS_NONE); 86 BLOCK_FLAGS_NONE) != EOK) 87 goto out_err; 73 88 74 89 memcpy(ino, ((uint8_t *)b->data) + ino_off * ino_size, ino_size); 75 90 76 ino ->i_mode = conv16(sbi->native, ino->i_mode);77 ino ->i_nlinks = conv16(sbi->native, ino->i_nlinks);78 ino ->i_uid = conv16(sbi->native, ino->i_uid);79 ino ->i_gid = conv16(sbi->native, ino->i_gid);80 ino ->i_size = conv32(sbi->native, ino->i_size);81 ino ->i_atime = conv32(sbi->native, ino->i_atime);82 ino ->i_mtime = conv32(sbi->native, ino->i_mtime);83 ino ->i_ctime = conv32(sbi->native, ino->i_ctime);91 ino_i->i_mode = conv16(sbi->native, ino->i_mode); 92 ino_i->i_nlinks = conv16(sbi->native, ino->i_nlinks); 93 ino_i->i_uid = conv16(sbi->native, ino->i_uid); 94 ino_i->i_gid = conv16(sbi->native, ino->i_gid); 95 ino_i->i_size = conv32(sbi->native, ino->i_size); 96 ino_i->i_atime = conv32(sbi->native, ino->i_atime); 97 ino_i->i_mtime = conv32(sbi->native, ino->i_mtime); 98 ino_i->i_ctime = conv32(sbi->native, ino->i_ctime); 84 99 85 100 for (i = 0; i < V2_NR_DIRECT_ZONES; ++i) 86 ino ->i_dzone[i] = conv32(sbi->native, ino->i_dzone[i]);101 ino_i->i_dzone[i] = conv32(sbi->native, ino->i_dzone[i]); 87 102 88 103 for (i = 0; i < V2_NR_INDIRECT_ZONES; ++i) 89 ino ->i_izone[i] = conv32(sbi->native, ino->i_izone[i]);104 ino_i->i_izone[i] = conv32(sbi->native, ino->i_izone[i]); 90 105 91 106 block_put(b); 92 107 93 return ino; 108 free(ino); 109 return ino_i; 110 111 out_err: 112 if (ino) 113 free(ino); 114 if (ino_i) 115 free(ino_i); 116 return NULL; 94 117 } 95 118
Note:
See TracChangeset
for help on using the changeset viewer.