diff options
author | Joachim Blaabjerg <styx@gentoo.org> | 2002-06-21 14:35:19 +0000 |
---|---|---|
committer | Joachim Blaabjerg <styx@gentoo.org> | 2002-06-21 14:35:19 +0000 |
commit | 480f95d77392b400a24d8be7dfcfae4902389793 (patch) | |
tree | a5595feca9c03f0ae631da9d78b4db6e019548ea /sys-apps | |
parent | Masking new revision of e2fsprogs with ACL support (diff) | |
download | gentoo-2-480f95d77392b400a24d8be7dfcfae4902389793.tar.gz gentoo-2-480f95d77392b400a24d8be7dfcfae4902389793.tar.bz2 gentoo-2-480f95d77392b400a24d8be7dfcfae4902389793.zip |
Added ACL support in e2fsprogs. Please test!
Diffstat (limited to 'sys-apps')
-rw-r--r-- | sys-apps/e2fsprogs/e2fsprogs-1.27-r1.ebuild | 93 | ||||
-rw-r--r-- | sys-apps/e2fsprogs/files/digest-e2fsprogs-1.27-r1 | 1 | ||||
-rw-r--r-- | sys-apps/e2fsprogs/files/e2fsprogs-1.27ea-0.8.21.diff | 427 |
3 files changed, 521 insertions, 0 deletions
diff --git a/sys-apps/e2fsprogs/e2fsprogs-1.27-r1.ebuild b/sys-apps/e2fsprogs/e2fsprogs-1.27-r1.ebuild new file mode 100644 index 000000000000..c603f9e24ac6 --- /dev/null +++ b/sys-apps/e2fsprogs/e2fsprogs-1.27-r1.ebuild @@ -0,0 +1,93 @@ +# Copyright 1999-2002 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License, v2 or later +# Maintainer: Daniel Robbins <drobbins@gentoo.org> +# $Header: /var/cvsroot/gentoo-x86/sys-apps/e2fsprogs/e2fsprogs-1.27-r1.ebuild,v 1.1 2002/06/21 14:35:19 styx Exp $ + +S=${WORKDIR}/${P} +DESCRIPTION="Standard EXT2 and EXT3 filesystem utilities" +SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz" +HOMEPAGE="http://e2fsprogs.sourceforge.net/" + +#debianutils is for 'readlink' +DEPEND="virtual/glibc + nls? ( sys-devel/gettext ) + sys-apps/debianutils + sys-apps/texinfo" + +RDEPEND="virtual/glibc" + +src_unpack() { + unpack $A && + cd $S + use acl && patch -p1 < ${FILESDIR}/e2fsprogs-1.27ea-0.8.21.diff +} + +src_compile() { + local myconf + if [ "`use nls`" ] + then + myconf="--enable-nls" + else + myconf="--disable-nls" + fi + + ./configure --host=${CHOST} \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --enable-dynamic-e2fsck \ + --enable-elf-shlibs \ + ${myconf} || die + + # Parallel make sometimes fails + make || die +} + +src_install() { + make DESTDIR=${D} libdir=zapme install || die + #evil e2fsprogs makefile -- I'll get you! + rm -rf ${D}/zapme + + make DESTDIR=${D} install-libs || die + + if [ "`use nls`" ] + then + ( cd po; make DESTDIR=${D} install || die ) + fi + + dodoc COPYING ChangeLog README RELEASE-NOTES SHLIBS + docinto e2fsck + dodoc e2fsck/ChangeLog e2fsck/CHANGES + + dodir /lib /bin /sbin + cd ${D}/usr/lib + mv * ../../lib + cd ${D}/lib + mv *.a ../usr/lib + local mylib + local x + #normalize evil symlinks + cd ${D}/lib + for x in * + do + [ ! -L $x ]&& continue + mylib=`readlink $x` + mylib=`basename $mylib` + ln -sf $mylib $x + done + mv ${D}/usr/bin/* ${D}/bin + mv ${D}/usr/sbin/* ${D}/sbin + cd ${D}/usr/bin + mv lsattr chattr uuidgen ../usr/bin + cd ${D}/sbin + mv mklost+found ../usr/sbin + #time to convert hard links/duplicates to symbolic links + cd ${D}/sbin + rm fsck.* + ln -sf e2fsck fsck.ext2 + ln -sf e2fsck fsck.ext3 + rm mkfs.* + ln -sf mke2fs mkfs.ext2 + rm -rf ${D}/usr/share/et ${D}/usr/share/ss +} + diff --git a/sys-apps/e2fsprogs/files/digest-e2fsprogs-1.27-r1 b/sys-apps/e2fsprogs/files/digest-e2fsprogs-1.27-r1 new file mode 100644 index 000000000000..49f077eb9d73 --- /dev/null +++ b/sys-apps/e2fsprogs/files/digest-e2fsprogs-1.27-r1 @@ -0,0 +1 @@ +MD5 485b43875becc98dd11ac4c2a30dd734 e2fsprogs-1.27.tar.gz 1376698 diff --git a/sys-apps/e2fsprogs/files/e2fsprogs-1.27ea-0.8.21.diff b/sys-apps/e2fsprogs/files/e2fsprogs-1.27ea-0.8.21.diff new file mode 100644 index 000000000000..c204210abb29 --- /dev/null +++ b/sys-apps/e2fsprogs/files/e2fsprogs-1.27ea-0.8.21.diff @@ -0,0 +1,427 @@ +Extended Attributes patch to the e2fsprogs package +14 March 2002, 20:03:41 + +After extracting the e2fsprogs-1.27.tar.gz package, apply this patch as follows: + + cd e2fsprogs-1.27 + patch -p1 < ../e2fsprogs-1.27-ea-0.8.21.patch + +diff -Nur e2fsprogs-1.27/debugfs/icheck.c e2fsprogs-1.27ea/debugfs/icheck.c +--- e2fsprogs-1.27/debugfs/icheck.c Sun Feb 24 22:03:58 2002 ++++ e2fsprogs-1.27ea/debugfs/icheck.c Thu Mar 14 07:26:40 2002 +@@ -108,7 +108,7 @@ + while (ino) { + if (!inode.i_links_count) + goto next; +- if (!ext2fs_inode_has_valid_blocks(&inode)) ++ if (!ext2fs_inode_has_valid_blocks(current_fs, &inode)) + goto next; + /* + * To handle filesystems touched by 0.3c extfs; can be +diff -Nur e2fsprogs-1.27/e2fsck/e2fsck.c e2fsprogs-1.27ea/e2fsck/e2fsck.c +--- e2fsprogs-1.27/e2fsck/e2fsck.c Sun Feb 24 22:03:58 2002 ++++ e2fsprogs-1.27ea/e2fsck/e2fsck.c Thu Mar 14 07:26:44 2002 +@@ -30,6 +30,7 @@ + memset(context, 0, sizeof(struct e2fsck_struct)); + + context->process_inode_size = 256; ++ context->ext_attr_ver = 2; + + *ret = context; + return 0; +diff -Nur e2fsprogs-1.27/e2fsck/e2fsck.h e2fsprogs-1.27ea/e2fsck/e2fsck.h +--- e2fsprogs-1.27/e2fsck/e2fsck.h Sun Feb 24 22:03:58 2002 ++++ e2fsprogs-1.27ea/e2fsck/e2fsck.h Thu Mar 14 07:26:44 2002 +@@ -254,6 +254,8 @@ + int fs_ext_attr_inodes; + int fs_ext_attr_blocks; + ++ int ext_attr_ver; ++ + /* + * For the use of callers of the e2fsck functions; not used by + * e2fsck functions themselves. +@@ -322,7 +324,7 @@ + + /* pass1.c */ + extern void e2fsck_use_inode_shortcuts(e2fsck_t ctx, int bool); +-extern int e2fsck_pass1_check_device_inode(struct ext2_inode *inode); ++extern int e2fsck_pass1_check_device_inode(ext2_filsys fs, struct ext2_inode *inode); + extern int e2fsck_pass1_check_symlink(ext2_filsys fs, struct ext2_inode *inode); + + /* pass2.c */ +diff -Nur e2fsprogs-1.27/e2fsck/pass1.c e2fsprogs-1.27ea/e2fsck/pass1.c +--- e2fsprogs-1.27/e2fsck/pass1.c Sun Feb 24 22:03:58 2002 ++++ e2fsprogs-1.27ea/e2fsck/pass1.c Thu Mar 14 08:42:27 2002 +@@ -123,14 +123,14 @@ + * since they have the same requirement; the i_block fields should be + * zero. + */ +-int e2fsck_pass1_check_device_inode(struct ext2_inode *inode) ++int e2fsck_pass1_check_device_inode(ext2_filsys fs, struct ext2_inode *inode) + { + int i; + + /* + * If i_blocks is non-zero, then this is a bogus device/fifo/socket + */ +- if (inode->i_blocks) ++ if (ext2fs_inode_data_blocks(fs, inode) != 0) + return 0; + /* + * We should be able to do the test below all the time, but +@@ -179,9 +179,9 @@ + EXT2_INDEX_FL))) + return 0; + +- if (inode->i_blocks) { ++ if (inode->i_size > sizeof (inode->i_block) - 1) { + if ((inode->i_size > fs->blocksize) || +- (inode->i_blocks != fs->blocksize >> 9) || ++ (ext2fs_inode_data_blocks(fs, inode) != fs->blocksize>>9) || + (inode->i_block[0] < fs->super->s_first_data_block) || + (inode->i_block[0] >= fs->super->s_blocks_count)) + return 0; +@@ -190,7 +190,7 @@ + if (inode->i_block[i]) + return 0; + } else { +- if (inode->i_size > sizeof(inode->i_block) - 1) ++ if (ext2fs_inode_data_blocks(fs, inode) != 0) + return 0; + + if (inode->i_size != +@@ -603,12 +603,12 @@ + ext2fs_mark_inode_bitmap(ctx->inode_reg_map, ino); + ctx->fs_regular_count++; + } else if (LINUX_S_ISCHR (inode.i_mode) && +- e2fsck_pass1_check_device_inode(&inode)) { ++ e2fsck_pass1_check_device_inode(fs, &inode)) { + check_immutable(ctx, &pctx); + check_size(ctx, &pctx); + ctx->fs_chardev_count++; + } else if (LINUX_S_ISBLK (inode.i_mode) && +- e2fsck_pass1_check_device_inode(&inode)) { ++ e2fsck_pass1_check_device_inode(fs, &inode)) { + check_immutable(ctx, &pctx); + check_size(ctx, &pctx); + ctx->fs_blockdev_count++; +@@ -617,18 +617,19 @@ + ctx->fs_symlinks_count++; + if (!e2fsck_pass1_check_symlink(fs, &inode)) + mark_inode_bad(ctx, ino); +- if (!inode.i_blocks) { ++ if (ext2fs_inode_data_blocks(fs, &inode) == 0) { + ctx->fs_fast_symlinks_count++; ++ check_blocks(ctx, &pctx, block_buf); + goto next; + } + } + else if (LINUX_S_ISFIFO (inode.i_mode) && +- e2fsck_pass1_check_device_inode(&inode)) { ++ e2fsck_pass1_check_device_inode(fs, &inode)) { + check_immutable(ctx, &pctx); + check_size(ctx, &pctx); + ctx->fs_fifo_count++; + } else if ((LINUX_S_ISSOCK (inode.i_mode)) && +- e2fsck_pass1_check_device_inode(&inode)) { ++ e2fsck_pass1_check_device_inode(fs, &inode)) { + check_immutable(ctx, &pctx); + check_size(ctx, &pctx); + ctx->fs_sockets_count++; +@@ -1057,7 +1058,10 @@ + goto clear_extattr; + header = (struct ext2_ext_attr_header *) block_buf; + pctx->blk = inode->i_file_acl; +- if (header->h_magic != EXT2_EXT_ATTR_MAGIC) { ++ if ((ctx->ext_attr_ver == 1 && ++ header->h_magic != EXT2_EXT_ATTR_MAGIC_v1) || ++ (ctx->ext_attr_ver == 2 && ++ header->h_magic != EXT2_EXT_ATTR_MAGIC)) { + if (fix_problem(ctx, PR_1_BAD_EA_BLOCK, pctx)) + goto clear_extattr; + } +@@ -1085,7 +1089,10 @@ + if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx)) + goto clear_extattr; + } +- if (entry->e_name_len == 0 || entry->e_name_index != 0) { ++ if ((ctx->ext_attr_ver == 1 && ++ (entry->e_name_len == 0 || entry->e_name_index != 0)) || ++ (ctx->ext_attr_ver == 2 && ++ entry->e_name_index == 0)) { + if (fix_problem(ctx, PR_1_EA_BAD_NAME, pctx)) + goto clear_extattr; + } +@@ -1136,9 +1143,9 @@ + int bad_size = 0; + __u64 size; + +- if (!ext2fs_inode_has_valid_blocks(pctx->inode)) ++ if (!ext2fs_inode_has_valid_blocks(fs, inode) && !inode->i_file_acl) + return; +- ++ + pb.ino = ino; + pb.num_blocks = pb.last_block = 0; + pb.num_illegal_blocks = 0; +@@ -1165,14 +1172,16 @@ + } + } + +- pctx->errcode = ext2fs_block_iterate2(fs, ino, +- pb.is_dir ? BLOCK_FLAG_HOLE : 0, +- block_buf, process_block, &pb); +- if (ctx->flags & E2F_FLAG_SIGNAL_MASK) +- return; +- end_problem_latch(ctx, PR_LATCH_BLOCK); +- if (pctx->errcode) +- fix_problem(ctx, PR_1_BLOCK_ITERATE, pctx); ++ if (ext2fs_inode_has_valid_blocks(fs, inode)) { ++ pctx->errcode = ext2fs_block_iterate2(fs, ino, ++ pb.is_dir ? BLOCK_FLAG_HOLE : 0, ++ block_buf, process_block, &pb); ++ if (ctx->flags & E2F_FLAG_SIGNAL_MASK) ++ return; ++ end_problem_latch(ctx, PR_LATCH_BLOCK); ++ if (pctx->errcode) ++ fix_problem(ctx, PR_1_BLOCK_ITERATE, pctx); ++ } + + if (pb.fragmented && pb.num_blocks < fs->super->s_blocks_per_group) + ctx->fs_fragmented++; +diff -Nur e2fsprogs-1.27/e2fsck/pass1b.c e2fsprogs-1.27ea/e2fsck/pass1b.c +--- e2fsprogs-1.27/e2fsck/pass1b.c Sun Feb 24 22:03:58 2002 ++++ e2fsprogs-1.27ea/e2fsck/pass1b.c Thu Mar 14 07:26:40 2002 +@@ -200,7 +200,7 @@ + pctx.ino = ctx->stashed_ino = ino; + if ((ino != EXT2_BAD_INO) && + (!ext2fs_test_inode_bitmap(ctx->inode_used_map, ino) || +- !ext2fs_inode_has_valid_blocks(&inode))) ++ !ext2fs_inode_has_valid_blocks(fs, &inode))) + goto next; + + pb.ino = ino; +diff -Nur e2fsprogs-1.27/e2fsck/pass2.c e2fsprogs-1.27ea/e2fsck/pass2.c +--- e2fsprogs-1.27/e2fsck/pass2.c Sun Feb 24 22:03:59 2002 ++++ e2fsprogs-1.27ea/e2fsck/pass2.c Thu Mar 14 07:26:40 2002 +@@ -672,7 +672,7 @@ + ext2fs_unmark_inode_bitmap(fs->inode_map, ino); + ext2fs_mark_ib_dirty(fs); + +- if (!ext2fs_inode_has_valid_blocks(&inode)) ++ if (!ext2fs_inode_has_valid_blocks(fs, &inode)) + return; + + if (!LINUX_S_ISDIR(inode.i_mode) && +@@ -718,16 +718,16 @@ + !(LINUX_S_ISSOCK(inode.i_mode))) + problem = PR_2_BAD_MODE; + else if (LINUX_S_ISCHR(inode.i_mode) +- && !e2fsck_pass1_check_device_inode(&inode)) ++ && !e2fsck_pass1_check_device_inode(fs, &inode)) + problem = PR_2_BAD_CHAR_DEV; + else if (LINUX_S_ISBLK(inode.i_mode) +- && !e2fsck_pass1_check_device_inode(&inode)) ++ && !e2fsck_pass1_check_device_inode(fs, &inode)) + problem = PR_2_BAD_BLOCK_DEV; + else if (LINUX_S_ISFIFO(inode.i_mode) +- && !e2fsck_pass1_check_device_inode(&inode)) ++ && !e2fsck_pass1_check_device_inode(fs, &inode)) + problem = PR_2_BAD_FIFO; + else if (LINUX_S_ISSOCK(inode.i_mode) +- && !e2fsck_pass1_check_device_inode(&inode)) ++ && !e2fsck_pass1_check_device_inode(fs, &inode)) + problem = PR_2_BAD_SOCKET; + else if (LINUX_S_ISLNK(inode.i_mode) + && !e2fsck_pass1_check_symlink(fs, &inode)) { +diff -Nur e2fsprogs-1.27/e2fsck/pass4.c e2fsprogs-1.27ea/e2fsck/pass4.c +--- e2fsprogs-1.27/e2fsck/pass4.c Sun Feb 24 22:03:59 2002 ++++ e2fsprogs-1.27ea/e2fsck/pass4.c Thu Mar 14 09:56:54 2002 +@@ -34,8 +34,8 @@ + pctx.ino = i; + pctx.inode = &inode; + +- if (!inode.i_blocks && (LINUX_S_ISREG(inode.i_mode) || +- LINUX_S_ISDIR(inode.i_mode))) { ++ if (ext2fs_inode_data_blocks(fs, &inode) == 0 && ++ (LINUX_S_ISREG(inode.i_mode) || LINUX_S_ISDIR(inode.i_mode))) { + /* + * This is a zero-length file; prompt to delete it... + */ +diff -Nur e2fsprogs-1.27/e2fsck/super.c e2fsprogs-1.27ea/e2fsck/super.c +--- e2fsprogs-1.27/e2fsck/super.c Sun Feb 24 22:03:59 2002 ++++ e2fsprogs-1.27ea/e2fsck/super.c Thu Mar 14 07:26:40 2002 +@@ -172,7 +172,7 @@ + errcode_t retval; + struct process_block_struct pb; + +- if (!ext2fs_inode_has_valid_blocks(inode)) ++ if (!ext2fs_inode_has_valid_blocks(fs, inode)) + return 0; + + pb.buf = block_buf + 3 * ctx->fs->blocksize; +diff -Nur e2fsprogs-1.27/e2fsck/swapfs.c e2fsprogs-1.27ea/e2fsck/swapfs.c +--- e2fsprogs-1.27/e2fsck/swapfs.c Sun Feb 24 22:03:59 2002 ++++ e2fsprogs-1.27ea/e2fsck/swapfs.c Thu Mar 14 07:26:40 2002 +@@ -158,7 +158,7 @@ + ((inode->i_block[EXT2_IND_BLOCK] || + inode->i_block[EXT2_DIND_BLOCK] || + inode->i_block[EXT2_TIND_BLOCK]) && +- ext2fs_inode_has_valid_blocks(inode))) ++ ext2fs_inode_has_valid_blocks(fs, inode))) + swap_inode_blocks(ctx, ino, block_buf, inode); + + if (ctx->flags & E2F_FLAG_SIGNAL_MASK) +diff -Nur e2fsprogs-1.27/e2fsck/unix.c e2fsprogs-1.27ea/e2fsck/unix.c +--- e2fsprogs-1.27/e2fsck/unix.c Fri Mar 8 07:05:02 2002 ++++ e2fsprogs-1.27ea/e2fsck/unix.c Thu Mar 14 07:26:44 2002 +@@ -79,6 +79,7 @@ + " -j external-journal Set location of the external journal\n" + " -l bad_blocks_file Add to badblocks list\n" + " -L bad_blocks_file Set badblocks list\n" ++ " -E version Extended attribute version (1-2)\n" + )); + + exit(FSCK_USAGE); +@@ -467,7 +468,7 @@ + ctx->program_name = *argv; + else + ctx->program_name = "e2fsck"; +- while ((c = getopt (argc, argv, "panyrcC:B:dfvtFVM:b:I:j:P:l:L:N:Ss")) != EOF) ++ while ((c = getopt (argc, argv, "panyrcC:B:dfvtFVM:b:I:j:P:l:L:N:SsE:")) != EOF) + switch (c) { + case 'C': + ctx->progress = e2fsck_update_progress; +@@ -580,6 +581,14 @@ + "of e2fsck\n")); + exit(1); + #endif ++ case 'E': ++ if (atoi(optarg) != 1 && atoi(optarg) != 2) { ++ usage(ctx); ++ exit(1); ++ } ++ ctx->ext_attr_ver = atoi(optarg); ++ break; ++ + default: + usage(ctx); + } +diff -Nur e2fsprogs-1.27/lib/ext2fs/bmove.c e2fsprogs-1.27ea/lib/ext2fs/bmove.c +--- e2fsprogs-1.27/lib/ext2fs/bmove.c Sun Feb 24 22:03:59 2002 ++++ e2fsprogs-1.27ea/lib/ext2fs/bmove.c Thu Mar 14 07:26:40 2002 +@@ -134,7 +134,7 @@ + + while (ino) { + if ((inode.i_links_count == 0) || +- !ext2fs_inode_has_valid_blocks(&inode)) ++ !ext2fs_inode_has_valid_blocks(fs, &inode)) + goto next; + + pb.ino = ino; +diff -Nur e2fsprogs-1.27/lib/ext2fs/ext2_ext_attr.h e2fsprogs-1.27ea/lib/ext2fs/ext2_ext_attr.h +--- e2fsprogs-1.27/lib/ext2fs/ext2_ext_attr.h Sun Feb 24 22:03:59 2002 ++++ e2fsprogs-1.27ea/lib/ext2fs/ext2_ext_attr.h Thu Mar 14 07:26:44 2002 +@@ -7,7 +7,8 @@ + */ + + /* Magic value in attribute blocks */ +-#define EXT2_EXT_ATTR_MAGIC 0xEA010000 ++#define EXT2_EXT_ATTR_MAGIC_v1 0xEA010000 ++#define EXT2_EXT_ATTR_MAGIC 0xEA020000 + + /* Maximum number of references to one attribute block */ + #define EXT2_EXT_ATTR_REFCOUNT_MAX 1024 +@@ -22,7 +23,7 @@ + + struct ext2_ext_attr_entry { + __u8 e_name_len; /* length of name */ +- __u8 e_name_index; /* index into table of names (n/i) */ ++ __u8 e_name_index; /* attribute name index */ + __u16 e_value_offs; /* offset in disk block of value */ + __u32 e_value_block; /* disk block attribute is stored on (n/i) */ + __u32 e_value_size; /* size of attribute value */ +diff -Nur e2fsprogs-1.27/lib/ext2fs/ext2fs.h e2fsprogs-1.27ea/lib/ext2fs/ext2fs.h +--- e2fsprogs-1.27/lib/ext2fs/ext2fs.h Fri Mar 8 07:05:02 2002 ++++ e2fsprogs-1.27ea/lib/ext2fs/ext2fs.h Thu Mar 14 07:26:40 2002 +@@ -811,7 +811,7 @@ + struct ext2_inode *f, int hostorder); + + /* valid_blk.c */ +-extern int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode); ++extern int ext2fs_inode_has_valid_blocks(ext2_filsys fs, struct ext2_inode *inode); + + /* version.c */ + extern int ext2fs_parse_version_string(const char *ver_string); +@@ -992,6 +992,13 @@ + _INLINE_ int ext2fs_group_of_ino(ext2_filsys fs, ext2_ino_t ino) + { + return (ino - 1) / fs->super->s_inodes_per_group; ++} ++ ++_INLINE_ blk_t ext2fs_inode_data_blocks(ext2_filsys fs, ++ struct ext2_inode *inode) ++{ ++ return inode->i_blocks - ++ (inode->i_file_acl ? fs->blocksize >> 9 : 0); + } + #undef _INLINE_ + #endif +diff -Nur e2fsprogs-1.27/lib/ext2fs/valid_blk.c e2fsprogs-1.27ea/lib/ext2fs/valid_blk.c +--- e2fsprogs-1.27/lib/ext2fs/valid_blk.c Sun Feb 24 22:04:00 2002 ++++ e2fsprogs-1.27ea/lib/ext2fs/valid_blk.c Thu Mar 14 07:26:40 2002 +@@ -24,7 +24,7 @@ + * This function returns 1 if the inode's block entries actually + * contain block entries. + */ +-int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode) ++int ext2fs_inode_has_valid_blocks(ext2_filsys fs, struct ext2_inode *inode) + { + /* + * Only directories, regular files, and some symbolic links +@@ -38,7 +38,8 @@ + * If the symbolic link is a "fast symlink", then the symlink + * target is stored in the block entries. + */ +- if (LINUX_S_ISLNK (inode->i_mode) && inode->i_blocks == 0) ++ if (LINUX_S_ISLNK (inode->i_mode) && ++ ext2fs_inode_data_blocks(fs, inode) == 0) + return 0; + + return 1; +diff -Nur e2fsprogs-1.27/misc/e2image.c e2fsprogs-1.27ea/misc/e2image.c +--- e2fsprogs-1.27/misc/e2image.c Tue Mar 5 09:31:15 2002 ++++ e2fsprogs-1.27ea/misc/e2image.c Thu Mar 14 07:26:40 2002 +@@ -396,7 +396,7 @@ + if (ino == 0) + break; + if (!inode.i_links_count || +- !ext2fs_inode_has_valid_blocks(&inode)) ++ !ext2fs_inode_has_valid_blocks(fs, &inode)) + continue; + + stashed_ino = ino; +diff -Nur e2fsprogs-1.27/resize/resize2fs.c e2fsprogs-1.27ea/resize/resize2fs.c +--- e2fsprogs-1.27/resize/resize2fs.c Fri Mar 8 07:05:02 2002 ++++ e2fsprogs-1.27ea/resize/resize2fs.c Thu Mar 14 07:26:40 2002 +@@ -992,7 +992,7 @@ + pb.is_dir = LINUX_S_ISDIR(inode.i_mode); + pb.changed = 0; + +- if (ext2fs_inode_has_valid_blocks(&inode) && ++ if (ext2fs_inode_has_valid_blocks(rfs->old_fs, &inode) && + (rfs->bmap || pb.is_dir)) { + pb.ino = ino; + retval = ext2fs_block_iterate2(rfs->old_fs, +diff -Nur e2fsprogs-1.27/version.h e2fsprogs-1.27ea/version.h +--- e2fsprogs-1.27/version.h Fri Mar 8 09:32:48 2002 ++++ e2fsprogs-1.27ea/version.h Thu Mar 14 07:26:44 2002 +@@ -6,5 +6,5 @@ + * Ts'o. This file may be redistributed under the GNU Public License. + */ + +-#define E2FSPROGS_VERSION "1.27" +-#define E2FSPROGS_DATE "8-Mar-2002" ++#define E2FSPROGS_VERSION "1.27ea" ++#define E2FSPROGS_DATE "14-Mar-2002" |