Whamcloud - gitweb
Update ext2ed with newer superblock descriptions, and add directory indexing
authorTheodore Ts'o <tytso@mit.edu>
Sun, 12 May 2002 04:13:36 +0000 (00:13 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 12 May 2002 04:13:36 +0000 (00:13 -0400)
structure.  Add support for displaying and setting character fields.

Add make depend logic and use e2fsprogs version strings.

ext2ed/ChangeLog
ext2ed/Makefile.in
ext2ed/ext2.descriptors
ext2ed/ext2ed.h
ext2ed/general_com.c
ext2ed/init.c
ext2ed/main.c
ext2ed/win.c

index 1b15737..85ac560 100644 (file)
@@ -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
index c41938c..d6e82c1 100644 (file)
@@ -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
index 9d107fa..bf927b0 100644 (file)
@@ -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];
+};
+
+
index 1e3af18..3b165e7 100644 (file)
@@ -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;
 
index 21fd30b..efcd3e2 100644 (file)
@@ -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;
index 1beb851..6ee1d37 100644 (file)
@@ -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++; 
index 367c4ea..5ea116b 100644 (file)
@@ -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)
index 76ba197..55fa23c 100644 (file)
@@ -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);