summaryrefslogtreecommitdiff
path: root/ext2ed
diff options
context:
space:
mode:
Diffstat (limited to 'ext2ed')
-rw-r--r--ext2ed/ChangeLog15
-rw-r--r--ext2ed/Makefile.in18
-rw-r--r--ext2ed/ext2.descriptors1187
-rw-r--r--ext2ed/ext2ed.h5
-rw-r--r--ext2ed/general_com.c247
-rw-r--r--ext2ed/init.c93
-rw-r--r--ext2ed/main.c2
-rw-r--r--ext2ed/win.c3
8 files changed, 1177 insertions, 393 deletions
diff --git a/ext2ed/ChangeLog b/ext2ed/ChangeLog
index 1b15737a..85ac5606 100644
--- a/ext2ed/ChangeLog
+++ b/ext2ed/ChangeLog
@@ -1,4 +1,17 @@
-2002-05-11 <tytso@snap.thunk.org>
+2002-05-11 <tytso@mit.edu>
+
+ * win.c, main.c, general_com.c: Use e2fsprogs's version
+ information for the program banner.
+
+ * ext2ed.h, init.c, general_com.c: Add a field_type parameter, and
+ use specialized routines for showing and setting ints, uints,
+ and characeter strings.
+
+ * ext2.descriptors: Updated with newer superblock descriptor; use
+ __u32 and __u16 instead of unsigned long and unsigned
+ short. Add data structures for direcctory indexing code.
+
+2002-05-11 <tytso@mit.edu>
* ext2ed.h: Remove VAR_DIR, and replace it with ETC_DIR.
(/var/lib is no longer a politically correct location for
diff --git a/ext2ed/Makefile.in b/ext2ed/Makefile.in
index c41938c2..d6e82c1e 100644
--- a/ext2ed/Makefile.in
+++ b/ext2ed/Makefile.in
@@ -19,6 +19,12 @@ DOC_DIR = $datadir/doc/ext2ed
XTRA_CFLAGS = $(FLAGS) -DETC_DIR=\"$(root_sysconfdir)\" -I/usr/include/readline
LIBS = -lreadline -lncurses
+SRCS= $(srcdir)/main.c $(srcdir)/init.c $(srcdir)/general_com.c \
+ $(srcdir)/inode_com.c $(srcdir)/dir_com.c $(srcdir)/super_com.c \
+ $(srcdir)/disk.c $(srcdir)/win.c $(srcdir)/group_com.c \
+ $(srcdir)/file_com.c $(srcdir)/blockbitmap_com.c \
+ $(srcdir)/ext2_com.c $(srcdir)/inodebitmap_com.c
+
OBJS= main.o init.o general_com.o inode_com.o dir_com.o super_com.o \
disk.o win.o group_com.o file_com.o blockbitmap_com.o ext2_com.o \
inodebitmap_com.o
@@ -75,3 +81,15 @@ install: ext2ed
# Makefile dependencies follow. This must be the last section in
# the Makefile.in file
#
+main.o: $(srcdir)/main.c $(srcdir)/ext2ed.h
+general_com.o: $(srcdir)/general_com.c $(srcdir)/ext2ed.h
+inode_com.o: $(srcdir)/inode_com.c $(srcdir)/ext2ed.h
+dir_com.o: $(srcdir)/dir_com.c $(srcdir)/ext2ed.h
+super_com.o: $(srcdir)/super_com.c $(srcdir)/ext2ed.h
+disk.o: $(srcdir)/disk.c $(srcdir)/ext2ed.h
+win.o: $(srcdir)/win.c $(srcdir)/ext2ed.h
+group_com.o: $(srcdir)/group_com.c $(srcdir)/ext2ed.h
+file_com.o: $(srcdir)/file_com.c $(srcdir)/ext2ed.h
+blockbitmap_com.o: $(srcdir)/blockbitmap_com.c $(srcdir)/ext2ed.h
+ext2_com.o: $(srcdir)/ext2_com.c $(srcdir)/ext2ed.h
+inodebitmap_com.o: $(srcdir)/inodebitmap_com.c $(srcdir)/ext2ed.h
diff --git a/ext2ed/ext2.descriptors b/ext2ed/ext2.descriptors
index 9d107faa..bf927b02 100644
--- a/ext2ed/ext2.descriptors
+++ b/ext2ed/ext2.descriptors
@@ -57,325 +57,313 @@ struct ext2_acl_entry /* Access Control List Entry */
struct ext2_group_desc
{
- unsigned long bg_block_bitmap; /* Blocks bitmap block */
- unsigned long bg_inode_bitmap; /* Inodes bitmap block */
- unsigned long bg_inode_table; /* Inodes table block */
- unsigned short bg_free_blocks_count; /* Free blocks count */
- unsigned short bg_free_inodes_count; /* Free inodes count */
- unsigned short bg_used_dirs_count; /* Directories count */
- unsigned short bg_pad;
- unsigned long bg_reserved[0];
- unsigned long bg_reserved[1];
- unsigned long bg_reserved[2];
+ __u32 bg_block_bitmap; /* Blocks bitmap block */
+ __u32 bg_inode_bitmap; /* Inodes bitmap block */
+ __u32 bg_inode_table; /* Inodes table block */
+ __u16 bg_free_blocks_count; /* Free blocks count */
+ __u16 bg_free_inodes_count; /* Free inodes count */
+ __u16 bg_used_dirs_count; /* Directories count */
+ __u16 bg_pad;
+ __u32 bg_reserved[0];
+ __u32 bg_reserved[1];
+ __u32 bg_reserved[2];
};
/*
* Structure of an inode on the disk
*/
struct ext2_inode {
- unsigned short i_mode; /* File mode */
- unsigned short i_uid; /* Owner Uid */
- unsigned long i_size; /* Size in bytes */
- unsigned long i_atime; /* Access time */
- unsigned long i_ctime; /* Creation time */
- unsigned long i_mtime; /* Modification time */
- unsigned long i_dtime; /* Deletion Time */
- unsigned short i_gid; /* Group Id */
- unsigned short i_links_count; /* Links count */
- unsigned long i_blocks; /* Blocks count */
- unsigned long i_flags; /* File flags */
- unsigned long l_i_reserved1;
- unsigned long i_block[0]; /* Pointers to blocks */
- unsigned long i_block[1]; /* Pointers to blocks */
- unsigned long i_block[2]; /* Pointers to blocks */
- unsigned long i_block[3]; /* Pointers to blocks */
- unsigned long i_block[4]; /* Pointers to blocks */
- unsigned long i_block[5]; /* Pointers to blocks */
- unsigned long i_block[6]; /* Pointers to blocks */
- unsigned long i_block[7]; /* Pointers to blocks */
- unsigned long i_block[8]; /* Pointers to blocks */
- unsigned long i_block[9]; /* Pointers to blocks */
- unsigned long i_block[10]; /* Pointers to blocks */
- unsigned long i_block[11]; /* Pointers to blocks */
- unsigned long i_block[12]; /* Pointers to blocks */
- unsigned long i_block[13]; /* Pointers to blocks */
- unsigned long i_block[14]; /* Pointers to blocks */
- unsigned long i_version; /* File version (for NFS) */
- unsigned long i_file_acl; /* File ACL */
- unsigned long i_dir_acl; /* Directory ACL */
- unsigned long i_faddr; /* Fragment address */
- unsigned char l_i_frag; /* Fragment number */
- unsigned char l_i_fsize; /* Fragment size */
- unsigned short i_pad1;
- unsigned long l_i_reserved2[0];
- unsigned long l_i_reserved2[1];
+ __u16 i_mode; /* File mode */
+ __u16 i_uid; /* Owner Uid */
+ __u32 i_size; /* Size in bytes */
+ __u32 i_atime; /* Access time */
+ __u32 i_ctime; /* Creation time */
+ __u32 i_mtime; /* Modification time */
+ __u32 i_dtime; /* Deletion Time */
+ __u16 i_gid; /* Group Id */
+ __u16 i_links_count; /* Links count */
+ __u32 i_blocks; /* Blocks count */
+ __u32 i_flags; /* File flags */
+ __u32 l_i_reserved1;
+ __u32 i_block[0]; /* Pointers to blocks */
+ __u32 i_block[1]; /* Pointers to blocks */
+ __u32 i_block[2]; /* Pointers to blocks */
+ __u32 i_block[3]; /* Pointers to blocks */
+ __u32 i_block[4]; /* Pointers to blocks */
+ __u32 i_block[5]; /* Pointers to blocks */
+ __u32 i_block[6]; /* Pointers to blocks */
+ __u32 i_block[7]; /* Pointers to blocks */
+ __u32 i_block[8]; /* Pointers to blocks */
+ __u32 i_block[9]; /* Pointers to blocks */
+ __u32 i_block[10]; /* Pointers to blocks */
+ __u32 i_block[11]; /* Pointers to blocks */
+ __u32 i_block[12]; /* Pointers to blocks */
+ __u32 i_block[13]; /* Pointers to blocks */
+ __u32 i_block[14]; /* Pointers to blocks */
+ __u32 i_version; /* File version (for NFS) */
+ __u32 i_file_acl; /* File ACL */
+ __u32 i_dir_acl; /* Directory ACL */
+ __u32 i_faddr; /* Fragment address */
+ __u8 l_i_frag; /* Fragment number */
+ __u8 l_i_fsize; /* Fragment size */
+ __u16 i_pad1;
+ __u16 l_i_uid_high; /* these 2 fields */
+ __u16 l_i_gid_high; /* were reserved2[0] */
+ __u32 l_i_reserved2;
};
/*
* Structure of the super block
*/
struct ext2_super_block {
- unsigned long s_inodes_count; /* Inodes count */
- unsigned long s_blocks_count; /* Blocks count */
- unsigned long s_r_blocks_count; /* Reserved blocks count */
- unsigned long s_free_blocks_count; /* Free blocks count */
- unsigned long s_free_inodes_count; /* Free inodes count */
- unsigned long s_first_data_block; /* First Data Block */
- unsigned long s_log_block_size; /* Block size */
- long s_log_frag_size; /* Fragment size */
- unsigned long s_blocks_per_group; /* # Blocks per group */
- unsigned long s_frags_per_group; /* # Fragments per group */
- unsigned long s_inodes_per_group; /* # Inodes per group */
- unsigned long s_mtime; /* Mount time */
- unsigned long s_wtime; /* Write time */
- unsigned short s_mnt_count; /* Mount count */
- short s_max_mnt_count; /* Maximal mount count */
- unsigned short s_magic; /* Magic signature */
- unsigned short s_state; /* File system state */
- unsigned short s_errors; /* Behaviour when detecting errors */
- unsigned short s_pad;
- unsigned long s_lastcheck; /* time of last check */
- unsigned long s_checkinterval; /* max. time between checks */
- unsigned long s_creator_os; /* OS */
- unsigned long s_rev_level; /* Revision level */
- unsigned short s_def_resuid;
- unsigned short s_deg_resgid;
+ __u32 s_inodes_count; /* Inodes count */
+ __u32 s_blocks_count; /* Blocks count */
+ __u32 s_r_blocks_count; /* Reserved blocks count */
+ __u32 s_free_blocks_count; /* Free blocks count */
+ __u32 s_free_inodes_count; /* Free inodes count */
+ __u32 s_first_data_block; /* First Data Block */
+ __u32 s_log_block_size; /* Block size */
+ __s32 s_log_frag_size; /* Fragment size */
+ __u32 s_blocks_per_group; /* # Blocks per group */
+ __u32 s_frags_per_group; /* # Fragments per group */
+ __u32 s_inodes_per_group; /* # Inodes per group */
+ __u32 s_mtime; /* Mount time */
+ __u32 s_wtime; /* Write time */
+ __u16 s_mnt_count; /* Mount count */
+ __s16 s_max_mnt_count; /* Maximal mount count */
+ __u16 s_magic; /* Magic signature */
+ __u16 s_state; /* File system state */
+ __u16 s_errors; /* Behaviour when detecting errors */
+ __u16 s_minor_rev_level; /* minor revision level */
+ __u32 s_lastcheck; /* time of last check */
+ __u32 s_checkinterval; /* max. time between checks */
+ __u32 s_creator_os; /* OS */
+ __u32 s_rev_level; /* Revision level */
+ __u16 s_def_resuid; /* Default uid for reserved blocks */
+ __u16 s_def_resgid; /* Default gid for reserved blocks */
+ __u32 s_first_ino; /* First non-reserved inode */
+ __u16 s_inode_size; /* size of inode structure */
+ __u16 s_block_group_nr; /* block group # of this superblock */
+ __u32 s_feature_compat; /* compatible feature set */
+ __u32 s_feature_incompat; /* incompatible feature set */
+ __u32 s_feature_ro_compat; /* readonly-compatible feature set */
+ char[16] s_uuid; /* 128-bit uuid for volume */
+ char[16] s_volume_name; /* volume name */
+ char[64] s_last_mounted; /* directory where last mounted */
+ __u32 s_algorithm_usage_bitmap; /* For compression */
+ /*
+ * Performance hints. Directory preallocation should only
+ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
+ */
+ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
+ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
+ __u16 s_padding1;
+ /*
+ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
+ */
+ char[16] s_journal_uuid; /* uuid of journal superblock */
+ __u32 s_journal_inum; /* inode number of journal file */
+ __u32 s_journal_dev; /* device number of journal file */
+ __u32 s_last_orphan; /* start of list of inodes to delete */
- unsigned long s_reserved[0]; /* Padding to the end of the block */
- unsigned long s_reserved[1];
- unsigned long s_reserved[2];
- unsigned long s_reserved[3];
- unsigned long s_reserved[4];
- unsigned long s_reserved[5];
- unsigned long s_reserved[6];
- unsigned long s_reserved[7];
- unsigned long s_reserved[8];
- unsigned long s_reserved[9];
- unsigned long s_reserved[10];
- unsigned long s_reserved[11];
- unsigned long s_reserved[12];
- unsigned long s_reserved[13];
- unsigned long s_reserved[14];
- unsigned long s_reserved[15];
- unsigned long s_reserved[16];
- unsigned long s_reserved[17];
- unsigned long s_reserved[18];
- unsigned long s_reserved[19];
- unsigned long s_reserved[20];
- unsigned long s_reserved[21];
- unsigned long s_reserved[22];
- unsigned long s_reserved[23];
- unsigned long s_reserved[24];
- unsigned long s_reserved[25];
- unsigned long s_reserved[26];
- unsigned long s_reserved[27];
- unsigned long s_reserved[28];
- unsigned long s_reserved[29];
- unsigned long s_reserved[30];
- unsigned long s_reserved[31];
- unsigned long s_reserved[32];
- unsigned long s_reserved[33];
- unsigned long s_reserved[34];
- unsigned long s_reserved[35];
- unsigned long s_reserved[36];
- unsigned long s_reserved[37];
- unsigned long s_reserved[38];
- unsigned long s_reserved[39];
- unsigned long s_reserved[40];
- unsigned long s_reserved[41];
- unsigned long s_reserved[42];
- unsigned long s_reserved[43];
- unsigned long s_reserved[44];
- unsigned long s_reserved[45];
- unsigned long s_reserved[46];
- unsigned long s_reserved[47];
- unsigned long s_reserved[48];
- unsigned long s_reserved[49];
- unsigned long s_reserved[50];
- unsigned long s_reserved[51];
- unsigned long s_reserved[52];
- unsigned long s_reserved[53];
- unsigned long s_reserved[54];
- unsigned long s_reserved[55];
- unsigned long s_reserved[56];
- unsigned long s_reserved[57];
- unsigned long s_reserved[58];
- unsigned long s_reserved[59];
- unsigned long s_reserved[60];
- unsigned long s_reserved[61];
- unsigned long s_reserved[62];
- unsigned long s_reserved[63];
- unsigned long s_reserved[64];
- unsigned long s_reserved[65];
- unsigned long s_reserved[66];
- unsigned long s_reserved[67];
- unsigned long s_reserved[68];
- unsigned long s_reserved[69];
- unsigned long s_reserved[70];
- unsigned long s_reserved[71];
- unsigned long s_reserved[72];
- unsigned long s_reserved[73];
- unsigned long s_reserved[74];
- unsigned long s_reserved[75];
- unsigned long s_reserved[76];
- unsigned long s_reserved[77];
- unsigned long s_reserved[78];
- unsigned long s_reserved[79];
- unsigned long s_reserved[80];
- unsigned long s_reserved[81];
- unsigned long s_reserved[82];
- unsigned long s_reserved[83];
- unsigned long s_reserved[84];
- unsigned long s_reserved[85];
- unsigned long s_reserved[86];
- unsigned long s_reserved[87];
- unsigned long s_reserved[88];
- unsigned long s_reserved[89];
- unsigned long s_reserved[90];
- unsigned long s_reserved[91];
- unsigned long s_reserved[92];
- unsigned long s_reserved[93];
- unsigned long s_reserved[94];
- unsigned long s_reserved[95];
- unsigned long s_reserved[96];
- unsigned long s_reserved[97];
- unsigned long s_reserved[98];
- unsigned long s_reserved[99];
- unsigned long s_reserved[100];
- unsigned long s_reserved[101];
- unsigned long s_reserved[102];
- unsigned long s_reserved[103];
- unsigned long s_reserved[104];
- unsigned long s_reserved[105];
- unsigned long s_reserved[106];
- unsigned long s_reserved[107];
- unsigned long s_reserved[108];
- unsigned long s_reserved[109];
- unsigned long s_reserved[110];
- unsigned long s_reserved[111];
- unsigned long s_reserved[112];
- unsigned long s_reserved[113];
- unsigned long s_reserved[114];
- unsigned long s_reserved[115];
- unsigned long s_reserved[116];
- unsigned long s_reserved[117];
- unsigned long s_reserved[118];
- unsigned long s_reserved[119];
- unsigned long s_reserved[120];
- unsigned long s_reserved[121];
- unsigned long s_reserved[122];
- unsigned long s_reserved[123];
- unsigned long s_reserved[124];
- unsigned long s_reserved[125];
- unsigned long s_reserved[126];
- unsigned long s_reserved[127];
- unsigned long s_reserved[128];
- unsigned long s_reserved[129];
- unsigned long s_reserved[130];
- unsigned long s_reserved[131];
- unsigned long s_reserved[132];
- unsigned long s_reserved[133];
- unsigned long s_reserved[134];
- unsigned long s_reserved[135];
- unsigned long s_reserved[136];
- unsigned long s_reserved[137];
- unsigned long s_reserved[138];
- unsigned long s_reserved[139];
- unsigned long s_reserved[140];
- unsigned long s_reserved[141];
- unsigned long s_reserved[142];
- unsigned long s_reserved[143];
- unsigned long s_reserved[144];
- unsigned long s_reserved[145];
- unsigned long s_reserved[146];
- unsigned long s_reserved[147];
- unsigned long s_reserved[148];
- unsigned long s_reserved[149];
- unsigned long s_reserved[150];
- unsigned long s_reserved[151];
- unsigned long s_reserved[152];
- unsigned long s_reserved[153];
- unsigned long s_reserved[154];
- unsigned long s_reserved[155];
- unsigned long s_reserved[156];
- unsigned long s_reserved[157];
- unsigned long s_reserved[158];
- unsigned long s_reserved[159];
- unsigned long s_reserved[160];
- unsigned long s_reserved[161];
- unsigned long s_reserved[162];
- unsigned long s_reserved[163];
- unsigned long s_reserved[164];
- unsigned long s_reserved[165];
- unsigned long s_reserved[166];
- unsigned long s_reserved[167];
- unsigned long s_reserved[168];
- unsigned long s_reserved[169];
- unsigned long s_reserved[170];
- unsigned long s_reserved[171];
- unsigned long s_reserved[172];
- unsigned long s_reserved[173];
- unsigned long s_reserved[174];
- unsigned long s_reserved[175];
- unsigned long s_reserved[176];
- unsigned long s_reserved[177];
- unsigned long s_reserved[178];
- unsigned long s_reserved[179];
- unsigned long s_reserved[180];
- unsigned long s_reserved[181];
- unsigned long s_reserved[182];
- unsigned long s_reserved[183];
- unsigned long s_reserved[184];
- unsigned long s_reserved[185];
- unsigned long s_reserved[186];
- unsigned long s_reserved[187];
- unsigned long s_reserved[188];
- unsigned long s_reserved[189];
- unsigned long s_reserved[190];
- unsigned long s_reserved[191];
- unsigned long s_reserved[192];
- unsigned long s_reserved[193];
- unsigned long s_reserved[194];
- unsigned long s_reserved[195];
- unsigned long s_reserved[196];
- unsigned long s_reserved[197];
- unsigned long s_reserved[198];
- unsigned long s_reserved[199];
- unsigned long s_reserved[200];
- unsigned long s_reserved[201];
- unsigned long s_reserved[202];
- unsigned long s_reserved[203];
- unsigned long s_reserved[204];
- unsigned long s_reserved[205];
- unsigned long s_reserved[206];
- unsigned long s_reserved[207];
- unsigned long s_reserved[208];
- unsigned long s_reserved[209];
- unsigned long s_reserved[210];
- unsigned long s_reserved[211];
- unsigned long s_reserved[212];
- unsigned long s_reserved[213];
- unsigned long s_reserved[214];
- unsigned long s_reserved[215];
- unsigned long s_reserved[216];
- unsigned long s_reserved[217];
- unsigned long s_reserved[218];
- unsigned long s_reserved[219];
- unsigned long s_reserved[220];
- unsigned long s_reserved[221];
- unsigned long s_reserved[222];
- unsigned long s_reserved[223];
- unsigned long s_reserved[224];
- unsigned long s_reserved[225];
- unsigned long s_reserved[226];
- unsigned long s_reserved[227];
- unsigned long s_reserved[228];
- unsigned long s_reserved[229];
- unsigned long s_reserved[230];
- unsigned long s_reserved[231];
- unsigned long s_reserved[232];
- unsigned long s_reserved[233];
- unsigned long s_reserved[234];
+
+ __u32 s_reserved[0]; /* Padding to the end of the block */
+ __u32 s_reserved[1];
+ __u32 s_reserved[2];
+ __u32 s_reserved[3];
+ __u32 s_reserved[4];
+ __u32 s_reserved[5];
+ __u32 s_reserved[6];
+ __u32 s_reserved[7];
+ __u32 s_reserved[8];
+ __u32 s_reserved[9];
+ __u32 s_reserved[10];
+ __u32 s_reserved[11];
+ __u32 s_reserved[12];
+ __u32 s_reserved[13];
+ __u32 s_reserved[14];
+ __u32 s_reserved[15];
+ __u32 s_reserved[16];
+ __u32 s_reserved[17];
+ __u32 s_reserved[18];
+ __u32 s_reserved[19];
+ __u32 s_reserved[20];
+ __u32 s_reserved[21];
+ __u32 s_reserved[22];
+ __u32 s_reserved[23];
+ __u32 s_reserved[24];
+ __u32 s_reserved[25];
+ __u32 s_reserved[26];
+ __u32 s_reserved[27];
+ __u32 s_reserved[28];
+ __u32 s_reserved[29];
+ __u32 s_reserved[30];
+ __u32 s_reserved[31];
+ __u32 s_reserved[32];
+ __u32 s_reserved[33];
+ __u32 s_reserved[34];
+ __u32 s_reserved[35];
+ __u32 s_reserved[36];
+ __u32 s_reserved[37];
+ __u32 s_reserved[38];
+ __u32 s_reserved[39];
+ __u32 s_reserved[40];
+ __u32 s_reserved[41];
+ __u32 s_reserved[42];
+ __u32 s_reserved[43];
+ __u32 s_reserved[44];
+ __u32 s_reserved[45];
+ __u32 s_reserved[46];
+ __u32 s_reserved[47];
+ __u32 s_reserved[48];
+ __u32 s_reserved[49];
+ __u32 s_reserved[50];
+ __u32 s_reserved[51];
+ __u32 s_reserved[52];
+ __u32 s_reserved[53];
+ __u32 s_reserved[54];
+ __u32 s_reserved[55];
+ __u32 s_reserved[56];
+ __u32 s_reserved[57];
+ __u32 s_reserved[58];
+ __u32 s_reserved[59];
+ __u32 s_reserved[60];
+ __u32 s_reserved[61];
+ __u32 s_reserved[62];
+ __u32 s_reserved[63];
+ __u32 s_reserved[64];
+ __u32 s_reserved[65];
+ __u32 s_reserved[66];
+ __u32 s_reserved[67];
+ __u32 s_reserved[68];
+ __u32 s_reserved[69];
+ __u32 s_reserved[70];
+ __u32 s_reserved[71];
+ __u32 s_reserved[72];
+ __u32 s_reserved[73];
+ __u32 s_reserved[74];
+ __u32 s_reserved[75];
+ __u32 s_reserved[76];
+ __u32 s_reserved[77];
+ __u32 s_reserved[78];
+ __u32 s_reserved[79];
+ __u32 s_reserved[80];
+ __u32 s_reserved[81];
+ __u32 s_reserved[82];
+ __u32 s_reserved[83];
+ __u32 s_reserved[84];
+ __u32 s_reserved[85];
+ __u32 s_reserved[86];
+ __u32 s_reserved[87];
+ __u32 s_reserved[88];
+ __u32 s_reserved[89];
+ __u32 s_reserved[90];
+ __u32 s_reserved[91];
+ __u32 s_reserved[92];
+ __u32 s_reserved[93];
+ __u32 s_reserved[94];
+ __u32 s_reserved[95];
+ __u32 s_reserved[96];
+ __u32 s_reserved[97];
+ __u32 s_reserved[98];
+ __u32 s_reserved[99];
+ __u32 s_reserved[100];
+ __u32 s_reserved[101];
+ __u32 s_reserved[102];
+ __u32 s_reserved[103];
+ __u32 s_reserved[104];
+ __u32 s_reserved[105];
+ __u32 s_reserved[106];
+ __u32 s_reserved[107];
+ __u32 s_reserved[108];
+ __u32 s_reserved[109];
+ __u32 s_reserved[110];
+ __u32 s_reserved[111];
+ __u32 s_reserved[112];
+ __u32 s_reserved[113];
+ __u32 s_reserved[114];
+ __u32 s_reserved[115];
+ __u32 s_reserved[116];
+ __u32 s_reserved[117];
+ __u32 s_reserved[118];
+ __u32 s_reserved[119];
+ __u32 s_reserved[120];
+ __u32 s_reserved[121];
+ __u32 s_reserved[122];
+ __u32 s_reserved[123];
+ __u32 s_reserved[124];
+ __u32 s_reserved[125];
+ __u32 s_reserved[126];
+ __u32 s_reserved[127];
+ __u32 s_reserved[128];
+ __u32 s_reserved[129];
+ __u32 s_reserved[130];
+ __u32 s_reserved[131];
+ __u32 s_reserved[132];
+ __u32 s_reserved[133];
+ __u32 s_reserved[134];
+ __u32 s_reserved[135];
+ __u32 s_reserved[136];
+ __u32 s_reserved[137];
+ __u32 s_reserved[138];
+ __u32 s_reserved[139];
+ __u32 s_reserved[140];
+ __u32 s_reserved[141];
+ __u32 s_reserved[142];
+ __u32 s_reserved[143];
+ __u32 s_reserved[144];
+ __u32 s_reserved[145];
+ __u32 s_reserved[146];
+ __u32 s_reserved[147];
+ __u32 s_reserved[148];
+ __u32 s_reserved[149];
+ __u32 s_reserved[150];
+ __u32 s_reserved[151];
+ __u32 s_reserved[152];
+ __u32 s_reserved[153];
+ __u32 s_reserved[154];
+ __u32 s_reserved[155];
+ __u32 s_reserved[156];
+ __u32 s_reserved[157];
+ __u32 s_reserved[158];
+ __u32 s_reserved[159];
+ __u32 s_reserved[160];
+ __u32 s_reserved[161];
+ __u32 s_reserved[162];
+ __u32 s_reserved[163];
+ __u32 s_reserved[164];
+ __u32 s_reserved[165];
+ __u32 s_reserved[166];
+ __u32 s_reserved[167];
+ __u32 s_reserved[168];
+ __u32 s_reserved[169];
+ __u32 s_reserved[170];
+ __u32 s_reserved[171];
+ __u32 s_reserved[172];
+ __u32 s_reserved[173];
+ __u32 s_reserved[174];
+ __u32 s_reserved[175];
+ __u32 s_reserved[176];
+ __u32 s_reserved[177];
+ __u32 s_reserved[178];
+ __u32 s_reserved[179];
+ __u32 s_reserved[180];
+ __u32 s_reserved[181];
+ __u32 s_reserved[182];
+ __u32 s_reserved[183];
+ __u32 s_reserved[184];
+ __u32 s_reserved[185];
+ __u32 s_reserved[186];
+ __u32 s_reserved[187];
+ __u32 s_reserved[188];
+ __u32 s_reserved[189];
+ __u32 s_reserved[190];
+ __u32 s_reserved[191];
+ __u32 s_reserved[192];
+ __u32 s_reserved[193];
+ __u32 s_reserved[194];
+ __u32 s_reserved[195];
+ __u32 s_reserved[196];
};
The following is actually not used, due to the variable length of the
@@ -387,9 +375,9 @@ name field. EXT2ED handles directories through the type "dir" below.
/* struct ext2_dir_entry { */
/*
- unsigned long inode; /* Inode number */
- unsigned short rec_len; /* Directory entry length */
- unsigned short name_len; /* Name length */
+ __u32 inode; /* Inode number */
+ __u16 rec_len; /* Directory entry length */
+ __u16 name_len; /* Name length */
char name[EXT2_NAME_LEN]; /* File name */
};
*/
@@ -405,3 +393,584 @@ struct block_bitmap {
struct inode_bitmap {
};
+
+struct ext2_dx_root_node {
+ __u32 dot_inode;
+ __u16 dot_rec_len;
+ __u8 dot_name_len;
+ __u8 dot_file_type;
+ char[4] dot_name;
+ __u32 dot_dot_inode;
+ __u16 dot_dot_rec_len;
+ __u8 dot_dot_name_len;
+ __u8 dot_dot_file_type;
+ char[4] dot_dot_name;
+ __u32 reserved_zero;
+ __u8 hash_version; /* 0 now, 1 at release */
+ __u8 info_length; /* 8 */
+ __u8 indirect_levels;
+ __u8 unused_flags;
+ __u16 limit;
+ __u16 count;
+ __u32 block[0];
+ __u32 hash[1];
+ __u32 block[1];
+ __u32 hash[2];
+ __u32 block[2];
+ __u32 hash[3];
+ __u32 block[3];
+ __u32 hash[4];
+ __u32 block[4];
+ __u32 hash[5];
+ __u32 block[5];
+ __u32 hash[6];
+ __u32 block[6];
+ __u32 hash[7];
+ __u32 block[7];
+ __u32 hash[8];
+ __u32 block[8];
+ __u32 hash[9];
+ __u32 block[9];
+ __u32 hash[10];
+ __u32 block[10];
+ __u32 hash[11];
+ __u32 block[11];
+ __u32 hash[12];
+ __u32 block[12];
+ __u32 hash[13];
+ __u32 block[13];
+ __u32 hash[14];
+ __u32 block[14];
+ __u32 hash[15];
+ __u32 block[15];
+ __u32 hash[16];
+ __u32 block[16];
+ __u32 hash[17];
+ __u32 block[17];
+ __u32 hash[18];
+ __u32 block[18];
+ __u32 hash[19];
+ __u32 block[19];
+ __u32 hash[20];
+ __u32 block[20];
+ __u32 hash[21];
+ __u32 block[21];
+ __u32 hash[22];
+ __u32 block[22];
+ __u32 hash[23];
+ __u32 block[23];
+ __u32 hash[24];
+ __u32 block[24];
+ __u32 hash[25];
+ __u32 block[25];
+ __u32 hash[26];
+ __u32 block[26];
+ __u32 hash[27];
+ __u32 block[27];
+ __u32 hash[28];
+ __u32 block[28];
+ __u32 hash[29];
+ __u32 block[29];
+ __u32 hash[30];
+ __u32 block[30];
+ __u32 hash[31];
+ __u32 block[31];
+ __u32 hash[32];
+ __u32 block[32];
+ __u32 hash[33];
+ __u32 block[33];
+ __u32 hash[34];
+ __u32 block[34];
+ __u32 hash[35];
+ __u32 block[35];
+ __u32 hash[36];
+ __u32 block[36];
+ __u32 hash[37];
+ __u32 block[37];
+ __u32 hash[38];
+ __u32 block[38];
+ __u32 hash[39];
+ __u32 block[39];
+ __u32 hash[40];
+ __u32 block[40];
+ __u32 hash[41];
+ __u32 block[41];
+ __u32 hash[42];
+ __u32 block[42];
+ __u32 hash[43];
+ __u32 block[43];
+ __u32 hash[44];
+ __u32 block[44];
+ __u32 hash[45];
+ __u32 block[45];
+ __u32 hash[46];
+ __u32 block[46];
+ __u32 hash[47];
+ __u32 block[47];
+ __u32 hash[48];
+ __u32 block[48];
+ __u32 hash[49];
+ __u32 block[49];
+ __u32 hash[50];
+ __u32 block[50];
+ __u32 hash[51];
+ __u32 block[51];
+ __u32 hash[52];
+ __u32 block[52];
+ __u32 hash[53];
+ __u32 block[53];
+ __u32 hash[54];
+ __u32 block[54];
+ __u32 hash[55];
+ __u32 block[55];
+ __u32 hash[56];
+ __u32 block[56];
+ __u32 hash[57];
+ __u32 block[57];
+ __u32 hash[58];
+ __u32 block[58];
+ __u32 hash[59];
+ __u32 block[59];
+ __u32 hash[60];
+ __u32 block[60];
+ __u32 hash[61];
+ __u32 block[61];
+ __u32 hash[62];
+ __u32 block[62];
+ __u32 hash[63];
+ __u32 block[63];
+ __u32 hash[64];
+ __u32 block[64];
+ __u32 hash[65];
+ __u32 block[65];
+ __u32 hash[66];
+ __u32 block[66];
+ __u32 hash[67];
+ __u32 block[67];
+ __u32 hash[68];
+ __u32 block[68];
+ __u32 hash[69];
+ __u32 block[69];
+ __u32 hash[70];
+ __u32 block[70];
+ __u32 hash[71];
+ __u32 block[71];
+ __u32 hash[72];
+ __u32 block[72];
+ __u32 hash[73];
+ __u32 block[73];
+ __u32 hash[74];
+ __u32 block[74];
+ __u32 hash[75];
+ __u32 block[75];
+ __u32 hash[76];
+ __u32 block[76];
+ __u32 hash[77];
+ __u32 block[77];
+ __u32 hash[78];
+ __u32 block[78];
+ __u32 hash[79];
+ __u32 block[79];
+ __u32 hash[80];
+ __u32 block[80];
+ __u32 hash[81];
+ __u32 block[81];
+ __u32 hash[82];
+ __u32 block[82];
+ __u32 hash[83];
+ __u32 block[83];
+ __u32 hash[84];
+ __u32 block[84];
+ __u32 hash[85];
+ __u32 block[85];
+ __u32 hash[86];
+ __u32 block[86];
+ __u32 hash[87];
+ __u32 block[87];
+ __u32 hash[88];
+ __u32 block[88];
+ __u32 hash[89];
+ __u32 block[89];
+ __u32 hash[80];
+ __u32 block[80];
+ __u32 hash[81];
+ __u32 block[81];
+ __u32 hash[82];
+ __u32 block[82];
+ __u32 hash[83];
+ __u32 block[83];
+ __u32 hash[84];
+ __u32 block[84];
+ __u32 hash[85];
+ __u32 block[85];
+ __u32 hash[86];
+ __u32 block[86];
+ __u32 hash[87];
+ __u32 block[87];
+ __u32 hash[88];
+ __u32 block[88];
+ __u32 hash[89];
+ __u32 block[89];
+ __u32 hash[90];
+ __u32 block[90];
+ __u32 hash[91];
+ __u32 block[91];
+ __u32 hash[92];
+ __u32 block[92];
+ __u32 hash[93];
+ __u32 block[93];
+ __u32 hash[94];
+ __u32 block[94];
+ __u32 hash[95];
+ __u32 block[95];
+ __u32 hash[96];
+ __u32 block[96];
+ __u32 hash[97];
+ __u32 block[97];
+ __u32 hash[98];
+ __u32 block[98];
+ __u32 hash[99];
+ __u32 block[99];
+ __u32 hash[100];
+ __u32 block[100];
+ __u32 hash[101];
+ __u32 block[101];
+ __u32 hash[102];
+ __u32 block[102];
+ __u32 hash[103];
+ __u32 block[103];
+ __u32 hash[104];
+ __u32 block[104];
+ __u32 hash[105];
+ __u32 block[105];
+ __u32 hash[106];
+ __u32 block[106];
+ __u32 hash[107];
+ __u32 block[107];
+ __u32 hash[108];
+ __u32 block[108];
+ __u32 hash[109];
+ __u32 block[109];
+ __u32 hash[110];
+ __u32 block[110];
+ __u32 hash[111];
+ __u32 block[111];
+ __u32 hash[112];
+ __u32 block[112];
+ __u32 hash[113];
+ __u32 block[113];
+ __u32 hash[114];
+ __u32 block[114];
+ __u32 hash[115];
+ __u32 block[115];
+ __u32 hash[116];
+ __u32 block[116];
+ __u32 hash[117];
+ __u32 block[117];
+ __u32 hash[118];
+ __u32 block[118];
+ __u32 hash[119];
+ __u32 block[119];
+ __u32 hash[120];
+ __u32 block[120];
+ __u32 hash[121];
+ __u32 block[121];
+ __u32 hash[122];
+ __u32 block[122];
+ __u32 hash[123];
+ __u32 block[123];
+ __u32 hash[124];
+ __u32 block[124];
+ __u32 hash[125];
+ __u32 block[125];
+ __u32 hash[126];
+ __u32 block[126];
+ __u32 hash[127];
+ __u32 block[127];
+};
+
+struct ext2_dx_int_node {
+ __u32 fake_inode;
+ __u16 fake_rec_len;
+ __u8 fake_name_len;
+ __u8 fake_file_type;
+ __u16 limit;
+ __u16 count;
+ __u32 block[0];
+ __u32 hash[1];
+ __u32 block[1];
+ __u32 hash[2];
+ __u32 block[2];
+ __u32 hash[3];
+ __u32 block[3];
+ __u32 hash[4];
+ __u32 block[4];
+ __u32 hash[5];
+ __u32 block[5];
+ __u32 hash[6];
+ __u32 block[6];
+ __u32 hash[7];
+ __u32 block[7];
+ __u32 hash[8];
+ __u32 block[8];
+ __u32 hash[9];
+ __u32 block[9];
+ __u32 hash[10];
+ __u32 block[10];
+ __u32 hash[11];
+ __u32 block[11];
+ __u32 hash[12];
+ __u32 block[12];
+ __u32 hash[13];
+ __u32 block[13];
+ __u32 hash[14];
+ __u32 block[14];
+ __u32 hash[15];
+ __u32 block[15];
+ __u32 hash[16];
+ __u32 block[16];
+ __u32 hash[17];
+ __u32 block[17];
+ __u32 hash[18];
+ __u32 block[18];
+ __u32 hash[19];
+ __u32 block[19];
+ __u32 hash[20];
+ __u32 block[20];
+ __u32 hash[21];
+ __u32 block[21];
+ __u32 hash[22];
+ __u32 block[22];
+ __u32 hash[23];
+ __u32 block[23];
+ __u32 hash[24];
+ __u32 block[24];
+ __u32 hash[25];
+ __u32 block[25];
+ __u32 hash[26];
+ __u32 block[26];
+ __u32 hash[27];
+ __u32 block[27];
+ __u32 hash[28];
+ __u32 block[28];
+ __u32 hash[29];
+ __u32 block[29];
+ __u32 hash[30];
+ __u32 block[30];
+ __u32 hash[31];
+ __u32 block[31];
+ __u32 hash[32];
+ __u32 block[32];
+ __u32 hash[33];
+ __u32 block[33];
+ __u32 hash[34];
+ __u32 block[34];
+ __u32 hash[35];
+ __u32 block[35];
+ __u32 hash[36];
+ __u32 block[36];
+ __u32 hash[37];
+ __u32 block[37];
+ __u32 hash[38];
+ __u32 block[38];
+ __u32 hash[39];
+ __u32 block[39];
+ __u32 hash[40];
+ __u32 block[40];
+ __u32 hash[41];
+ __u32 block[41];
+ __u32 hash[42];
+ __u32 block[42];
+ __u32 hash[43];
+ __u32 block[43];
+ __u32 hash[44];
+ __u32 block[44];
+ __u32 hash[45];
+ __u32 block[45];
+ __u32 hash[46];
+ __u32 block[46];
+ __u32 hash[47];
+ __u32 block[47];
+ __u32 hash[48];
+ __u32 block[48];
+ __u32 hash[49];
+ __u32 block[49];
+ __u32 hash[50];
+ __u32 block[50];
+ __u32 hash[51];
+ __u32 block[51];
+ __u32 hash[52];
+ __u32 block[52];
+ __u32 hash[53];
+ __u32 block[53];
+ __u32 hash[54];
+ __u32 block[54];
+ __u32 hash[55];
+ __u32 block[55];
+ __u32 hash[56];
+ __u32 block[56];
+ __u32 hash[57];
+ __u32 block[57];
+ __u32 hash[58];
+ __u32 block[58];
+ __u32 hash[59];
+ __u32 block[59];
+ __u32 hash[60];
+ __u32 block[60];
+ __u32 hash[61];
+ __u32 block[61];
+ __u32 hash[62];
+ __u32 block[62];
+ __u32 hash[63];
+ __u32 block[63];
+ __u32 hash[64];
+ __u32 block[64];
+ __u32 hash[65];
+ __u32 block[65];
+ __u32 hash[66];
+ __u32 block[66];
+ __u32 hash[67];
+ __u32 block[67];
+ __u32 hash[68];
+ __u32 block[68];
+ __u32 hash[69];
+ __u32 block[69];
+ __u32 hash[70];
+ __u32 block[70];
+ __u32 hash[71];
+ __u32 block[71];
+ __u32 hash[72];
+ __u32 block[72];
+ __u32 hash[73];
+ __u32 block[73];
+ __u32 hash[74];
+ __u32 block[74];
+ __u32 hash[75];
+ __u32 block[75];
+ __u32 hash[76];
+ __u32 block[76];
+ __u32 hash[77];
+ __u32 block[77];
+ __u32 hash[78];
+ __u32 block[78];
+ __u32 hash[79];
+ __u32 block[79];
+ __u32 hash[80];
+ __u32 block[80];
+ __u32 hash[81];
+ __u32 block[81];
+ __u32 hash[82];
+ __u32 block[82];
+ __u32 hash[83];
+ __u32 block[83];
+ __u32 hash[84];
+ __u32 block[84];
+ __u32 hash[85];
+ __u32 block[85];
+ __u32 hash[86];
+ __u32 block[86];
+ __u32 hash[87];
+ __u32 block[87];
+ __u32 hash[88];
+ __u32 block[88];
+ __u32 hash[89];
+ __u32 block[89];
+ __u32 hash[80];
+ __u32 block[80];
+ __u32 hash[81];
+ __u32 block[81];
+ __u32 hash[82];
+ __u32 block[82];
+ __u32 hash[83];
+ __u32 block[83];
+ __u32 hash[84];
+ __u32 block[84];
+ __u32 hash[85];
+ __u32 block[85];
+ __u32 hash[86];
+ __u32 block[86];
+ __u32 hash[87];
+ __u32 block[87];
+ __u32 hash[88];
+ __u32 block[88];
+ __u32 hash[89];
+ __u32 block[89];
+ __u32 hash[90];
+ __u32 block[90];
+ __u32 hash[91];
+ __u32 block[91];
+ __u32 hash[92];
+ __u32 block[92];
+ __u32 hash[93];
+ __u32 block[93];
+ __u32 hash[94];
+ __u32 block[94];
+ __u32 hash[95];
+ __u32 block[95];
+ __u32 hash[96];
+ __u32 block[96];
+ __u32 hash[97];
+ __u32 block[97];
+ __u32 hash[98];
+ __u32 block[98];
+ __u32 hash[99];
+ __u32 block[99];
+ __u32 hash[100];
+ __u32 block[100];
+ __u32 hash[101];
+ __u32 block[101];
+ __u32 hash[102];
+ __u32 block[102];
+ __u32 hash[103];
+ __u32 block[103];
+ __u32 hash[104];
+ __u32 block[104];
+ __u32 hash[105];
+ __u32 block[105];
+ __u32 hash[106];
+ __u32 block[106];
+ __u32 hash[107];
+ __u32 block[107];
+ __u32 hash[108];
+ __u32 block[108];
+ __u32 hash[109];
+ __u32 block[109];
+ __u32 hash[110];
+ __u32 block[110];
+ __u32 hash[111];
+ __u32 block[111];
+ __u32 hash[112];
+ __u32 block[112];
+ __u32 hash[113];
+ __u32 block[113];
+ __u32 hash[114];
+ __u32 block[114];
+ __u32 hash[115];
+ __u32 block[115];
+ __u32 hash[116];
+ __u32 block[116];
+ __u32 hash[117];
+ __u32 block[117];
+ __u32 hash[118];
+ __u32 block[118];
+ __u32 hash[119];
+ __u32 block[119];
+ __u32 hash[120];
+ __u32 block[120];
+ __u32 hash[121];
+ __u32 block[121];
+ __u32 hash[122];
+ __u32 block[122];
+ __u32 hash[123];
+ __u32 block[123];
+ __u32 hash[124];
+ __u32 block[124];
+ __u32 hash[125];
+ __u32 block[125];
+ __u32 hash[126];
+ __u32 block[126];
+ __u32 hash[127];
+ __u32 block[127];
+};
+
+
diff --git a/ext2ed/ext2ed.h b/ext2ed/ext2ed.h
index 1e3af18a..3b165e7b 100644
--- a/ext2ed/ext2ed.h
+++ b/ext2ed/ext2ed.h
@@ -93,12 +93,17 @@ struct struct_descriptor { /* Describes an object */
unsigned char name [60];
unsigned short fields_num;
unsigned char field_names [MAX_FIELDS][80];
+ unsigned char field_types [MAX_FIELDS];
unsigned short field_lengths [MAX_FIELDS];
unsigned short field_positions [MAX_FIELDS];
struct struct_commands type_commands;
struct struct_descriptor *prev,*next;
};
+#define FIELD_TYPE_INT 1
+#define FIELD_TYPE_UINT 2
+#define FIELD_TYPE_CHAR 3
+
struct struct_type_data { /* The object's data is usually here */
long offset_in_block;
diff --git a/ext2ed/general_com.c b/ext2ed/general_com.c
index 21fd30bb..efcd3e23 100644
--- a/ext2ed/general_com.c
+++ b/ext2ed/general_com.c
@@ -19,6 +19,7 @@ Copyright (C) 1995 Gadi Oxman
#include <string.h>
#include "ext2ed.h"
+#include "../version.h"
void help (char *command_line)
@@ -85,7 +86,7 @@ void help (char *command_line)
wprintw (show_pad,"\n\n");max_line+=2;
- wprintw (show_pad,"EXT2ED ver %d.%d (%s)\n",version_major,version_minor,revision_date);
+ wprintw (show_pad,"EXT2ED ver %s (%s)\n",E2FSPROGS_VERSION, E2FSPROGS_DATE);
wprintw (show_pad,"Copyright (C) 1995 Gadi Oxman\n");
wprintw (show_pad,"Reviewed 2001 Christian Bac\n");
wprintw (show_pad,"EXT2ED is hereby placed under the terms of the GNU General Public License.\n\n");
@@ -275,13 +276,97 @@ void set_offset (char *command_line)
type_data.offset_in_block=0;
}
+void set_int(short len, void *ptr, char *name, char *value)
+{
+ char *char_ptr;
+ short *short_ptr;
+ long *long_ptr;
+ long v;
+ char *tmp;
+
+ v = strtol(value, &tmp, 0);
+ if (*tmp) {
+ wprintw( command_win, "Bad value - %s\n", value);
+ return;
+ }
+ switch (len) {
+ case 1:
+ char_ptr = (char *) ptr;
+ *char_ptr = v;
+ break;
+ case 2:
+ short_ptr = (short *) ptr;
+ *short_ptr = v;
+ break;
+ case 4:
+ long_ptr = (long *) ptr;
+ *long_ptr = v;
+ break;
+ default:
+ wprintw (command_win,
+ "set_int: unsupported length: %d\n", len);
+ return;
+ }
+ wprintw (command_win, "Variable %s set to %s\n",
+ name, value);
+}
+
+void set_uint(short len, void *ptr, char *name, char *value)
+{
+ unsigned char *char_ptr;
+ unsigned short *short_ptr;
+ unsigned long *long_ptr;
+ unsigned long v;
+ char *tmp;
+
+ v = strtoul(value, &tmp, 0);
+ if (*tmp) {
+ wprintw( command_win, "Bad value - %s\n", value);
+ return;
+ }
+ switch (len) {
+ case 1:
+ char_ptr = (unsigned char *) ptr;
+ *char_ptr = v;
+ break;
+ case 2:
+ short_ptr = (unsigned short *) ptr;
+ *short_ptr = v;
+ break;
+ case 4:
+ long_ptr = (unsigned long *) ptr;
+ *long_ptr = v;
+ break;
+ default:
+ wprintw (command_win,
+ "set_uint: unsupported length: %d\n", len);
+ return;
+ }
+ wprintw (command_win, "Variable %s set to %s\n",
+ name, value);
+}
+
+void set_char(short len, void *ptr, char *name, char *value)
+{
+ if (strlen(value)+1 > len) {
+ wprintw( command_win, "Value %s too big for field\n",
+ name, len);
+ return;
+ }
+ memset(ptr, 0, len);
+ strcpy((char *) ptr, value);
+ wprintw (command_win, "Variable %s set to %s\n",
+ name, value);
+}
+
+
void set (char *command_line)
{
unsigned short *int_ptr;
unsigned char *char_ptr;
unsigned long *long_ptr,offset=0;
- int i,found=0;
+ int i,len, found=0;
char *ptr,buffer [80],variable [80],value [80];
if (device_handle==NULL) {
@@ -315,24 +400,24 @@ void set (char *command_line)
if (strcmp (current_type->field_names [i],variable)==0) {
found=1;
ptr=type_data.u.buffer+offset;
- switch (current_type->field_lengths [i]) {
- case 1:
- char_ptr=(unsigned char *) ptr;
- *char_ptr=(char) atoi (value);
- wprintw (command_win,"Variable %s set to %u\n",variable,*char_ptr);refresh_command_win ();
- break;
- case 2:
- int_ptr=(unsigned short *) ptr;
- *int_ptr=atoi (value);
- wprintw (command_win,"Variable %s set to %u\n",variable,*int_ptr);refresh_command_win ();
- break;
-
- case 4:
- long_ptr=(unsigned long *) ptr;
- *long_ptr=atol (value);
- wprintw (command_win,"Variable %s set to %lu\n",variable,*long_ptr);refresh_command_win ();
- break;
+ len = current_type->field_lengths [i];
+ switch (current_type->field_types [i]) {
+ case FIELD_TYPE_INT:
+ set_int(len, ptr, variable, value);
+ break;
+ case FIELD_TYPE_UINT:
+ set_uint(len, ptr, variable, value);
+ break;
+ case FIELD_TYPE_CHAR:
+ set_char(len, ptr, variable, value);
+ break;
+ default:
+ wprintw (command_win,
+ "set: unhandled type %d\n",
+ current_type->field_types [i]);
+ break;
}
+ refresh_command_win ();
}
offset+=current_type->field_lengths [i];
}
@@ -446,11 +531,95 @@ void set_type (char *command_line)
}
}
+void show_int(short len, void *ptr)
+{
+ long temp;
+ char *format;
+
+ switch (len) {
+ case 1:
+ temp = *((char *) ptr);
+ format = "%3d (0x%02x)\n";
+ break;
+ case 2:
+ temp = *((short *) ptr);
+ format = "%d (0x%x)\n";
+ break;
+ case 4:
+ temp = *((long *) ptr);
+ format = "%d\n";
+ break;
+ default:
+ wprintw (show_pad, "unimplemented\n");
+ return;
+ }
+ wprintw(show_pad, format, temp, temp);
+}
+
+void show_uint(short len, void *ptr)
+{
+ unsigned long temp;
+ char *format;
+
+ switch (len) {
+ case 1:
+ temp = *((unsigned char *) ptr);
+ temp = temp & 0xFF;
+ format = "%3u (0x%02x)\n";
+ break;
+ case 2:
+ temp = *((unsigned short *) ptr);
+ temp = temp & 0xFFFF;
+ format = "%u (0x%x)\n";
+ break;
+ case 4:
+ temp = (unsigned long) *((unsigned long *) ptr);
+ format = "%u\n";
+ break;
+ default:
+ wprintw (show_pad, "unimplemented\n");
+ return;
+ }
+ wprintw(show_pad, format, temp, temp);
+}
+
+void show_char(short len, void *ptr)
+{
+ unsigned char *cp = (unsigned char *) ptr;
+ unsigned char ch;
+ int i,j;
+
+ wprintw(show_pad, "\"");
+
+ for (i=0; i < len; i++) {
+ ch = *cp++;
+ if (ch == 0) {
+ for (j=i+1; j < len; j++)
+ if (cp[j-i])
+ break;
+ if (j == len)
+ break;
+ }
+ if (ch > 128) {
+ wprintw(show_pad, "M-");
+ ch -= 128;
+ }
+ if ((ch < 32) || (ch == 0x7f)) {
+ wprintw(show_pad, "^");
+ ch ^= 0x40; /* ^@, ^A, ^B; ^? for DEL */
+ }
+ wprintw(show_pad, "%c", ch);
+ }
+
+ wprintw(show_pad, "\"\n");
+}
+
+
void show (char *command_line)
{
- unsigned int i,l,temp_int;
+ unsigned int i,l,len,temp_int;
unsigned long offset=0,temp_long;
unsigned char temp_char,*ch_ptr;
void *ptr;
@@ -502,29 +671,23 @@ void show (char *command_line)
for (i=0;i<current_type->fields_num;i++) {
wprintw (show_pad,"%-20s = ",current_type->field_names [i]);
ptr=type_data.u.buffer+offset;
- switch (current_type->field_lengths [i]) {
- case 1:
- temp_char=*((unsigned char *) ptr);
- wprintw (show_pad,"%3u (0x%02x",temp_char,temp_char);
- if (temp_char>=' ' && temp_char<='z')
- wprintw (show_pad," , %c)\n",temp_char);
- else
- wprintw (show_pad,")\n");
-
- offset ++;l++;
- break;
- case 2:
- temp_int=*((unsigned short *) ptr);
- wprintw (show_pad,"%u (0x%x)\n",temp_int,temp_int);
- offset +=2;l++;
- break;
- case 4:
- temp_long=*((unsigned long *) ptr);
- wprintw (show_pad,"%lu\n",temp_long);
- offset +=4;l++;
- break;
+ len = current_type->field_lengths[i];
+ switch (current_type->field_types[i]) {
+ case FIELD_TYPE_INT:
+ show_int(len, ptr);
+ break;
+ case FIELD_TYPE_UINT:
+ show_uint(len, ptr);
+ break;
+ case FIELD_TYPE_CHAR:
+ show_char(len, ptr);
+ break;
+ default:
+ wprintw (show_pad, "unimplemented\n");
+ break;
}
-/* offset+=current_type->field_lengths [i]; */
+ offset+=len;
+ l++;
}
current_type->length=offset;
show_pad_info.max_line=l-1;
diff --git a/ext2ed/init.c b/ext2ed/init.c
index 1beb851e..6ee1d372 100644
--- a/ext2ed/init.c
+++ b/ext2ed/init.c
@@ -185,57 +185,74 @@ struct struct_descriptor *add_new_descriptor (char *name)
{
struct struct_descriptor *ptr;
- if (first_type==NULL) {
- first_type=last_type=ptr=(struct struct_descriptor *) malloc (sizeof (struct struct_descriptor));
- if (ptr==NULL) {
- printf ("Error - Can not allocate memory - Quitting\n");
- exit (1);
- }
- ptr->prev=ptr->next=NULL;
- strcpy (ptr->name,name);
- ptr->length=0;
- ptr->fields_num=0;
- ptr->type_commands.last_command=-1;
- fill_type_commands (ptr);
+ ptr = malloc (sizeof (struct struct_descriptor));
+ if (ptr == NULL) {
+ printf ("Error - Can not allocate memory - Quitting\n");
+ exit (1);
}
- else {
- ptr=(struct struct_descriptor *) malloc (sizeof (struct struct_descriptor));
- if (ptr==NULL) {
- printf ("Error - Can not allocate memory - Quitting\n");
- exit (1);
- }
- ptr->prev=last_type;last_type->next=ptr;last_type=ptr;
- strcpy (ptr->name,name);
- ptr->length=0;
- ptr->fields_num=0;
- ptr->type_commands.last_command=-1;
- fill_type_commands (ptr);
+ memset(ptr, 0, sizeof(struct struct_descriptor));
+ ptr->prev = ptr->next = NULL;
+ strcpy (ptr->name,name);
+ ptr->length=0;
+ ptr->fields_num=0;
+ if (first_type==NULL) {
+ first_type = last_type = ptr;
+ } else {
+ ptr->prev = last_type; last_type->next = ptr; last_type=ptr;
}
+ ptr->type_commands.last_command=-1;
+ fill_type_commands (ptr);
return (ptr);
}
+struct type_table {
+ char *name;
+ int field_type;
+ int len;
+};
+
+struct type_table type_table[] = {
+ { "long", FIELD_TYPE_INT, 4 },
+ { "short", FIELD_TYPE_INT, 2 },
+ { "char", FIELD_TYPE_CHAR, 1 },
+ { "__u32", FIELD_TYPE_UINT, 4 },
+ { "__s32", FIELD_TYPE_INT, 4 },
+ { "__u16", FIELD_TYPE_UINT, 2 },
+ { "__s16", FIELD_TYPE_INT, 2 },
+ { "__u8", FIELD_TYPE_UINT, 1 },
+ { "__s8", FIELD_TYPE_INT, 1 },
+ { 0, 0, 0 }
+};
+
void add_new_variable (struct struct_descriptor *ptr,char *v_type,char *v_name)
{
- short len=1;
+ short len=1;
+ char field_type=FIELD_TYPE_INT;
+ struct type_table *p;
strcpy (ptr->field_names [ptr->fields_num],v_name);
ptr->field_positions [ptr->fields_num]=ptr->length;
-
- if (strcasecmp (v_type,"long")==0) len=4;
- if (strcasecmp (v_type,"__u32")==0) len=4;
- if (strcasecmp (v_type,"__s32")==0) len=4;
- if (strcasecmp (v_type,"__u16")==0) len=2;
- if (strcasecmp (v_type,"__s16")==0) len=2;
- if (strcasecmp (v_type,"short")==0) len=2;
- if (strcasecmp (v_type,"int")==0) len=2;
+ for (p = type_table; p->name; p++) {
+ if (strcmp(v_type, p->name) == 0) {
+ len = p->len;
+ field_type = p->field_type;
+ break;
+ }
+ }
+ if (p->name == 0) {
+ if (strncmp(v_type, "char[", 5) == 0) {
+ len = atoi(v_type+5);
+ field_type = FIELD_TYPE_CHAR;
+ } else {
+ printf("Unknown type %s for field %s\n", v_type, v_name);
+ exit(1);
+ }
+ }
- if (strcasecmp (v_type,"__u8")==0) len=1;
- if (strcasecmp (v_type,"__s8")==0) len=1;
- if (strcasecmp (v_type,"char")==0) len=1;
-
- ptr->field_lengths [ptr->fields_num]=len;
+ ptr->field_lengths [ptr->fields_num] = len;
+ ptr->field_types [ptr->fields_num] = field_type;
ptr->length+=len;
ptr->fields_num++;
diff --git a/ext2ed/main.c b/ext2ed/main.c
index 367c4eae..5ea116bd 100644
--- a/ext2ed/main.c
+++ b/ext2ed/main.c
@@ -77,8 +77,6 @@ struct struct_inode_bitmap_info inode_bitmap_info; /* Used by inodebitmap_com.c
int redraw_request=0; /* Is set by a signal handler to handle terminal */
/* screen size change. */
-int version_major=0,version_minor=2;
-char revision_date [80]="April 5 2001";
char email_address [80]="tgud@tochnapc2.technion.ac.il";
int main (void)
diff --git a/ext2ed/win.c b/ext2ed/win.c
index 76ba1977..55fa23c3 100644
--- a/ext2ed/win.c
+++ b/ext2ed/win.c
@@ -24,6 +24,7 @@ Copyright (C) 1995 Gadi Oxman
#include <unistd.h>
#include "ext2ed.h"
+#include "../version.h"
struct struct_pad_info show_pad_info;
WINDOW *title_win,*show_win,*command_win,*show_pad;
@@ -60,7 +61,7 @@ void init_windows (void)
}
box (title_win,0,0);
- sprintf (title_string,"EXT2ED - Extended-2 File System editor ver %d.%d (%s)",version_major,version_minor,revision_date);
+ sprintf (title_string,"EXT2ED - Extended-2 File System editor ver %s (%s)", E2FSPROGS_VERSION, E2FSPROGS_DATE);
wmove (title_win,TITLE_WIN_LINES/2,(COLS-strlen (title_string))/2);
wprintw (title_win,title_string);