File:  [DragonFly] / src / sys / vfs / gnu / ext2fs / ext2_inode_cnv.c
Revision 1.4: download - view: text, annotated - select for diffs
Thu Apr 8 20:57:52 2004 UTC (10 years, 6 months ago) by cpressey
Branches: MAIN
CVS tags: HEAD, DragonFly_Stable, DragonFly_Snap29Sep2004, DragonFly_Snap13Sep2004, DragonFly_RELEASE_1_2_Slip, DragonFly_RELEASE_1_2, DragonFly_1_0_REL, DragonFly_1_0_RC1, DragonFly_1_0A_REL
Style(9) cleanup to src/sys/vfs, stage 5/21: ext2fs.

- Convert K&R-style function definitions to ANSI style.

Submitted-by: Andre Nathan <andre@digirati.com.br>
Additional-reformatting-by: cpressey

    1: /*
    2:  * Copyright (c) 1995 The University of Utah and
    3:  * the Computer Systems Laboratory at the University of Utah (CSL).
    4:  * All rights reserved.
    5:  *
    6:  * Permission to use, copy, modify and distribute this software is hereby
    7:  * granted provided that (1) source code retains these copyright, permission,
    8:  * and disclaimer notices, and (2) redistributions including binaries
    9:  * reproduce the notices in supporting documentation, and (3) all advertising
   10:  * materials mentioning features or use of this software display the following
   11:  * acknowledgement: ``This product includes software developed by the
   12:  * Computer Systems Laboratory at the University of Utah.''
   13:  *
   14:  * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
   15:  * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
   16:  * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
   17:  *
   18:  * CSL requests users of this software to return to csl-dist@cs.utah.edu any
   19:  * improvements that they make and grant CSL redistribution rights.
   20:  *
   21:  *      Utah $Hdr$
   22:  * $FreeBSD: src/sys/gnu/ext2fs/ext2_inode_cnv.c,v 1.11 2000/01/01 17:39:21 bde Exp $
   23:  * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_inode_cnv.c,v 1.4 2004/04/08 20:57:52 cpressey Exp $
   24:  */
   25: 
   26: /*
   27:  * routines to convert on disk ext2 inodes in dinodes and back
   28:  */
   29: #include <sys/param.h>
   30: #include <sys/systm.h>
   31: #include <sys/lock.h>
   32: #include <sys/stat.h>
   33: #include <sys/vnode.h>
   34: 
   35: #include <vfs/ufs/quota.h>
   36: #include <vfs/ufs/inode.h>
   37: 
   38: /*
   39:  * Undo the definitions in <ufs/ufs/inode.h> that would destroy the include
   40:  * of <gnu/ext2fs/ext2_fs.h>.
   41:  */
   42: #undef i_atime
   43: #undef i_blocks
   44: #undef i_ctime
   45: #undef i_db
   46: #undef i_flags
   47: #undef i_gen
   48: #undef i_gid
   49: #undef i_ib
   50: #undef i_mode
   51: #undef i_mtime
   52: #undef i_nlink
   53: #undef i_rdev
   54: #undef i_shortlink
   55: #undef i_size
   56: #undef i_uid
   57: 
   58: #include "ext2_fs.h"
   59: #include "ext2_extern.h"
   60: 
   61: void
   62: ext2_print_dinode(struct dinode *di)
   63: {
   64: 	int i;
   65: 	printf( /* "Inode: %5d" */
   66: 		" Type: %10s Mode: 0x%o Flags: 0x%x  Version: %d\n",
   67: 		"n/a", di->di_mode, di->di_flags, di->di_gen);
   68: 	printf( "User: %5lu Group: %5lu  Size: %lu\n",
   69: 		(unsigned long)di->di_uid, (unsigned long)di->di_gid,
   70: 		(unsigned long)di->di_size);
   71: 	printf( "Links: %3d Blockcount: %d\n",
   72: 		di->di_nlink, di->di_blocks);
   73: 	printf( "ctime: 0x%x", di->di_ctime); 
   74: 	printf( "atime: 0x%x", di->di_atime); 
   75: 	printf( "mtime: 0x%x", di->di_mtime); 
   76: 	printf( "BLOCKS: ");
   77: 	for(i=0; i < (di->di_blocks <= 24 ? ((di->di_blocks+1)/2): 12); i++)
   78: 		printf("%d ", di->di_db[i]);
   79: 	printf("\n");
   80: }
   81: 
   82: void
   83: ext2_print_inode(struct inode *in)
   84: {
   85: 	printf( "Inode: %5d", in->i_number);
   86: 	ext2_print_dinode(&in->i_din);
   87: }
   88: 
   89: /*
   90:  *	raw ext2 inode to dinode
   91:  */
   92: void
   93: ext2_ei2di(struct ext2_inode *ei, struct dinode *di)
   94: {
   95:         int     i;
   96: 
   97:         di->di_nlink    = ei->i_links_count;
   98: 	/* Godmar thinks - if the link count is zero, then the inode is
   99: 	   unused - according to ext2 standards. Ufs marks this fact
  100: 	   by setting i_mode to zero - why ?
  101: 	   I can see that this might lead to problems in an undelete.
  102: 	*/
  103: 	di->di_mode     = ei->i_links_count ? ei->i_mode : 0;
  104:         di->di_size     = ei->i_size;
  105:         di->di_atime	= ei->i_atime;
  106:         di->di_mtime	= ei->i_mtime;
  107:         di->di_ctime	= ei->i_ctime;
  108:         di->di_flags    = 0;
  109:         di->di_flags    |= (ei->i_flags & EXT2_APPEND_FL) ? APPEND : 0;
  110:         di->di_flags    |= (ei->i_flags & EXT2_IMMUTABLE_FL) ? IMMUTABLE : 0;
  111:         di->di_blocks   = ei->i_blocks;
  112:         di->di_gen      = ei->i_generation;
  113:         di->di_uid      = ei->i_uid;
  114:         di->di_gid      = ei->i_gid;
  115: 	/* XXX use memcpy */
  116:         for(i = 0; i < NDADDR; i++)
  117:                 di->di_db[i] = ei->i_block[i];
  118:         for(i = 0; i < NIADDR; i++)
  119:                 di->di_ib[i] = ei->i_block[EXT2_NDIR_BLOCKS + i];
  120: }
  121: 
  122: /*
  123:  *	dinode to raw ext2 inode
  124:  */
  125: void
  126: ext2_di2ei(struct dinode *di, struct ext2_inode *ei)
  127: {
  128:         int     i;
  129: 
  130:         ei->i_mode              = di->di_mode;
  131:         ei->i_links_count       = di->di_nlink;
  132: 	/* 
  133: 	   Godmar thinks: if dtime is nonzero, ext2 says this inode
  134: 	   has been deleted, this would correspond to a zero link count
  135: 	 */
  136:         ei->i_dtime             = ei->i_links_count ? 0 : di->di_mtime;
  137:         ei->i_size              = di->di_size;
  138:         ei->i_atime             = di->di_atime;
  139:         ei->i_mtime             = di->di_mtime;
  140:         ei->i_ctime             = di->di_ctime;
  141:         ei->i_flags             = di->di_flags;
  142:         ei->i_flags    		= 0;
  143:         ei->i_flags    		|= (di->di_flags & APPEND) ? EXT2_APPEND_FL: 0;
  144:         ei->i_flags    		|= (di->di_flags & IMMUTABLE) 
  145: 							? EXT2_IMMUTABLE_FL: 0;
  146:         ei->i_blocks            = di->di_blocks;
  147:         ei->i_generation        = di->di_gen;
  148:         ei->i_uid               = di->di_uid;
  149:         ei->i_gid               = di->di_gid;
  150: 	/* XXX use memcpy */
  151:         for(i = 0; i < NDADDR; i++)
  152:                 ei->i_block[i] = di->di_db[i];
  153:         for(i = 0; i < NIADDR; i++)
  154:                 ei->i_block[EXT2_NDIR_BLOCKS + i] = di->di_ib[i];
  155: }