debugfs.c (make_link): Set the filetype information when creating

a link.
bitmap-optimize
Theodore Ts'o 2004-03-20 16:54:15 -05:00
parent de1b76f69a
commit abdf84f38a
3 changed files with 44 additions and 9 deletions

6
TODO
View File

@ -1,4 +1,4 @@
Need to process the bad block inode *before* doing the inod scan.
Need to process the bad block inode *before* doing the inode scan.
Also check to see if the first block of the inode table is not on the
bad block scan, and fix that. We need to check for an inaccurate
@ -193,10 +193,6 @@ TODO list.
- Ted
-----------------------------------------------------------------
Debugfs's link command should set the file type information
---------------------------------------------------------------
From e2fsprogs Debian TODO file as of 1.10-13.

View File

@ -1,3 +1,8 @@
2004-03-20 Theodore Ts'o <tytso@mit.edu>
* debugfs.c (make_link): Set the filetype information when
creating a link.
2004-02-28 Theodore Ts'o <tytso@mit.edu>
* Release of E2fsprogs 1.35

View File

@ -818,9 +818,39 @@ void do_print_working_directory(int argc, char *argv[])
return;
}
/*
* Given a mode, return the ext2 file type
*/
static int ext2_file_type(unsigned int mode)
{
if (LINUX_S_ISREG(mode))
return EXT2_FT_REG_FILE;
if (LINUX_S_ISDIR(mode))
return EXT2_FT_DIR;
if (LINUX_S_ISCHR(mode))
return EXT2_FT_CHRDEV;
if (LINUX_S_ISBLK(mode))
return EXT2_FT_BLKDEV;
if (LINUX_S_ISLNK(mode))
return EXT2_FT_SYMLINK;
if (LINUX_S_ISFIFO(mode))
return EXT2_FT_FIFO;
if (LINUX_S_ISSOCK(mode))
return EXT2_FT_SOCK;
return 0;
}
static void make_link(char *sourcename, char *destname)
{
ext2_ino_t inode;
ext2_ino_t ino;
struct ext2_inode inode;
int retval;
ext2_ino_t dir;
char *dest, *cp, *basename;
@ -828,8 +858,8 @@ static void make_link(char *sourcename, char *destname)
/*
* Get the source inode
*/
inode = string_to_inode(sourcename);
if (!inode)
ino = string_to_inode(sourcename);
if (!ino)
return;
basename = strrchr(sourcename, '/');
if (basename)
@ -859,8 +889,12 @@ static void make_link(char *sourcename, char *destname)
dest = destname;
}
}
if (debugfs_read_inode(ino, &inode, sourcename))
return;
retval = ext2fs_link(current_fs, dir, dest, inode, 0);
retval = ext2fs_link(current_fs, dir, dest, ino,
ext2_file_type(inode.i_mode));
if (retval)
com_err("make_link", retval, "");
return;