src/inode.c

Go to the documentation of this file.
00001 /*
00002 * /giis/inode.c -Performs inode related opertions 
00003 *
00004 * Copyright (C) 2005. G.Lakshmipathi.<lakshmipathi_g@rediffmail.com>
00005 *
00006 */
00007 
00008 #include"giis.h"
00009 
00010 /*
00011 * find_inode_offset() - Computes given inodes offset.
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 ();        /* Get corresponding group values */
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 * read_inode() - All necessary informations is loaded so just go and read 
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 * show_inode() - Display Some inode details 
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 }

Generated on Wed Jul 25 20:43:33 2007 for giis by  doxygen 1.5.1