ext2_inode_cnv.c (198940) | ext2_inode_cnv.c (202283) |
---|---|
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 --- 5 unchanged lines hidden (view full) --- 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$ | 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 --- 5 unchanged lines hidden (view full) --- 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: head/sys/gnu/fs/ext2fs/ext2_inode_cnv.c 198940 2009-11-05 04:51:38Z jh $ | 22 * $FreeBSD: head/sys/fs/ext2fs/ext2_inode_cnv.c 202283 2010-01-14 14:30:54Z lulf $ |
23 */ 24 25/* 26 * routines to convert on disk ext2 inodes into inodes and back 27 */ 28#include <sys/param.h> 29#include <sys/systm.h> 30#include <sys/lock.h> 31#include <sys/stat.h> 32#include <sys/vnode.h> 33 | 23 */ 24 25/* 26 * routines to convert on disk ext2 inodes into inodes and back 27 */ 28#include <sys/param.h> 29#include <sys/systm.h> 30#include <sys/lock.h> 31#include <sys/stat.h> 32#include <sys/vnode.h> 33 |
34#include <gnu/fs/ext2fs/inode.h> 35#include <gnu/fs/ext2fs/ext2_fs.h> 36#include <gnu/fs/ext2fs/ext2_extern.h> | 34#include 35#include <fs/ext2fs/ext2fs.h> 36#include 37#include <fs/ext2fs/ext2_dinode.h> |
37 38void 39ext2_print_inode( in ) 40 struct inode *in; 41{ 42 int i; 43 44 printf( "Inode: %5d", in->i_number); --- 14 unchanged lines hidden (view full) --- 59 printf("\n"); 60} 61 62/* 63 * raw ext2 inode to inode 64 */ 65void 66ext2_ei2i(ei, ip) | 38 39void 40ext2_print_inode( in ) 41 struct inode *in; 42{ 43 int i; 44 45 printf( "Inode: %5d", in->i_number); --- 14 unchanged lines hidden (view full) --- 60 printf("\n"); 61} 62 63/* 64 * raw ext2 inode to inode 65 */ 66void 67ext2_ei2i(ei, ip) |
67 struct ext2_inode *ei; | 68 struct ext2fs_dinode *ei; |
68 struct inode *ip; 69{ 70 int i; 71 | 69 struct inode *ip; 70{ 71 int i; 72 |
72 ip->i_nlink = ei->i_links_count; | 73 ip->i_nlink = ei->e2di_nlink; |
73 /* Godmar thinks - if the link count is zero, then the inode is 74 unused - according to ext2 standards. Ufs marks this fact 75 by setting i_mode to zero - why ? 76 I can see that this might lead to problems in an undelete. 77 */ | 74 /* Godmar thinks - if the link count is zero, then the inode is 75 unused - according to ext2 standards. Ufs marks this fact 76 by setting i_mode to zero - why ? 77 I can see that this might lead to problems in an undelete. 78 */ |
78 ip->i_mode = ei->i_links_count ? ei->i_mode : 0; 79 ip->i_size = ei->i_size; | 79 ip->i_mode = ei->e2di_nlink ? ei->e2di_mode : 0; 80 ip->i_size = ei->e2di_size; |
80 if (S_ISREG(ip->i_mode)) | 81 if (S_ISREG(ip->i_mode)) |
81 ip->i_size |= ((u_int64_t)ei->i_size_high) << 32; 82 ip->i_atime = ei->i_atime; 83 ip->i_mtime = ei->i_mtime; 84 ip->i_ctime = ei->i_ctime; | 82 ip->i_size |= ((u_int64_t)ei->e2di_size_high) << 32; 83 ip->i_atime = ei->e2di_atime; 84 ip->i_mtime = ei->e2di_mtime; 85 ip->i_ctime = ei->e2di_ctime; |
85 ip->i_flags = 0; | 86 ip->i_flags = 0; |
86 ip->i_flags |= (ei->i_flags & EXT2_APPEND_FL) ? SF_APPEND : 0; 87 ip->i_flags |= (ei->i_flags & EXT2_IMMUTABLE_FL) ? SF_IMMUTABLE : 0; 88 ip->i_flags |= (ei->i_flags & EXT2_NODUMP_FL) ? UF_NODUMP : 0; 89 ip->i_blocks = ei->i_blocks; 90 ip->i_gen = ei->i_generation; 91 ip->i_uid = ei->i_uid; 92 ip->i_gid = ei->i_gid; | 87 ip->i_flags |= (ei->e2di_flags & EXT2_APPEND) ? SF_APPEND : 0; 88 ip->i_flags |= (ei->e2di_flags & EXT2_IMMUTABLE) ? SF_IMMUTABLE : 0; 89 ip->i_flags |= (ei->e2di_flags & EXT2_NODUMP) ? UF_NODUMP : 0; 90 ip->i_blocks = ei->e2di_nblock; 91 ip->i_gen = ei->e2di_gen; 92 ip->i_uid = ei->e2di_uid; 93 ip->i_gid = ei->e2di_gid; |
93 /* XXX use memcpy */ 94 for(i = 0; i < NDADDR; i++) | 94 /* XXX use memcpy */ 95 for(i = 0; i < NDADDR; i++) |
95 ip->i_db[i] = ei->i_block[i]; | 96 ip->i_db[i] = ei->e2di_blocks[i]; |
96 for(i = 0; i < NIADDR; i++) | 97 for(i = 0; i < NIADDR; i++) |
97 ip->i_ib[i] = ei->i_block[EXT2_NDIR_BLOCKS + i]; | 98 ip->i_ib[i] = ei->e2di_blocks[EXT2_NDIR_BLOCKS + i]; |
98} 99 100/* 101 * inode to raw ext2 inode 102 */ 103void 104ext2_i2ei(ip, ei) 105 struct inode *ip; | 99} 100 101/* 102 * inode to raw ext2 inode 103 */ 104void 105ext2_i2ei(ip, ei) 106 struct inode *ip; |
106 struct ext2_inode *ei; | 107 struct ext2fs_dinode *ei; |
107{ 108 int i; 109 | 108{ 109 int i; 110 |
110 ei->i_mode = ip->i_mode; 111 ei->i_links_count = ip->i_nlink; | 111 ei->e2di_mode = ip->i_mode; 112 ei->e2di_nlink = ip->i_nlink; |
112 /* 113 Godmar thinks: if dtime is nonzero, ext2 says this inode 114 has been deleted, this would correspond to a zero link count 115 */ | 113 /* 114 Godmar thinks: if dtime is nonzero, ext2 says this inode 115 has been deleted, this would correspond to a zero link count 116 */ |
116 ei->i_dtime = ei->i_links_count ? 0 : ip->i_mtime; 117 ei->i_size = ip->i_size; | 117 ei->e2di_dtime = ei->e2di_nlink ? 0 : ip->i_mtime; 118 ei->e2di_size = ip->i_size; |
118 if (S_ISREG(ip->i_mode)) | 119 if (S_ISREG(ip->i_mode)) |
119 ei->i_size_high = ip->i_size >> 32; 120 ei->i_atime = ip->i_atime; 121 ei->i_mtime = ip->i_mtime; 122 ei->i_ctime = ip->i_ctime; 123 ei->i_flags = ip->i_flags; 124 ei->i_flags = 0; 125 ei->i_flags |= (ip->i_flags & SF_APPEND) ? EXT2_APPEND_FL: 0; 126 ei->i_flags |= (ip->i_flags & SF_IMMUTABLE) ? EXT2_IMMUTABLE_FL: 0; 127 ei->i_flags |= (ip->i_flags & UF_NODUMP) ? EXT2_NODUMP_FL : 0; 128 ei->i_blocks = ip->i_blocks; 129 ei->i_generation = ip->i_gen; 130 ei->i_uid = ip->i_uid; 131 ei->i_gid = ip->i_gid; | 120 ei->e2di_size_high = ip->i_size >> 32; 121 ei->e2di_atime = ip->i_atime; 122 ei->e2di_mtime = ip->i_mtime; 123 ei->e2di_ctime = ip->i_ctime; 124 ei->e2di_flags = ip->i_flags; 125 ei->e2di_flags = 0; 126 ei->e2di_flags |= (ip->i_flags & SF_APPEND) ? EXT2_APPEND: 0; 127 ei->e2di_flags |= (ip->i_flags & SF_IMMUTABLE) ? EXT2_IMMUTABLE: 0; 128 ei->e2di_flags |= (ip->i_flags & UF_NODUMP) ? EXT2_NODUMP: 0; 129 ei->e2di_nblock = ip->i_blocks; 130 ei->e2di_gen = ip->i_gen; 131 ei->e2di_uid = ip->i_uid; 132 ei->e2di_gid = ip->i_gid; |
132 /* XXX use memcpy */ 133 for(i = 0; i < NDADDR; i++) | 133 /* XXX use memcpy */ 134 for(i = 0; i < NDADDR; i++) |
134 ei->i_block[i] = ip->i_db[i]; | 135 ei->e2di_blocks[i] = ip->i_db[i]; |
135 for(i = 0; i < NIADDR; i++) | 136 for(i = 0; i < NIADDR; i++) |
136 ei->i_block[EXT2_NDIR_BLOCKS + i] = ip->i_ib[i]; | 137 ei->e2di_blocks[EXT2_NDIR_BLOCKS + i] = ip->i_ib[i]; |
137} | 138} |