00001
00002
00003
00004
00005
00006
00007
00008 #include"giis.h"
00009
00010
00011
00012
00013
00014 int find_inode_offset ()
00015 {
00016 int i;
00017 fs.group_number = (fs.inode_number - 1) / fs.inodes_per_group;
00018 fs.index_number = (fs.inode_number - 1) % fs.inodes_per_group;
00019 fs.group_offset = fs.first_group_desc + fs.group_number * GROUP_DESC_SIZE;
00020 i = get_group_desc ();
00021 CHECK
00022 fs.inode_offset =
00023 (unsigned long long) fs.inode_table * fs.block_size + fs.index_number * INODE_SIZE;
00024 if (fs.inode_number == ROOT_INODE)
00025 fs.root_inode_offset = fs.inode_offset;
00026 return 1;
00027 }
00028
00029
00030
00031
00032
00033 int read_inode ()
00034 {
00035 int i;
00036 if (fs.inode_offset <= RANGE)
00037 lseek64 (fd, fs.inode_offset, 0);
00038 else
00039 lseek64 (fd, fs.inode_offset, 0);
00040
00041 i = read (fd, iin.buffer, INODE_SIZE);
00042 CHECK if (S_ISDIR (iin.in.i_mode))
00043 dir = 1;
00044
00045 return 1;
00046 }
00047
00048
00049
00050
00051
00052 int show_inode ()
00053 {
00054 int i;
00055
00056 printf ("\nInode number : %u", fs.inode_number);
00057 printf ("\nInode offset : %u", fs.inode_offset);
00058 printf ("\nDelete time : %u", iin.in.i_dtime);
00059 printf ("\nHard links : %d", iin.in.i_links_count);
00060 printf ("\nSize : %u", iin.in.i_size);
00061 printf ("\nInode type :");
00062
00063 if (iin.in.i_mode == 0)
00064 printf ("Free");
00065 if (S_ISREG (iin.in.i_mode))
00066 printf ("Regular file ");
00067 if (S_ISDIR (iin.in.i_mode))
00068 printf (" Directory");
00069 if (S_ISLNK (iin.in.i_mode))
00070 printf (" Symbolic Link");
00071 if (S_ISCHR (iin.in.i_mode))
00072 printf (" character device");
00073 if (S_ISBLK (iin.in.i_mode))
00074 printf (" Block device");
00075 for (i = 0; i < 15; i++)
00076 printf ("\nData blocks[%d] :%u", i, iin.in.i_block[i]);
00077 }