We assume that the user reached here using the dir command of the inode type and not by using settype dir, so
that init_dir_info is indeed called to gather the required information.
-type_data is not changed ! It still contains the inode of the file - We handle the directory in our own
+type_data is not changed! It still contains the inode of the file - We handle the directory in our own
variables, so that settype ext2_inode will "go back" to the inode of this directory.
First written on: April 28 1995
{
struct struct_file_info info; /* Temporary variables used to */
- struct ext2_dir_entry *dir_entry_ptr; /* contain the current search entries */
-
- int return_code;
+ struct ext2_dir_entry_2 *dir_entry_ptr; /* contain the current search entries */
+ int return_code, next;
info=first_file_info; /* Start from the first entry - Read it */
low_read (info.buffer,file_system_info.block_size,info.global_block_offset);
- dir_entry_ptr=(struct ext2_dir_entry *) (info.buffer+info.dir_entry_offset);
+ dir_entry_ptr=(struct ext2_dir_entry_2 *) (info.buffer+info.dir_entry_offset);
while (info.file_offset < info.file_length) { /* While we haven't reached the end */
/* Pass to the next entry */
- dir_entry_ptr=(struct ext2_dir_entry *) (info.buffer+info.dir_entry_offset);
+ dir_entry_ptr=(struct ext2_dir_entry_2 *) (info.buffer+info.dir_entry_offset);
info.dir_entry_num++;
- info.dir_entry_offset+=dir_entry_ptr->rec_len;
- info.file_offset+=dir_entry_ptr->rec_len;
+ next = dir_entry_ptr->rec_len;
+ if (!next)
+ next = file_system_info.block_size - info.dir_entry_offset;
+ info.dir_entry_offset += next;
+ info.file_offset += next;
if (info.file_offset >= info.file_length) break;
/* read it and update the pointer */
low_read (info.buffer,file_system_info.block_size,info.global_block_offset);
- dir_entry_ptr=(struct ext2_dir_entry *) (info.buffer+info.dir_entry_offset);
+ dir_entry_ptr=(struct ext2_dir_entry_2 *) (info.buffer+info.dir_entry_offset);
}
int status;
char *ptr,full_dir_name [500],dir_name [500],temp [500],temp2 [500];
struct struct_file_info info;
- struct ext2_dir_entry *dir_entry_ptr;
+ struct ext2_dir_entry_2 *dir_entry_ptr;
- dir_entry_ptr=(struct ext2_dir_entry *) (file_info.buffer+file_info.dir_entry_offset);
+ dir_entry_ptr=(struct ext2_dir_entry_2 *) (file_info.buffer+file_info.dir_entry_offset);
ptr=parse_word (command_line,dir_name);
*/
{
- struct ext2_dir_entry *dir_entry_ptr;
+ struct ext2_dir_entry_2 *dir_entry_ptr;
- dir_entry_ptr=(struct ext2_dir_entry *) (info->buffer+info->dir_entry_offset);
+ dir_entry_ptr=(struct ext2_dir_entry_2 *) (info->buffer+info->dir_entry_offset);
if (dir_entry_ptr->name_len != strlen (name_search))
return (CONTINUE);
long inode_offset;
char buffer [80];
- struct ext2_dir_entry *dir_entry_ptr;
+ struct ext2_dir_entry_2 *dir_entry_ptr;
low_read (file_info.buffer,file_system_info.block_size,file_info.global_block_offset);
- dir_entry_ptr=(struct ext2_dir_entry *) (file_info.buffer+file_info.dir_entry_offset);
+ dir_entry_ptr=(struct ext2_dir_entry_2 *) (file_info.buffer+file_info.dir_entry_offset);
inode_offset=inode_num_to_inode_offset (dir_entry_ptr->inode); /* Compute the inode's offset */
sprintf (buffer,"setoffset %ld",inode_offset);dispatch (buffer); /* Move to it */
{
unsigned char temp [80];
- struct ext2_dir_entry *dir_entry_ptr;
+ struct ext2_dir_entry_2 *dir_entry_ptr;
- dir_entry_ptr=(struct ext2_dir_entry *) (info->buffer+info->dir_entry_offset);
+ dir_entry_ptr=(struct ext2_dir_entry_2 *) (info->buffer+info->dir_entry_offset);
if (info->dir_entry_num == file_info.dir_entry_num) /* Highlight the current entry */
wattrset (show_pad,A_REVERSE);
{
int found=0;
unsigned char *ptr,buffer [80],variable [80],value [80],temp [80];
- struct ext2_dir_entry *dir_entry_ptr;
+ struct ext2_dir_entry_2 *dir_entry_ptr;
- dir_entry_ptr=(struct ext2_dir_entry *) (file_info.buffer+file_info.dir_entry_offset);
+ dir_entry_ptr=(struct ext2_dir_entry_2 *) (file_info.buffer+file_info.dir_entry_offset);
ptr=parse_word (command_line,buffer);
if (*ptr==0) {