source: mainline/uspace/srv/fs/minixfs/mfs_inode.c@ df22c36

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since df22c36 was df22c36, checked in by Maurizio Lombardi <m.lombardi85@…>, 14 years ago

add function to read V2/V3 inodes on disk

  • Property mode set to 100644
File size: 2.1 KB
Line 
1#include <stdlib.h>
2#include <mem.h>
3#include "mfs.h"
4#include "mfs_utils.h"
5
6struct mfs_inode *mfs_read_inode_raw(const struct mfs_instance *instance,
7 uint16_t inum)
8{
9 struct mfs_inode *ino;
10 struct mfs_sb_info *sbi;
11 block_t *b;
12 int i;
13
14 const size_t ino_size = sizeof(struct mfs_inode);
15
16 ino = (struct mfs_inode *) malloc(ino_size);
17
18 if (!ino)
19 return NULL;
20
21 sbi = instance->sbi;
22
23 block_get(&b, instance->handle, 2 + inum / V1_INODES_PER_BLOCK,
24 BLOCK_FLAGS_NONE);
25
26 memcpy(ino, ((uint8_t *) b->data) + inum * ino_size, ino_size);
27
28 ino->i_mode = conv16(sbi->native, ino->i_mode);
29 ino->i_uid = conv16(sbi->native, ino->i_uid);
30 ino->i_size = conv32(sbi->native, ino->i_size);
31 ino->i_mtime = conv32(sbi->native, ino->i_mtime);
32
33 for (i = 0; i < V1_NR_DIRECT_ZONES; ++i)
34 ino->i_dzone[i] = conv16(sbi->native, ino->i_dzone[i]);
35
36 for (i = 0; i < V1_NR_INDIRECT_ZONES; ++i)
37 ino->i_izone[i] = conv16(sbi->native, ino->i_izone[i]);
38
39 block_put(b);
40
41 return ino;
42}
43
44struct mfs2_inode *mfs2_read_inode_raw(const struct mfs_instance *instance,
45 uint32_t inum)
46{
47 struct mfs2_inode *ino;
48 struct mfs_sb_info *sbi;
49 block_t *b;
50 int i;
51
52 const size_t ino_size = sizeof(struct mfs2_inode);
53
54 ino = (struct mfs2_inode *) malloc(ino_size);
55
56 if (!ino)
57 return NULL;
58
59 sbi = instance->sbi;
60
61 block_get(&b, instance->handle,
62 2 + inum / V3_INODES_PER_BLOCK(sbi->block_size),
63 BLOCK_FLAGS_NONE);
64
65 memcpy(ino, ((uint8_t *)b->data) + inum * ino_size, ino_size);
66
67 ino->i_mode = conv16(sbi->native, ino->i_mode);
68 ino->i_nlinks = conv16(sbi->native, ino->i_nlinks);
69 ino->i_uid = conv16(sbi->native, ino->i_uid);
70 ino->i_gid = conv16(sbi->native, ino->i_gid);
71 ino->i_size = conv32(sbi->native, ino->i_size);
72 ino->i_atime = conv32(sbi->native, ino->i_atime);
73 ino->i_mtime = conv32(sbi->native, ino->i_mtime);
74 ino->i_ctime = conv32(sbi->native, ino->i_ctime);
75
76 for (i = 0; i < V2_NR_DIRECT_ZONES; ++i)
77 ino->i_dzone[i] = conv32(sbi->native, ino->i_dzone[i]);
78
79 for (i = 0; i < V2_NR_INDIRECT_ZONES; ++i)
80 ino->i_izone[i] = conv32(sbi->native, ino->i_izone[i]);
81
82 block_put(b);
83
84 return ino;
85}
86
Note: See TracBrowser for help on using the repository browser.