Whamcloud - gitweb
debian: remove old symlinks to /usr/share/doc
authorTheodore Ts'o <tytso@mit.edu>
Sun, 11 Aug 2013 15:52:35 +0000 (11:52 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 11 Aug 2013 15:52:35 +0000 (11:52 -0400)
(Merged in NMU'ed change for Debian-Bug: #698879)

Merge commit '7dc67c0ad5daa7cbdf6d79a73bb34e04d55f7406' into maint

Conflicts:
debian/changelog

229 files changed:
README
RELEASE-NOTES
config/config.guess [changed mode: 0755->0644]
config/config.sub [changed mode: 0755->0644]
config/parse-types.sh
configure
configure.in
contrib/fallocate.c
contrib/spd_readdir.c
debian/changelog
debian/control.in
debian/e2fslibs-dev.files.in
debian/e2fslibs.files.in
debian/e2fslibs.symbols
debian/libblkid-dev.files.in
debian/libblkid1.files.in
debian/libcomerr2.files.in
debian/libss2.files.in
debian/libuuid1.files.in
debian/rules
debian/scripts/test-backtrace [new file with mode: 0755]
debugfs/Makefile.in
debugfs/debug_cmds.ct
debugfs/debugfs.8.in
debugfs/debugfs.c
debugfs/debugfs.h
debugfs/dump.c
debugfs/extent_cmds.ct [moved from lib/ext2fs/extent_dbg.ct with 91% similarity]
debugfs/extent_inode.c [new file with mode: 0644]
debugfs/htree.c
debugfs/ro_debug_cmds.ct
debugfs/set_fields.c
debugfs/zap.c [new file with mode: 0644]
doc/Makefile.in
doc/libext2fs.texinfo
e2fsck/Makefile.in
e2fsck/ehandler.c
e2fsck/jfs_user.h
e2fsck/journal.c
e2fsck/logfile.c
e2fsck/message.c
e2fsck/pass1.c
e2fsck/pass1b.c
e2fsck/pass2.c
e2fsck/pass4.c
e2fsck/pass5.c
e2fsck/problem.c
e2fsck/problem.h
e2fsck/recovery.c
e2fsck/region.c
e2fsck/rehash.c
e2fsck/sigcatcher.c
e2fsck/super.c
e2fsck/unix.c
e2fsck/util.c
e2fsprogs.lsm
lib/Makefile.elf-lib
lib/Makefile.solaris-lib
lib/blkid/Makefile.in
lib/blkid/cache.c
lib/blkid/getsize.c
lib/blkid/probe.c
lib/config.h.in
lib/e2p/getversion.c
lib/e2p/parse_num.c
lib/et/Makefile.in
lib/et/com_err.texinfo
lib/et/error_message.c
lib/et/texinfo.tex
lib/ext2fs/Makefile.in
lib/ext2fs/alloc.c
lib/ext2fs/alloc_sb.c
lib/ext2fs/bitops.c
lib/ext2fs/bitops.h
lib/ext2fs/blkmap64_rb.c
lib/ext2fs/block.c
lib/ext2fs/bmap.c
lib/ext2fs/closefs.c
lib/ext2fs/crc32c.c
lib/ext2fs/csum.c
lib/ext2fs/dblist.c
lib/ext2fs/e2image.h
lib/ext2fs/ext2_err.et.in
lib/ext2fs/ext2fs.h
lib/ext2fs/extent.c
lib/ext2fs/gen_bitmap64.c
lib/ext2fs/getsize.c
lib/ext2fs/imager.c
lib/ext2fs/initialize.c
lib/ext2fs/inline.c
lib/ext2fs/inode.c
lib/ext2fs/ismounted.c
lib/ext2fs/kernel-jbd.h
lib/ext2fs/llseek.c
lib/ext2fs/mkjournal.c
lib/ext2fs/mmp.c
lib/ext2fs/openfs.c
lib/ext2fs/progress.c
lib/ext2fs/qcow2.c
lib/ext2fs/rbtree.c
lib/ext2fs/rbtree.h
lib/ext2fs/rw_bitmaps.c
lib/ext2fs/sparse.c [deleted file]
lib/ext2fs/symlink.c [new file with mode: 0644]
lib/ext2fs/test_io.c
lib/ext2fs/tst_bitmaps.c
lib/ext2fs/tst_bitmaps_cmds
lib/ext2fs/tst_bitmaps_exp
lib/ext2fs/tst_inode_size.c
lib/ext2fs/tst_super_size.c
lib/ext2fs/unix_io.c
lib/quota/Makefile.in
lib/quota/common.h
lib/quota/mkquota.c
lib/quota/quotaio.c
lib/quota/quotaio.h
lib/quota/quotaio_tree.c
lib/quota/quotaio_v2.c
lib/ss/Makefile.in
lib/ss/pager.c
lib/uuid/gen_uuid.c
lib/uuid/tst_uuid.c
misc/Makefile.in
misc/badblocks.c
misc/chattr.1.in
misc/chattr.c
misc/e2freefrag.c
misc/e2image.8.in
misc/e2image.c
misc/e2initrd_helper.c
misc/filefrag.8.in
misc/filefrag.c
misc/ismounted.c
misc/mke2fs.8.in
misc/mke2fs.c
misc/mke2fs.conf.5.in
misc/tune2fs.c
po/cs.gmo
po/cs.po
po/de.gmo
po/de.po
po/e2fsprogs.pot
po/fr.gmo
po/fr.po
po/nl.gmo
po/nl.po
po/pl.gmo
po/pl.po
po/sv.gmo
po/sv.po
po/vi.gmo
po/vi.po
resize/Makefile.in
resize/main.c
resize/online.c
resize/resize2fs.8.in
resize/resize2fs.c
resize/resize2fs.h
resize/resource_track.c [new file with mode: 0644]
resize/test-resize [new file with mode: 0755]
tests/d_loaddump/script
tests/d_special_files/expect [new file with mode: 0644]
tests/d_special_files/name [new file with mode: 0644]
tests/d_special_files/script [new file with mode: 0644]
tests/f_extent_interior_start_lblk/expect.1 [new file with mode: 0644]
tests/f_extent_interior_start_lblk/expect.2 [new file with mode: 0644]
tests/f_extent_interior_start_lblk/image.gz [new file with mode: 0644]
tests/f_extent_interior_start_lblk/name [new file with mode: 0644]
tests/f_extent_oobounds/expect.1 [new file with mode: 0644]
tests/f_extent_oobounds/expect.2 [new file with mode: 0644]
tests/f_extent_oobounds/script [new file with mode: 0644]
tests/f_invalid_extent_symlink/expect.1 [new file with mode: 0644]
tests/f_invalid_extent_symlink/expect.2 [new file with mode: 0644]
tests/f_invalid_extent_symlink/image.gz [new file with mode: 0644]
tests/f_invalid_extent_symlink/name [new file with mode: 0644]
tests/f_jnl_32bit/expect.0
tests/f_jnl_32bit/script
tests/f_jnl_64bit/expect.0
tests/f_jnl_64bit/script
tests/f_jnl_errno/expect.0
tests/f_jnl_errno/script
tests/f_mmp/script
tests/f_orphan_indirect_inode/expect.1
tests/f_preen/expect.1
tests/f_resize_inode/expect
tests/f_resize_inode/script
tests/f_toobig_extent_dir/expect.1 [new file with mode: 0644]
tests/f_toobig_extent_dir/expect.2 [new file with mode: 0644]
tests/f_toobig_extent_dir/image.gz [new file with mode: 0644]
tests/f_toobig_extent_dir/name [new file with mode: 0644]
tests/f_zero_xattr/expect.1 [new file with mode: 0644]
tests/f_zero_xattr/image.gz [new file with mode: 0644]
tests/f_zero_xattr/name [new file with mode: 0644]
tests/f_zero_xattr/script [new file with mode: 0644]
tests/filter.sed [moved from tests/filter_dumpe2fs with 63% similarity]
tests/m_bigjournal/expect.1
tests/m_dasd_bs/expect.1
tests/m_extent_journal/expect.1
tests/m_large_file/expect.1
tests/m_meta_bg/expect.1
tests/m_mkfs_overhead/script
tests/m_mmp/expect.1
tests/m_no_opt/expect.1
tests/m_raid_opt/expect.1
tests/m_raid_opt/script
tests/m_root_owner/expect.1 [new file with mode: 0644]
tests/m_root_owner/script [new file with mode: 0644]
tests/m_std/expect.1
tests/m_uninit/expect.1
tests/mke2fs.conf.in
tests/progs/Makefile.in
tests/progs/crcsum.c [new file with mode: 0644]
tests/r_1024_small_bg/script [new file with mode: 0644]
tests/r_64bit_big_expand/script [new file with mode: 0644]
tests/r_bigalloc_big_expand/script [new file with mode: 0644]
tests/r_ext4_big_expand/script [new file with mode: 0644]
tests/r_ext4_small_bg/script [new file with mode: 0644]
tests/r_inline_xattr/script
tests/r_move_itable/expect
tests/r_move_itable/script
tests/r_resize_inode/expect
tests/r_resize_inode/script
tests/run_e2fsck
tests/run_mke2fs
tests/scripts/resize_test [new file with mode: 0755]
tests/test_config
util/symlinks.c
version.h
wordwrap.pl

diff --git a/README b/README
index e8bbffc..b29baf8 100644 (file)
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-       This is the new version (1.42.5) of the second extended file
+       This is the new version (1.42.8) of the second extended file
 system management programs.
 
        From time to time, I release new versions of e2fsprogs, to fix
index 727e554..e51b1f5 100644 (file)
@@ -1,3 +1,308 @@
+E2fsprogs 1.42.8 (June 20, 2013)
+================================
+
+As a part of mke2fs's option parsing cleanup, the use of the -R option
+will give a warning that it is depreated (it has been so documented
+since 2005) and -E should be used instead.
+
+Mke2fs will not give warnings about the bigalloc and quota options in
+quiet mode.
+
+If an invalid journal size is given to mke2fs, it will now complain
+and exit sooner.
+
+Debugfs was erroneously giving spurious error messages for certain
+extent_inode subcommands which take arguments (split_node,
+replace_node, and insert_node).  This has been fixed.
+
+Fix the parsing of the 's' (sectors) in parse_num_blocks2, which among
+other programs is used by mke2fs.
+
+Change mke2fs so that it does not set the root directory to the real
+uid/gid of the mke2fs process.  Add the extended option root_owner to
+override this behavior.
+
+Fix resize2fs when shrinking file systems to make sure that bitmap
+blocks aren't left outside the bounds of the shrunken file system.
+This could happen with flex_bg file systems that were grown using
+the old online resizing algorithm.
+
+E2fsck will now detect and repair corrupted extent trees which contain
+invalid extents at the end of the extent tree leaf block.
+
+E2fsck will now longer complain about zero length extended attribute
+values.
+
+Fix a regression introduced in e2fsprogs v1.42 which caused e2image -s
+to crash.
+
+Add safety check so tune2fs will not attempt to set the inode size to
+be larger than the block size.
+
+Fix e2fsck so it can check a read-only root file system with an
+external journal.  (Addresses Debian Bug: #707030
+
+Fix off-line resizing of file systems with flex_bg && !resize_inode
+(Addresses Debian Bug: #696746)
+
+Fix e2image with large (> 32-bit) file systems (Addresses Debian Bug:
+#703067)
+
+Enhance chattr to allow clearing the extent flag if the kernel allows
+migrating extent based files to use indirect blocks.
+
+Update German translation.
+
+Updated/fixed various man pages.  (Addresses Debian Bugs: #712429,
+#712430, #707609)
+
+Fixed various Debian Packaging Issues (Addresses Debian Bug #708307)
+
+Programmer's Notes
+------------------
+
+Use secure_getenv() in preference to __secure_getenv().
+
+Optimize CPU utilization of ext2fs_bg_has_super().
+
+Fix ext2fs_llseek() on 32-bit i386 systems to work correctly when
+SEEK_CUR is used with large files.
+
+The ext2fs_read_inode_full() function will no longer use
+fs->read_inode() if the caller has requested more than the base 128
+byte inode structure and the inode size is greater than 128 bytes.
+
+Fix build failure with --enable-jbd-debug.
+
+Clean up filtering of outputs for the regression tests by using a
+common sed script.
+
+Fix gcc -Wall and clang nits.
+
+
+E2fsprogs 1.42.7 (January 21, 2013)
+===================================
+
+Add warnings to mke2fs, resize2fs, and tune2fs that the bigalloc and
+quota features are still under development.  For more information
+please see:
+    * https://ext4.wiki.kernel.org/index.php/Bigalloc
+    * https://ext4.wiki.kernel.org/index.php/Quota
+
+Add some new options to filefrag from Lustre's patches to e2fsprogs:
+    * add -k option to print extents in kB-sized units (like df -k)
+    * add -b {blocksize} to print extents in blocksize units
+    * add -e option to print extent format, even when FIBMAP is used
+    * add -X option to print extents in hexadecimal format
+
+Fix resize2fs so that it can handle off-line resizes of file systems
+with the flex_bg feature but without a resize_inode (or if we run out
+of reserved gdt blocks).  This also fixes a problem where if the user
+creates a filesystem with a restricted number of reserved gdt blocks,
+an off-line resize which grows the file system could potentially
+result in file system corruption.
+
+Fix a resize2fs bug which could cause it to corrupt bigalloc file
+systems when doing an off-line resize.
+
+Further optimize resize2fs so it doesn't use quite as much CPU when
+resizing very large file systems. 
+
+Fixed 32-bit overflow bugs which could cause resize2fs to fail and
+possibly corrupt the file system while resizing 64-bit file systems.
+
+Fix a bug in mke2fs where parsing "-E resize=NNN" will result in a
+mke2fs crash due to a divide-by-zero if the 64bit file system feature
+is enabled.
+
+Add better error checking to mke2fs to check for invalid parameters
+when creating bigalloc file system.
+
+When creating bigalloc filesystems, the -g option to mke2fs will now
+specify the number of clusters per block group.
+
+Add to debugfs the functionality to corrupt a specific file system
+block via the "zap_block" command.
+
+Add to debugfs the functionality to print out a hex dump of a block in
+the file system via the "block_dump" command.
+
+Add to debugfs the functionality to manipulate the extent tree
+directly via the "extent_open" command.
+
+Fixed debugfs's mknod command so that it updates the block group
+statistics.
+
+Fix e2fsck so it can detect and fix inconsistencies in the interior
+nodes of an inode's extent tree.
+
+Fix a potential memory corruption failure in e2fsck's error path if
+the call to ext2fs_open2() fails.
+
+Fix e2fsck if its logging function is enabled in e2fsck.conf, and the
+resulting file name for the log file is longer than 100 bytes, that it
+properly handles this situation instead of crashing.
+
+E2fsck will now report the amount of memory that it attempted to
+allocate when a memory allocation request fails, to make it easier to
+track down the problem.
+
+Fix mke2fs's handling of the mmp_update_interval option.  (Addresses
+Lustre Bug: LU-1888)
+
+E2image can now include all data blocks in the e2image output file
+when the user specifies the -a option.
+
+If e2fsprogs is compiled without --enable-quota, make sure that
+tune2fs can not turn on the feature for new-style quota support, since
+afterwards, none of the e2fsprogs tools will be willing to touch that
+file system.
+
+Optimize e2fsck's so that it uses much less CPU for large file
+systems.  This can result in significant speedups, especially on
+CPU-constrained systems.  This was primarily done by optimizing
+libext2fs's bitmap functions.  (Addresses Google Bug: #7534813)
+
+Fix debugfs's htree command so that all its messages are sent through
+the pager.
+
+Fixed debugfs's "dump_file" and "cat" functions work correctly
+on file systems whose block size is greater than 8k.
+
+Fix e2freefrag so it works on 64-bit file systems, and so it uses much
+less memory.  (Addresses Google Bug: 7269948)
+
+Update the spd_readdir.c file in the contrib directory to include some
+additions which were made in 2008 that didn't get folded into the
+version which we checked into the e2fsprogs source tree.  These
+enhancements include thread safety, support for readdir64_r(), and
+safe_getenv() support in case spd_readdir.so is used for setuid binaries.
+
+Update Czech, Dutch, French, German, Polish, Sweedish, and Vietnamese
+translations
+
+Add a command to debugfs to create symlinks.
+
+Document the bigalloc feature in the mke2fs man page.  (Addresses
+Debian Bug: #669730)
+
+
+Programmer's Notes
+------------------
+
+Fix gcc -Wall nits.
+
+Fix a spelling typo in the libext2fs texinfo documentation.
+
+Change the output from "make check" so that tools such as emacs's "M-x
+compile" does not mistake the output as containing a compiler error.
+
+Export two new functions from libext2fs: ext2fs_extent_node_split()
+and ext2fs_extent_goto2().
+
+The ext2fs_extents_fix_parents() was fixed so it does not modify the
+location of the extent handle if its current location is at an
+interior node, rather than a leaf node of an inode's extent tree.
+
+Add a regression test to assure that e2fsck can correctly fix an
+inconsistent interior node in an inode's extent tree.
+
+The ext2fs_{mark,unmark,test}_block_bitmap_range2() functions now
+correctly support bigalloc file systems which use store block usage
+information in units of clusters.
+
+Fixed the help text in the configure script for --enable-quota.
+
+The m68k-specific bitops code has been removed since they were
+incorrectly treating bit numbers with the high bit set as signed
+integers.  Furthermore, modern compilers do a good enough job
+optimizing the generic code there is no point in having the m68k
+specific asm statements.
+
+Fixed how we link the test programs so they always use the static
+libraries, so that we test using the libraries which we have just
+built.
+
+Update config.guess and config.sub to the latest versions from the GNU
+project.
+
+Fixed the com_err.texinfo file so that it can produce a valid
+postscript/pdf printed output.
+
+Add a regression test which checks debugfs's ability to create
+symlinks, named FIFO's, and device nodes.
+
+Add a function ext2fs_symlink(), which creates symlinks to the
+libext2fs library.
+
+Add debugging code so we can test old kernel interfaces for online
+resize to resize2fs.  This backwards compatibility checking is keyed
+off of the RESIZE2FS_KERNEL_VERSION, which is designed to allow us to
+test the functionality of the kernel's older resize ioctls without
+needing to install an old version of resize2fs, and to also test a
+modern resize2fs's ability to work with older kernels without having
+to install an older version of the kernel.
+
+
+E2fsprogs 1.42.6 (September 21, 2012)
+=====================================
+
+When mke2fs creates file systems with lazy itable initialization, the
+progress updates for writing the inode table happens so quickly that
+on a serial console, the time to write the progress updates can be the
+bottleneck.  So mke2fs will now only update its progress indicators
+once a second.
+
+Resize2fs will skip initializing the inode tables if the kernel
+supports lazy_itable_init, which speeds up growing off-line growth of
+uninit_bg file systems significantly.  Resize2fs will now also
+correctly set the itable_unused field in the block group descriptor to
+speed up the first e2fsck after the file system is grown.
+
+Resize2fs has been fixed so that on-line resizing of meta_bg file
+systems work correctly.  This is needed to grow file system which are
+larger than 16T.
+
+Resize2fs will now correctly handle resizing file systems to 16TB on
+32-bit file systems when "16TB" is specified on the command line.
+
+Fix mke2fs so that it will be careful to set the reserved blocks ratio
+larger than 50%; this can happen when creating small file systems and
+when the last block group is dropped because there are not enough
+blocks to support the metadata blocks in the last block group.
+
+Fixed spelling mistake in debugfs's help message.
+
+Fixed a potential seg fault in e2fsck when there is an I/O error while
+reading the superblock.
+
+Fixed various Debian Packaging Issues (Addresses Debian Bug #677497)
+
+Updated/fixed various man pages.  (Addresses Sourceforge Bug:
+#3559210)
+
+Programmer's Notes
+------------------
+
+The configure option --enable-relative-symlink was broken so that it
+needed to be --enable-symlink-relative-symlinks.  We will support both
+for at least two years, but then the worng configure option will be
+removed.
+
+Fixed a regression introduced in 1.42.5 so the link order for
+e2fsprogs' libraries will be correct for both static and shared
+linking.  (Addresses Sourceforge Bug: #3554345)
+
+Add support for e2fsprogs to be compiled using clang/LLVM.
+
+Fix portability problems on non-Linux systems: avoid compile failures
+on systems that don't have malloc.h
+
+Fix f_mmp regression test suite so that debugfs gets killed if the
+test is interrupted.
+
+
+
 E2fsprogs 1.42.5 (July 29, 2012)
 ================================
 
old mode 100755 (executable)
new mode 100644 (file)
index d622a44..0aee604
@@ -2,13 +2,13 @@
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
+#   2011, 2012, 2013 Free Software Foundation, Inc.
 
-timestamp='2012-02-10'
+timestamp='2012-12-30'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -22,19 +22,17 @@ timestamp='2012-02-10'
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches@gnu.org> and include a ChangeLog
-# entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 #
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
+# Originally written by Per Bothner.
 #
 # You can get the latest version of this script from:
 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -55,8 +53,8 @@ GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+2012, 2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -200,6 +198,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
        echo "${machine}-${os}${release}"
        exit ;;
+    *:Bitrig:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+       exit ;;
     *:OpenBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
        echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -302,7 +304,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
        echo arm-acorn-riscix${UNAME_RELEASE}
        exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
        echo arm-unknown-riscos
        exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -801,6 +803,9 @@ EOF
     i*:CYGWIN*:*)
        echo ${UNAME_MACHINE}-pc-cygwin
        exit ;;
+    *:MINGW64*:*)
+       echo ${UNAME_MACHINE}-pc-mingw64
+       exit ;;
     *:MINGW*:*)
        echo ${UNAME_MACHINE}-pc-mingw32
        exit ;;
@@ -1201,6 +1206,9 @@ EOF
     BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
        echo i586-pc-haiku
        exit ;;
+    x86_64:Haiku:*:*)
+       echo x86_64-unknown-haiku
+       exit ;;
     SX-4:SUPER-UX:*:*)
        echo sx4-nec-superux${UNAME_RELEASE}
        exit ;;
@@ -1256,7 +1264,7 @@ EOF
     NEO-?:NONSTOP_KERNEL:*:*)
        echo neo-tandem-nsk${UNAME_RELEASE}
        exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NSE-*:NONSTOP_KERNEL:*:*)
        echo nse-tandem-nsk${UNAME_RELEASE}
        exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
@@ -1330,9 +1338,6 @@ EOF
        exit ;;
 esac
 
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
 eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
old mode 100755 (executable)
new mode 100644 (file)
index c894da4..707e9e2
@@ -2,23 +2,19 @@
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011, 2012 Free Software Foundation, Inc.
+#   2011, 2012, 2013 Free Software Foundation, Inc.
 
-timestamp='2012-02-10'
+timestamp='2013-01-11'
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, see <http://www.gnu.org/licenses/>.
@@ -26,11 +22,12 @@ timestamp='2012-02-10'
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -74,8 +71,8 @@ version="\
 GNU config.sub ($timestamp)
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-Free Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+2012, 2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -123,7 +120,7 @@ esac
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
   knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
@@ -156,7 +153,7 @@ case $os in
        -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
        -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
        -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze)
+       -apple | -axis | -knuth | -cray | -microblaze*)
                os=
                basic_machine=$1
                ;;
@@ -225,6 +222,12 @@ case $os in
        -isc*)
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
                ;;
+       -lynx*178)
+               os=-lynxos178
+               ;;
+       -lynx*5)
+               os=-lynxos5
+               ;;
        -lynx*)
                os=-lynxos
                ;;
@@ -253,8 +256,10 @@ case $basic_machine in
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
        | am33_2.0 \
-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-        | be32 | be64 \
+       | arc \
+       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+       | avr | avr32 \
+       | be32 | be64 \
        | bfin \
        | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
@@ -267,7 +272,7 @@ case $basic_machine in
        | le32 | le64 \
        | lm32 \
        | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | mcore | mep | metag \
+       | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
        | mips | mipsbe | mipseb | mipsel | mipsle \
        | mips16 \
        | mips64 | mips64el \
@@ -285,6 +290,7 @@ case $basic_machine in
        | mipsisa64r2 | mipsisa64r2el \
        | mipsisa64sb1 | mipsisa64sb1el \
        | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipsr5900 | mipsr5900el \
        | mipstx39 | mipstx39el \
        | mn10200 | mn10300 \
        | moxie \
@@ -383,7 +389,8 @@ case $basic_machine in
        | lm32-* \
        | m32c-* | m32r-* | m32rle-* \
        | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | microblaze-* | microblazeel-* \
        | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
        | mips16-* \
        | mips64-* | mips64el-* \
@@ -401,6 +408,7 @@ case $basic_machine in
        | mipsisa64r2-* | mipsisa64r2el-* \
        | mipsisa64sb1-* | mipsisa64sb1el-* \
        | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipsr5900-* | mipsr5900el-* \
        | mipstx39-* | mipstx39el-* \
        | mmix-* \
        | mt-* \
@@ -782,9 +790,13 @@ case $basic_machine in
                basic_machine=ns32k-utek
                os=-sysv
                ;;
-       microblaze)
+       microblaze*)
                basic_machine=microblaze-xilinx
                ;;
+       mingw64)
+               basic_machine=x86_64-pc
+               os=-mingw64
+               ;;
        mingw32)
                basic_machine=i386-pc
                os=-mingw32
@@ -1013,7 +1025,11 @@ case $basic_machine in
                basic_machine=i586-unknown
                os=-pw32
                ;;
-       rdos)
+       rdos | rdos64)
+               basic_machine=x86_64-pc
+               os=-rdos
+               ;;
+       rdos32)
                basic_machine=i386-pc
                os=-rdos
                ;;
@@ -1340,21 +1356,21 @@ case $os in
        -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
              | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
              | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* \
+             | -sym* | -kopensolaris* | -plan9* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
              | -aos* | -aros* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -openbsd* | -solidbsd* \
+             | -bitrig* | -openbsd* | -solidbsd* \
              | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* | -cegcc* \
              | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-android* \
-             | -linux-newlib* | -linux-uclibc* \
+             | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
              | -uxpv* | -beos* | -mpeix* | -udk* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
              | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1486,9 +1502,6 @@ case $os in
        -aros*)
                os=-aros
                ;;
-       -kaos*)
-               os=-kaos
-               ;;
        -zvmoe)
                os=-zvmoe
                ;;
@@ -1537,6 +1550,9 @@ case $basic_machine in
        c4x-* | tic4x-*)
                os=-coff
                ;;
+       hexagon-*)
+               os=-elf
+               ;;
        tic54x-*)
                os=-coff
                ;;
index d7cb9cc..00371ff 100755 (executable)
@@ -26,12 +26,12 @@ cp asm_types.h asm_types.c
 cat >> asm_types.c <<EOF
 #include <stdio.h>
 #include <stdlib.h>
-main(int argc, char **argv)
+int main(int argc, char **argv)
 {
 #ifdef __U8_TYPEDEF
        if (sizeof(__U8_TYPEDEF) != 1) {
                printf("Sizeof(__U8__TYPEDEF) is %d should be 1\n", 
-                      sizeof(__U8_TYPEDEF));
+                      (int) sizeof(__U8_TYPEDEF));
                exit(1);
        }
 #else
@@ -40,7 +40,7 @@ main(int argc, char **argv)
 #ifdef __S8_TYPEDEF
        if (sizeof(__S8_TYPEDEF) != 1) {
                printf("Sizeof(_S8__TYPEDEF) is %d should be 1\n", 
-                      sizeof(__S8_TYPEDEF));
+                      (int) sizeof(__S8_TYPEDEF));
                exit(1);
        }
 #else
@@ -49,7 +49,7 @@ main(int argc, char **argv)
 #ifdef __U16_TYPEDEF
        if (sizeof(__U16_TYPEDEF) != 2) {
                printf("Sizeof(__U16__TYPEDEF) is %d should be 2\n", 
-                      sizeof(__U16_TYPEDEF));
+                      (int) sizeof(__U16_TYPEDEF));
                exit(1);
        }
 #else
@@ -58,7 +58,7 @@ main(int argc, char **argv)
 #ifdef __S16_TYPEDEF
        if (sizeof(__S16_TYPEDEF) != 2) {
                printf("Sizeof(__S16__TYPEDEF) is %d should be 2\n", 
-                      sizeof(__S16_TYPEDEF));
+                      (int) sizeof(__S16_TYPEDEF));
                exit(1);
        }
 #else
@@ -68,7 +68,7 @@ main(int argc, char **argv)
 #ifdef __U32_TYPEDEF
        if (sizeof(__U32_TYPEDEF) != 4) {
                printf("Sizeof(__U32__TYPEDEF) is %d should be 4\n", 
-                      sizeof(__U32_TYPEDEF));
+                      (int) sizeof(__U32_TYPEDEF));
                exit(1);
        }
 #else
@@ -77,7 +77,7 @@ main(int argc, char **argv)
 #ifdef __S32_TYPEDEF
        if (sizeof(__S32_TYPEDEF) != 4) {
                printf("Sizeof(__S32__TYPEDEF) is %d should be 4\n", 
-                      sizeof(__S32_TYPEDEF));
+                      (int) sizeof(__S32_TYPEDEF));
                exit(1);
        }
 #else
@@ -87,7 +87,7 @@ main(int argc, char **argv)
 #ifdef __U64_TYPEDEF
        if (sizeof(__U64_TYPEDEF) != 8) {
                printf("Sizeof(__U64__TYPEDEF) is %d should be 8\n", 
-                      sizeof(__U64_TYPEDEF));
+                      (int) sizeof(__U64_TYPEDEF));
                exit(1);
        }
 #else
@@ -96,13 +96,13 @@ main(int argc, char **argv)
 #ifdef __S64_TYPEDEF
        if (sizeof(__S64_TYPEDEF) != 8) {
                printf("Sizeof(__S64__TYPEDEF) is %d should be 8\n", 
-                      sizeof(__S64_TYPEDEF));
+                      (int) sizeof(__S64_TYPEDEF));
                exit(1);
        }
 #else
 #warning __S64_TYPEDEF not defined
 #endif
-       exit(0);
+       return 0;
 }
 EOF
 
index 732119e..4c47f7a 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,11 +1,9 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65.
+# Generated by GNU Autoconf 2.69.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -89,6 +87,7 @@ fi
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -133,6 +132,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -166,7 +190,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -211,14 +236,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -316,10 +352,18 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -356,19 +400,19 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -441,6 +485,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -475,16 +523,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -496,28 +544,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -530,7 +558,7 @@ test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -612,6 +640,7 @@ LINUX_CMT
 UNI_DIFF_OPTS
 SEM_INIT_LIB
 SOCKET_LIB
+SIZEOF_OFF_T
 SIZEOF_LONG_LONG
 SIZEOF_LONG
 SIZEOF_INT
@@ -797,6 +826,7 @@ with_ldopts
 with_root_prefix
 enable_maintainer_mode
 enable_symlink_install
+enable_relative_symlinks
 enable_symlink_relative_symlinks
 enable_symlink_build
 enable_verbose_makecmds
@@ -812,6 +842,7 @@ enable_testio_debug
 enable_libuuid
 enable_libblkid
 enable_quota
+enable_backtrace
 enable_debugfs
 enable_imager
 enable_resizer
@@ -900,8 +931,9 @@ do
   fi
 
   case $ac_option in
-  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)   ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -946,7 +978,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -972,7 +1004,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1176,7 +1208,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1192,7 +1224,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1222,8 +1254,8 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1231,7 +1263,7 @@ Try \`$0 --help' for more information."
     # Reject names that are not valid shell variable names.
     case $ac_envvar in #(
       '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1241,7 +1273,7 @@ Try \`$0 --help' for more information."
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1249,13 +1281,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  as_fn_error $? "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1278,7 +1310,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1292,8 +1324,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1308,9 +1338,9 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error "working directory cannot be determined"
+  as_fn_error $? "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error "pwd does not report name of working directory"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1349,11 +1379,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-       cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+       cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
        pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1393,7 +1423,7 @@ Configuration:
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
+  -q, --quiet, --silent   do not print \`checking ...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
@@ -1453,6 +1483,7 @@ Optional Features:
   --enable-maintainer-mode enable makefile rules useful for maintainers
   --enable-symlink-install use symlinks when installing instead of hard links
   --enable-relative-symlinks use relative symlinks when installing
+
   --enable-symlink-build  use symlinks while building instead of hard links
   --enable-verbose-makecmds enable verbose make command output
   --enable-compression   enable EXPERIMENTAL compression support
@@ -1466,7 +1497,8 @@ Optional Features:
   --disable-testio-debug  disable the use of the test I/O manager for debugging
   --disable-libuuid      do not build private uuid library
   --disable-libblkid     do not build private blkid library
-  --enable-libquota      enable quota support
+  --enable-quota         enable quota support
+  --disable-backtrace    disable use backtrace
   --disable-debugfs      disable support of debugfs program
   --disable-imager       disable support of e2image program
   --disable-resizer      disable support of e2resize program
@@ -1572,9 +1604,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 configure
-generated by GNU Autoconf 2.65
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1618,7 +1650,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1650,7 +1682,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
+        test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1664,7 +1696,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1690,7 +1722,7 @@ $as_echo "$ac_try_echo"; } >&5
     mv -f conftest.er1 conftest.err
   fi
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
+  test $ac_status = 0; } > conftest.i && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then :
@@ -1701,7 +1733,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1743,7 +1775,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1757,7 +1789,7 @@ ac_fn_c_check_type ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1798,7 +1830,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
@@ -1811,7 +1843,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1829,7 +1861,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1841,7 +1873,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1896,7 +1928,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -1908,10 +1940,10 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1947,7 +1979,7 @@ if ac_fn_c_try_cpp "$LINENO"; then :
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
 $as_echo "$ac_header_preproc" >&6; }
 
@@ -1974,7 +2006,7 @@ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1983,7 +2015,7 @@ eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -2004,7 +2036,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2020,7 +2053,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2046,7 +2080,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2062,7 +2097,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2096,7 +2132,8 @@ int
 main ()
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
@@ -2160,7 +2197,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 rm -f conftest.val
 
   fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_compute_int
@@ -2174,7 +2211,7 @@ ac_fn_c_check_member ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
 $as_echo_n "checking for $2.$3... " >&6; }
-if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$4+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2218,19 +2255,22 @@ fi
 eval ac_res=\$$4
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_member
 
-# ac_fn_c_check_decl LINENO SYMBOL VAR
-# ------------------------------------
-# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
 ac_fn_c_check_decl ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5
-$as_echo_n "checking whether $2 is declared... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2239,8 +2279,12 @@ $4
 int
 main ()
 {
-#ifndef $2
-  (void) $2;
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
 #endif
 
   ;
@@ -2257,7 +2301,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_decl
 cat >config.log <<_ACEOF
@@ -2265,7 +2309,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2375,11 +2419,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2413,11 +2455,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2430,11 +2470,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2448,11 +2486,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2507,7 +2543,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -2522,7 +2563,11 @@ do
     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
@@ -2601,7 +2646,7 @@ if $ac_cache_corrupted; then
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2617,16 +2662,22 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 ac_aux_dir=
 for ac_dir in config "$srcdir"/config; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2703,27 +2754,27 @@ $as_echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&6; }
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -2741,14 +2792,14 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -2756,7 +2807,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -2783,7 +2834,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2795,7 +2846,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2823,7 +2874,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2835,7 +2886,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2876,7 +2927,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2888,7 +2939,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2916,7 +2967,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2929,7 +2980,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -2975,7 +3026,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2987,7 +3038,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3019,7 +3070,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3031,7 +3082,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3073,8 +3124,8 @@ fi
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3188,9 +3239,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -3232,8 +3282,8 @@ done
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -3290,9 +3340,9 @@ $as_echo "$ac_try_echo"; } >&5
     else
        { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
+as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -3303,7 +3353,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3343,8 +3393,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -3354,7 +3404,7 @@ OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3391,7 +3441,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3469,7 +3519,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3478,8 +3528,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3567,7 +3616,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -3601,7 +3650,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   DLOPEN_LIB=-ldl
 
 $as_echo "#define HAVE_DLOPEN 1" >>confdefs.h
@@ -3621,19 +3670,19 @@ fi
 
 # Check whether --with-cc was given.
 if test "${with_cc+set}" = set; then :
-  withval=$with_cc; as_fn_error "--with-cc no longer supported; use CC= instead" "$LINENO" 5
+  withval=$with_cc; as_fn_error $? "--with-cc no longer supported; use CC= instead" "$LINENO" 5
 fi
 
 
 # Check whether --with-ccopts was given.
 if test "${with_ccopts+set}" = set; then :
-  withval=$with_ccopts; as_fn_error "--with-ccopts no longer supported; use CFLAGS= instead" "$LINENO" 5
+  withval=$with_ccopts; as_fn_error $? "--with-ccopts no longer supported; use CFLAGS= instead" "$LINENO" 5
 fi
 
 
 # Check whether --with-ldopts was given.
 if test "${with_ldopts+set}" = set; then :
-  withval=$with_ldopts; as_fn_error "--with-ldopts no longer supported; use LDFLAGS= instead" "$LINENO" 5
+  withval=$with_ldopts; as_fn_error $? "--with-ldopts no longer supported; use LDFLAGS= instead" "$LINENO" 5
 fi
 
 ac_ext=c
@@ -3646,7 +3695,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3658,7 +3707,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3686,7 +3735,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3698,7 +3747,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3739,7 +3788,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3751,7 +3800,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3779,7 +3828,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3792,7 +3841,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3838,7 +3887,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3850,7 +3899,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3882,7 +3931,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3894,7 +3943,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3936,8 +3985,8 @@ fi
 
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -3966,7 +4015,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4003,7 +4052,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -4081,7 +4130,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -4090,8 +4139,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -4192,7 +4240,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -4222,7 +4270,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -4238,11 +4286,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -4281,7 +4329,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -4297,18 +4345,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
 
 else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -4386,23 +4434,43 @@ $as_echo "Disabling symlinks for install by default" >&6; }
 fi
 
 
+relative_symlink_defined=
+# Check whether --enable-relative-symlinks was given.
+if test "${enable_relative_symlinks+set}" = set; then :
+  enableval=$enable_relative_symlinks; if test "$enableval" = "no"
+then
+       SYMLINK_RELATIVE=
+       relative_symlink_defined=yes
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling relative symlinks for install" >&5
+$as_echo "Disabling relative symlinks for install" >&6; }
+else
+       SYMLINK_RELATIVE=--relative
+       relative_symlink_defined=yes
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling relative symlinks for install" >&5
+$as_echo "Enabling relative symlinks for install" >&6; }
+fi
+fi
+
 # Check whether --enable-symlink-relative-symlinks was given.
 if test "${enable_symlink_relative_symlinks+set}" = set; then :
   enableval=$enable_symlink_relative_symlinks; if test "$enableval" = "no"
 then
-       SYMLINK_RELATIVE=
+       SYMLINK_RELATIVE=yes
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling relative symlinks for install" >&5
 $as_echo "Disabling relative symlinks for install" >&6; }
 else
        SYMLINK_RELATIVE=--relative
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling symlinks for install" >&5
-$as_echo "Enabling symlinks for install" >&6; }
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling relative symlinks for install" >&5
+$as_echo "Enabling relative symlinks for install" >&6; }
 fi
 
 else
-  SYMLINK_RELATIVE=
+  if test -z "$relative_symlink_defined"
+then
+       SYMLINK_RELATIVE=
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling relative symlinks for install by default" >&5
 $as_echo "Disabling relative symlinks for install by default" >&6; }
+fi
 
 fi
 
@@ -4706,7 +4774,7 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PKG_CONFIG in
@@ -4720,7 +4788,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4749,7 +4817,7 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then
 set dummy pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ac_pt_PKG_CONFIG in
@@ -4763,7 +4831,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4826,12 +4894,12 @@ if test "${enable_libuuid+set}" = set; then :
   enableval=$enable_libuuid; if test "$enableval" = "no"
 then
        if test -z "$PKG_CONFIG"; then
-               as_fn_error "pkg-config not installed; please install it." "$LINENO" 5
+               as_fn_error $? "pkg-config not installed; please install it." "$LINENO" 5
        fi
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
 $as_echo_n "checking for uuid_generate in -luuid... " >&6; }
-if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then :
+if ${ac_cv_lib_uuid_uuid_generate+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -4865,11 +4933,11 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
 $as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; }
-if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then :
+if test "x$ac_cv_lib_uuid_uuid_generate" = xyes; then :
   LIBUUID=`$PKG_CONFIG --libs uuid`;
                 STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid`
 else
-  as_fn_error "external uuid library not found" "$LINENO" 5
+  as_fn_error $? "external uuid library not found" "$LINENO" 5
 fi
 
        UUID_CMT=#
@@ -4913,7 +4981,7 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PKG_CONFIG in
@@ -4927,7 +4995,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4956,7 +5024,7 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then
 set dummy pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ac_pt_PKG_CONFIG in
@@ -4970,7 +5038,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5034,12 +5102,12 @@ if test "${enable_libblkid+set}" = set; then :
   enableval=$enable_libblkid; if test "$enableval" = "no"
 then
        if test -z "$PKG_CONFIG"; then
-               as_fn_error "pkg-config not installed; please install it." "$LINENO" 5
+               as_fn_error $? "pkg-config not installed; please install it." "$LINENO" 5
        fi
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for blkid_get_cache in -lblkid" >&5
 $as_echo_n "checking for blkid_get_cache in -lblkid... " >&6; }
-if test "${ac_cv_lib_blkid_blkid_get_cache+set}" = set; then :
+if ${ac_cv_lib_blkid_blkid_get_cache+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -5073,11 +5141,11 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blkid_blkid_get_cache" >&5
 $as_echo "$ac_cv_lib_blkid_blkid_get_cache" >&6; }
-if test "x$ac_cv_lib_blkid_blkid_get_cache" = x""yes; then :
+if test "x$ac_cv_lib_blkid_blkid_get_cache" = xyes; then :
   LIBBLKID=`$PKG_CONFIG --libs blkid`;
                 STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`
 else
-  as_fn_error "external blkid library not found" "$LINENO" 5
+  as_fn_error $? "external blkid library not found" "$LINENO" 5
 fi
 
        BLKID_CMT=#
@@ -5125,7 +5193,7 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PKG_CONFIG in
@@ -5139,7 +5207,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5168,7 +5236,7 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then
 set dummy pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ac_pt_PKG_CONFIG in
@@ -5182,7 +5250,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5266,6 +5334,26 @@ DEPPROFILED_LIBQUOTA=$PROFILED_LIBQUOTA
 
 
 
+
+# Check whether --enable-backtrace was given.
+if test "${enable_backtrace+set}" = set; then :
+  enableval=$enable_backtrace; if test "$enableval" = "no"
+then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling use of backtrace" >&5
+$as_echo "Disabling use of backtrace" >&6; }
+       $as_echo "#define DISABLE_BACKTRACE 1" >>confdefs.h
+
+else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling use of backtrace" >&5
+$as_echo "Enabling use of backtrace" >&6; }
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling use of backtrace by default" >&5
+$as_echo "Enabling use of backtrace by default" >&6; }
+
+fi
+
 # Check whether --enable-debugfs was given.
 if test "${enable_debugfs+set}" = set; then :
   enableval=$enable_debugfs; if test "$enableval" = "no"
@@ -5434,7 +5522,7 @@ then
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5
 $as_echo_n "checking for thread local storage (TLS) class... " >&6; }
-  if test "${ac_cv_tls+set}" = set; then :
+  if ${ac_cv_tls+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -5533,7 +5621,7 @@ _ACEOF
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -5541,7 +5629,7 @@ SHELL = /bin/sh
 all:
        @echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -5577,7 +5665,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5597,7 +5685,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
          if test $ac_prog = install &&
            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
@@ -5716,7 +5804,7 @@ rm -f conf$$.file
 set dummy msgfmt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_MSGFMT+set}" = set; then :
+if ${ac_cv_path_MSGFMT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case "$MSGFMT" in
@@ -5756,7 +5844,7 @@ fi
 set dummy gmsgfmt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_GMSGFMT+set}" = set; then :
+if ${ac_cv_path_GMSGFMT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $GMSGFMT in
@@ -5770,7 +5858,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5827,7 +5915,7 @@ rm -f conf$$.file
 set dummy xgettext; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_XGETTEXT+set}" = set; then :
+if ${ac_cv_path_XGETTEXT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case "$XGETTEXT" in
@@ -5898,7 +5986,7 @@ rm -f conf$$.file
 set dummy msgmerge; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_MSGMERGE+set}" = set; then :
+if ${ac_cv_path_MSGMERGE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case "$MSGMERGE" in
@@ -5966,7 +6054,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -5978,7 +6066,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6006,7 +6094,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -6018,7 +6106,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6056,7 +6144,7 @@ fi
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror in -lcposix" >&5
 $as_echo_n "checking for strerror in -lcposix... " >&6; }
-if test "${ac_cv_lib_cposix_strerror+set}" = set; then :
+if ${ac_cv_lib_cposix_strerror+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -6090,7 +6178,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cposix_strerror" >&5
 $as_echo "$ac_cv_lib_cposix_strerror" >&6; }
-if test "x$ac_cv_lib_cposix_strerror" = x""yes; then :
+if test "x$ac_cv_lib_cposix_strerror" = xyes; then :
   LIBS="$LIBS -lcposix"
 fi
 
@@ -6099,7 +6187,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -6113,7 +6201,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -6148,7 +6236,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_GREP=$GREP
@@ -6162,7 +6250,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -6179,7 +6267,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -6214,7 +6302,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -6229,7 +6317,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6341,7 +6429,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6350,11 +6438,11 @@ else
 int
 main ()
 {
-/* FIXME: Include the comments suggested by Paul. */
+
 #ifndef __cplusplus
-  /* Ultrix mips cc rejects this.  */
+  /* Ultrix mips cc rejects this sort of thing.  */
   typedef int charset[2];
-  const charset cs;
+  const charset cs = { 0, 0 };
   /* SunOS 4.1.1 cc rejects this.  */
   char const *const *pcpcc;
   char **ppc;
@@ -6371,8 +6459,9 @@ main ()
   ++pcpcc;
   ppc = (char**) pcpcc;
   pcpcc = (char const *const *) ppc;
-  { /* SCO 3.2v4 cc rejects this.  */
-    char *t;
+  { /* SCO 3.2v4 cc rejects this sort of thing.  */
+    char tx;
+    char *t = &tx;
     char const *s = 0 ? (char *) 0 : (char const *) 0;
 
     *t++ = 0;
@@ -6388,10 +6477,10 @@ main ()
     iptr p = 0;
     ++p;
   }
-  { /* AIX XL C 1.02.0.0 rejects this saying
+  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; };
-    struct s *b; b->j = 5;
+    struct s { int j; const int *ap[3]; } bx;
+    struct s *b = &bx; b->j = 5;
   }
   { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
     const int foo = 10;
@@ -6422,7 +6511,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signed" >&5
 $as_echo_n "checking for signed... " >&6; }
-if test "${bh_cv_c_signed+set}" = set; then :
+if ${bh_cv_c_signed+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6453,7 +6542,7 @@ $as_echo "#define signed /**/" >>confdefs.h
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
 $as_echo_n "checking for inline... " >&6; }
-if test "${ac_cv_c_inline+set}" = set; then :
+if ${ac_cv_c_inline+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_c_inline=no
@@ -6500,8 +6589,7 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -6512,7 +6600,7 @@ done
 
 
 ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = x""yes; then :
+if test "x$ac_cv_type_off_t" = xyes; then :
 
 else
 
@@ -6523,7 +6611,7 @@ _ACEOF
 fi
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -6536,7 +6624,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long" >&5
 $as_echo_n "checking for long long... " >&6; }
-if test "${ac_cv_type_long_long+set}" = set; then :
+if ${ac_cv_type_long_long+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6570,7 +6658,7 @@ $as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5
 $as_echo_n "checking for long double... " >&6; }
-if test "${gt_cv_c_long_double+set}" = set; then :
+if ${gt_cv_c_long_double+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$GCC" = yes; then
@@ -6611,7 +6699,7 @@ $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
 $as_echo_n "checking for wchar_t... " >&6; }
-if test "${gt_cv_c_wchar_t+set}" = set; then :
+if ${gt_cv_c_wchar_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6644,7 +6732,7 @@ $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
 $as_echo_n "checking for wint_t... " >&6; }
-if test "${gt_cv_c_wint_t+set}" = set; then :
+if ${gt_cv_c_wint_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6677,7 +6765,7 @@ $as_echo "#define HAVE_WINT_T 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
 $as_echo_n "checking for inttypes.h... " >&6; }
-if test "${jm_ac_cv_header_inttypes_h+set}" = set; then :
+if ${jm_ac_cv_header_inttypes_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6712,7 +6800,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5
 $as_echo_n "checking for stdint.h... " >&6; }
-if test "${jm_ac_cv_header_stdint_h+set}" = set; then :
+if ${jm_ac_cv_header_stdint_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6749,7 +6837,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5
 $as_echo_n "checking for intmax_t... " >&6; }
-if test "${gt_cv_c_intmax_t+set}" = set; then :
+if ${gt_cv_c_intmax_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6791,7 +6879,7 @@ $as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5
 $as_echo_n "checking whether printf() supports POSIX/XSI format strings... " >&6; }
-if test "${gt_cv_func_printf_posix+set}" = set; then :
+if ${gt_cv_func_printf_posix+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -6855,7 +6943,7 @@ $as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h
 # for constant arguments.  Useless!
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
 $as_echo_n "checking for working alloca.h... " >&6; }
-if test "${ac_cv_working_alloca_h+set}" = set; then :
+if ${ac_cv_working_alloca_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6888,7 +6976,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
 $as_echo_n "checking for alloca... " >&6; }
-if test "${ac_cv_func_alloca_works+set}" = set; then :
+if ${ac_cv_func_alloca_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6907,7 +6995,7 @@ else
  #pragma alloca
 #   else
 #    ifndef alloca /* predefined by HP cc +Olibcalls */
-char *alloca ();
+void *alloca (size_t);
 #    endif
 #   endif
 #  endif
@@ -6951,7 +7039,7 @@ $as_echo "#define C_ALLOCA 1" >>confdefs.h
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
-if test "${ac_cv_os_cray+set}" = set; then :
+if ${ac_cv_os_cray+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6978,8 +7066,7 @@ if test $ac_cv_os_cray = yes; then
   for ac_func in _getb67 GETB67 getb67; do
     as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
 
 cat >>confdefs.h <<_ACEOF
 #define CRAY_STACKSEG_END $ac_func
@@ -6993,7 +7080,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
 $as_echo_n "checking stack direction for C alloca... " >&6; }
-if test "${ac_cv_c_stack_direction+set}" = set; then :
+if ${ac_cv_c_stack_direction+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -7003,23 +7090,20 @@ else
 /* end confdefs.h.  */
 $ac_includes_default
 int
-find_stack_direction ()
+find_stack_direction (int *addr, int depth)
 {
-  static char *addr = 0;
-  auto char dummy;
-  if (addr == 0)
-    {
-      addr = &dummy;
-      return find_stack_direction ();
-    }
-  else
-    return (&dummy > addr) ? 1 : -1;
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
 }
 
 int
-main ()
+main (int argc, char **argv)
 {
-  return find_stack_direction () < 0;
+  return find_stack_direction (0, argc + !argv + 20) < 0;
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
@@ -7049,8 +7133,7 @@ do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -7069,7 +7152,7 @@ done
 for ac_func in getpagesize
 do :
   ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = x""yes; then :
+if test "x$ac_cv_func_getpagesize" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETPAGESIZE 1
 _ACEOF
@@ -7079,7 +7162,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
 $as_echo_n "checking for working mmap... " >&6; }
-if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then :
+if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -7246,7 +7329,7 @@ rm -f conftest.mmap conftest.txt
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2.1 or newer" >&5
 $as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; }
-if test "${ac_cv_gnu_library_2_1+set}" = set; then :
+if ${ac_cv_gnu_library_2_1+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7281,7 +7364,7 @@ $as_echo "$ac_cv_gnu_library_2_1" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5
 $as_echo_n "checking whether integer division by zero raises SIGFPE... " >&6; }
-if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then :
+if ${gt_cv_int_divbyzero_sigfpe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -7362,7 +7445,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long" >&5
 $as_echo_n "checking for unsigned long long... " >&6; }
-if test "${ac_cv_type_unsigned_long_long+set}" = set; then :
+if ${ac_cv_type_unsigned_long_long+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -7415,7 +7498,7 @@ $as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
 $as_echo_n "checking for inttypes.h... " >&6; }
-if test "${gt_cv_header_inttypes_h+set}" = set; then :
+if ${gt_cv_header_inttypes_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -7454,7 +7537,7 @@ _ACEOF
   if test $gt_cv_header_inttypes_h = yes; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5
 $as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
-if test "${gt_cv_inttypes_pri_broken+set}" = set; then :
+if ${gt_cv_inttypes_pri_broken+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -7496,7 +7579,7 @@ _ACEOF
   for ac_header in stdint.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdint_h" = x""yes; then :
+if test "x$ac_cv_header_stdint_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDINT_H 1
 _ACEOF
@@ -7593,7 +7676,7 @@ _ACEOF
   for ac_header in stdint.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdint_h" = x""yes; then :
+if test "x$ac_cv_header_stdint_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDINT_H 1
 _ACEOF
@@ -7679,7 +7762,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${acl_cv_path_LD+set}" = set; then :
+if ${acl_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -7713,10 +7796,10 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${acl_cv_prog_gnu_ld+set}" = set; then :
+if ${acl_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU ld's only accept -v.
@@ -7735,7 +7818,7 @@ with_gnu_ld=$acl_cv_prog_gnu_ld
 
                                                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
 $as_echo_n "checking for shared library run path origin... " >&6; }
-if test "${acl_cv_rpath+set}" = set; then :
+if ${acl_cv_rpath+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -8153,7 +8236,7 @@ fi
 
 
   ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = x""yes; then :
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
 
 else
 
@@ -8167,8 +8250,7 @@ stdlib.h string.h unistd.h sys/param.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -8184,8 +8266,7 @@ __fsetlocking
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
@@ -8197,7 +8278,7 @@ done
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _snprintf is declared" >&5
 $as_echo_n "checking whether _snprintf is declared... " >&6; }
-if test "${ac_cv_have_decl__snprintf+set}" = set; then :
+if ${ac_cv_have_decl__snprintf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8238,7 +8319,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _snwprintf is declared" >&5
 $as_echo_n "checking whether _snwprintf is declared... " >&6; }
-if test "${ac_cv_have_decl__snwprintf+set}" = set; then :
+if ${ac_cv_have_decl__snwprintf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8280,7 +8361,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether feof_unlocked is declared" >&5
 $as_echo_n "checking whether feof_unlocked is declared... " >&6; }
-if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then :
+if ${ac_cv_have_decl_feof_unlocked+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8321,7 +8402,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fgets_unlocked is declared" >&5
 $as_echo_n "checking whether fgets_unlocked is declared... " >&6; }
-if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then :
+if ${ac_cv_have_decl_fgets_unlocked+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8362,7 +8443,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getc_unlocked is declared" >&5
 $as_echo_n "checking whether getc_unlocked is declared... " >&6; }
-if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then :
+if ${ac_cv_have_decl_getc_unlocked+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8457,7 +8538,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
 $as_echo_n "checking for iconv... " >&6; }
-if test "${am_cv_func_iconv+set}" = set; then :
+if ${am_cv_func_iconv+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -8532,7 +8613,7 @@ $as_echo "$LIBICONV" >&6; }
   if test "$am_cv_func_iconv" = yes; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
 $as_echo_n "checking for iconv declaration... " >&6; }
-    if test "${am_cv_proto_iconv+set}" = set; then :
+    if ${am_cv_proto_iconv+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -8583,7 +8664,7 @@ _ACEOF
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
-if test "${am_cv_langinfo_codeset+set}" = set; then :
+if ${am_cv_langinfo_codeset+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8618,7 +8699,7 @@ $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5
 $as_echo_n "checking for LC_MESSAGES... " >&6; }
-if test "${am_cv_val_LC_MESSAGES+set}" = set; then :
+if ${am_cv_val_LC_MESSAGES+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8656,7 +8737,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_INTLBISON+set}" = set; then :
+if ${ac_cv_prog_INTLBISON+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$INTLBISON"; then
@@ -8668,7 +8749,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_INTLBISON="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8774,7 +8855,7 @@ $as_echo "$nls_cv_force_use_gnu_gettext" >&6; }
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
 $as_echo_n "checking for GNU gettext in libc... " >&6; }
-if test "${gt_cv_func_gnugettext1_libc+set}" = set; then :
+if ${gt_cv_func_gnugettext1_libc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9184,7 +9265,7 @@ fi
 
           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
 $as_echo_n "checking for GNU gettext in libintl... " >&6; }
-if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then :
+if ${gt_cv_func_gnugettext1_libintl+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   gt_save_CPPFLAGS="$CPPFLAGS"
@@ -9399,7 +9480,7 @@ $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -9407,7 +9488,7 @@ SHELL = /bin/sh
 all:
        @echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -9428,7 +9509,7 @@ fi
 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU make" >&5
 $as_echo_n "checking for GNU make... " >&6; }
-if test "${_cv_gnu_make_command+set}" = set; then :
+if ${_cv_gnu_make_command+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   _cv_gnu_make_command='' ;
@@ -9459,7 +9540,7 @@ $as_echo "\"Not found\"" >&6; };
 set dummy ln; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_LN+set}" = set; then :
+if ${ac_cv_path_LN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $LN in
@@ -9473,7 +9554,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9511,7 +9592,7 @@ fi
 set dummy mv; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_MV+set}" = set; then :
+if ${ac_cv_path_MV+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MV in
@@ -9525,7 +9606,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9552,7 +9633,7 @@ fi
 set dummy cp; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CP+set}" = set; then :
+if ${ac_cv_path_CP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CP in
@@ -9566,7 +9647,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9593,7 +9674,7 @@ fi
 set dummy rm; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_RM+set}" = set; then :
+if ${ac_cv_path_RM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $RM in
@@ -9607,7 +9688,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9634,7 +9715,7 @@ fi
 set dummy chmod; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_CHMOD+set}" = set; then :
+if ${ac_cv_path_CHMOD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CHMOD in
@@ -9648,7 +9729,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9677,7 +9758,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -9689,7 +9770,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9715,7 +9796,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -9732,7 +9813,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -9767,7 +9848,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -9784,7 +9865,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 set dummy sed; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $SED in
@@ -9798,7 +9879,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9825,7 +9906,7 @@ fi
 set dummy perl; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_PERL+set}" = set; then :
+if ${ac_cv_path_PERL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PERL in
@@ -9839,7 +9920,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9866,7 +9947,7 @@ fi
 set dummy ldconfig; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_LDCONFIG+set}" = set; then :
+if ${ac_cv_path_LDCONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $LDCONFIG in
@@ -9880,7 +9961,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_LDCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9908,7 +9989,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -9920,7 +10001,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="${ac_tool_prefix}ar"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9948,7 +10029,7 @@ if test -z "$ac_cv_prog_AR"; then
 set dummy ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -9960,7 +10041,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="ar"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10000,7 +10081,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -10012,7 +10093,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10040,7 +10121,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -10052,7 +10133,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10092,7 +10173,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -10104,7 +10185,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10132,7 +10213,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -10144,7 +10225,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10183,7 +10264,7 @@ fi
 set dummy makeinfo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_MAKEINFO+set}" = set; then :
+if ${ac_cv_prog_MAKEINFO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$MAKEINFO"; then
@@ -10195,7 +10276,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_MAKEINFO="makeinfo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10243,7 +10324,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_BUILD_CC+set}" = set; then :
+if ${ac_cv_prog_BUILD_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$BUILD_CC"; then
@@ -10255,7 +10336,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_BUILD_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10284,8 +10365,7 @@ for ac_header in        dirent.h        errno.h         execinfo.h      getopt.h        malloc.h        mntent.h
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -10303,8 +10383,7 @@ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
 #endif
 
 "
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -10324,7 +10403,7 @@ do :
 #endif
 
 "
-if test "x$ac_cv_header_net_if_h" = x""yes; then :
+if test "x$ac_cv_header_net_if_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_NET_IF_H 1
 _ACEOF
@@ -10336,13 +10415,13 @@ done
 for ac_func in vprintf
 do :
   ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
-if test "x$ac_cv_func_vprintf" = x""yes; then :
+if test "x$ac_cv_func_vprintf" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_VPRINTF 1
 _ACEOF
 
 ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
-if test "x$ac_cv_func__doprnt" = x""yes; then :
+if test "x$ac_cv_func__doprnt" = xyes; then :
 
 $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
 
@@ -10354,7 +10433,7 @@ done
 
 ac_fn_c_check_member "$LINENO" "struct dirent" "d_reclen" "ac_cv_member_struct_dirent_d_reclen" "#include <dirent.h>
 "
-if test "x$ac_cv_member_struct_dirent_d_reclen" = x""yes; then :
+if test "x$ac_cv_member_struct_dirent_d_reclen" = xyes; then :
 
 $as_echo "#define HAVE_RECLEN_DIRENT 1" >>confdefs.h
 
@@ -10362,7 +10441,7 @@ fi
 
 ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "#include <sys/types.h>
 "
-if test "x$ac_cv_type_ssize_t" = x""yes; then :
+if test "x$ac_cv_type_ssize_t" = xyes; then :
 
 $as_echo "#define HAVE_TYPE_SSIZE_T 1" >>confdefs.h
 
@@ -10370,7 +10449,7 @@ fi
 
 ac_fn_c_check_decl "$LINENO" "llseek" "ac_cv_have_decl_llseek" "#include <unistd.h>
 "
-if test "x$ac_cv_have_decl_llseek" = x""yes; then :
+if test "x$ac_cv_have_decl_llseek" = xyes; then :
 
 $as_echo "#define HAVE_LLSEEK_PROTOTYPE 1" >>confdefs.h
 
@@ -10380,7 +10459,7 @@ ac_fn_c_check_decl "$LINENO" "lseek64" "ac_cv_have_decl_lseek64" "#define _LARGE
                 #define _LARGEFILE64_SOURCE
                 #include <unistd.h>
 "
-if test "x$ac_cv_have_decl_lseek64" = x""yes; then :
+if test "x$ac_cv_have_decl_lseek64" = xyes; then :
 
 $as_echo "#define HAVE_LSEEK64_PROTOTYPE 1" >>confdefs.h
 
@@ -10392,7 +10471,7 @@ fi
 # This bug is HP SR number 8606223364.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
 $as_echo_n "checking size of short... " >&6; }
-if test "${ac_cv_sizeof_short+set}" = set; then :
+if ${ac_cv_sizeof_short+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
@@ -10401,9 +10480,8 @@ else
   if test "$ac_cv_type_short" = yes; then
      { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "cannot compute sizeof (short)
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "cannot compute sizeof (short)
+See \`config.log' for more details" "$LINENO" 5; }
    else
      ac_cv_sizeof_short=0
    fi
@@ -10426,7 +10504,7 @@ _ACEOF
 # This bug is HP SR number 8606223364.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
 $as_echo_n "checking size of int... " >&6; }
-if test "${ac_cv_sizeof_int+set}" = set; then :
+if ${ac_cv_sizeof_int+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
@@ -10435,9 +10513,8 @@ else
   if test "$ac_cv_type_int" = yes; then
      { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "cannot compute sizeof (int)
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5; }
    else
      ac_cv_sizeof_int=0
    fi
@@ -10460,7 +10537,7 @@ _ACEOF
 # This bug is HP SR number 8606223364.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
 $as_echo_n "checking size of long... " >&6; }
-if test "${ac_cv_sizeof_long+set}" = set; then :
+if ${ac_cv_sizeof_long+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
@@ -10469,9 +10546,8 @@ else
   if test "$ac_cv_type_long" = yes; then
      { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "cannot compute sizeof (long)
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5; }
    else
      ac_cv_sizeof_long=0
    fi
@@ -10494,7 +10570,7 @@ _ACEOF
 # This bug is HP SR number 8606223364.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
 $as_echo_n "checking size of long long... " >&6; }
-if test "${ac_cv_sizeof_long_long+set}" = set; then :
+if ${ac_cv_sizeof_long_long+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
@@ -10503,9 +10579,8 @@ else
   if test "$ac_cv_type_long_long" = yes; then
      { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "cannot compute sizeof (long long)
-See \`config.log' for more details." "$LINENO" 5; }; }
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5; }
    else
      ac_cv_sizeof_long_long=0
    fi
@@ -10522,17 +10597,52 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
+$as_echo_n "checking size of off_t... " >&6; }
+if ${ac_cv_sizeof_off_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_off_t" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (off_t)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_off_t=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5
+$as_echo "$ac_cv_sizeof_off_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
+_ACEOF
+
+
 SIZEOF_SHORT=$ac_cv_sizeof_short
 SIZEOF_INT=$ac_cv_sizeof_int
 SIZEOF_LONG=$ac_cv_sizeof_long
 SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
+SIZEOF_OFF_T=$ac_cv_sizeof_off_t
+
 
 
 
 
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
 $as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then :
+if ${ac_cv_c_bigendian+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_c_bigendian=unknown
@@ -10750,7 +10860,7 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
 
      ;; #(
    *)
-     as_fn_error "unknown endianness
+     as_fn_error $? "unknown endianness
  presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
  esac
 
@@ -10775,7 +10885,7 @@ PUBLIC_CONFIG_HEADER=./public_config.h
 for ac_header in inttypes.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_inttypes_h" = x""yes; then :
+if test "x$ac_cv_header_inttypes_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_INTTYPES_H 1
 _ACEOF
@@ -10785,7 +10895,7 @@ fi
 done
 
 ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_intptr_t" = x""yes; then :
+if test "x$ac_cv_type_intptr_t" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_INTPTR_T 1
@@ -10796,7 +10906,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat has a st_flags field" >&5
 $as_echo_n "checking whether struct stat has a st_flags field... " >&6; }
-if test "${e2fsprogs_cv_struct_st_flags+set}" = set; then :
+if ${e2fsprogs_cv_struct_st_flags+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -10823,7 +10933,7 @@ $as_echo "$e2fsprogs_cv_struct_st_flags" >&6; }
 if test "$e2fsprogs_cv_struct_st_flags" = yes; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether st_flags field is useful" >&5
 $as_echo_n "checking whether st_flags field is useful... " >&6; }
-  if test "${e2fsprogs_cv_struct_st_flags_immut+set}" = set; then :
+  if ${e2fsprogs_cv_struct_st_flags_immut+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -10856,7 +10966,7 @@ fi
 ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include <sys/types.h>
         #include <sys/socket.h>
 "
-if test "x$ac_cv_member_struct_sockaddr_sa_len" = x""yes; then :
+if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_SA_LEN 1
@@ -10867,7 +10977,7 @@ fi
 if test -n "$BLKID_CMT"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing blkid_probe_all" >&5
 $as_echo_n "checking for library containing blkid_probe_all... " >&6; }
-if test "${ac_cv_search_blkid_probe_all+set}" = set; then :
+if ${ac_cv_search_blkid_probe_all+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -10901,11 +11011,11 @@ for ac_lib in '' blkid; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_blkid_probe_all+set}" = set; then :
+  if ${ac_cv_search_blkid_probe_all+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_blkid_probe_all+set}" = set; then :
+if ${ac_cv_search_blkid_probe_all+:} false; then :
 
 else
   ac_cv_search_blkid_probe_all=no
@@ -10922,12 +11032,11 @@ if test "$ac_res" != no; then :
 fi
 
 fi
-for ac_func in         __secure_getenv         backtrace       blkid_probe_get_topology        chflags         fallocate       fallocate64     fchown  fdatasync       fstat64         ftruncate64     getdtablesize   getmntinfo      getpwuid_r      getrlimit       getrusage       jrand48         llseek  lseek64         mallinfo        mbstowcs        memalign        mmap    msync   nanosleep       open64  pathconf        posix_fadvise   posix_memalign  prctl   setmntent       setresgid       setresuid       srandom         strcasecmp      strdup  strnlen         strptime        strtoull        sync_file_range         sysconf         usleep  utime   valloc
+for ac_func in         __secure_getenv         backtrace       blkid_probe_get_topology        chflags         fallocate       fallocate64     fchown  fdatasync       fstat64         ftruncate64     getdtablesize   getmntinfo      getpwuid_r      getrlimit       getrusage       jrand48         llseek  lseek64         mallinfo        mbstowcs        memalign        mmap    msync   nanosleep       open64  pathconf        posix_fadvise   posix_memalign  prctl   secure_getenv   setmntent       setresgid       setresuid       srandom         strcasecmp      strdup  strnlen         strptime        strtoull        sync_file_range         sysconf         usleep  utime   valloc
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
-   if test "x$as_val" = x""yes; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
@@ -10938,7 +11047,7 @@ done
 SOCKET_LIB=''
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
 $as_echo_n "checking for socket in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_socket+set}" = set; then :
+if ${ac_cv_lib_socket_socket+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -10972,14 +11081,14 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
 $as_echo "$ac_cv_lib_socket_socket" >&6; }
-if test "x$ac_cv_lib_socket_socket" = x""yes; then :
+if test "x$ac_cv_lib_socket_socket" = xyes; then :
   SOCKET_LIB=-lsocket
 fi
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for optreset" >&5
 $as_echo_n "checking for optreset... " >&6; }
-if test "${ac_cv_have_optreset+set}" = set; then :
+if ${ac_cv_have_optreset+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 
 SEM_INIT_LIB=''
 ac_fn_c_check_func "$LINENO" "sem_init" "ac_cv_func_sem_init"
-if test "x$ac_cv_func_sem_init" = x""yes; then :
+if test "x$ac_cv_func_sem_init" = xyes; then :
 
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lpthread" >&5
 $as_echo_n "checking for sem_init in -lpthread... " >&6; }
-if test "${ac_cv_lib_pthread_sem_init+set}" = set; then :
+if ${ac_cv_lib_pthread_sem_init+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -11045,14 +11154,14 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_sem_init" >&5
 $as_echo "$ac_cv_lib_pthread_sem_init" >&6; }
-if test "x$ac_cv_lib_pthread_sem_init" = x""yes; then :
+if test "x$ac_cv_lib_pthread_sem_init" = xyes; then :
   $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
 
        SEM_INIT_LIB=-lpthread
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lrt" >&5
 $as_echo_n "checking for sem_init in -lrt... " >&6; }
-if test "${ac_cv_lib_rt_sem_init+set}" = set; then :
+if ${ac_cv_lib_rt_sem_init+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -11086,14 +11195,14 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sem_init" >&5
 $as_echo "$ac_cv_lib_rt_sem_init" >&6; }
-if test "x$ac_cv_lib_rt_sem_init" = x""yes; then :
+if test "x$ac_cv_lib_rt_sem_init" = xyes; then :
   $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
 
        SEM_INIT_LIB=-lrt
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lposix4" >&5
 $as_echo_n "checking for sem_init in -lposix4... " >&6; }
-if test "${ac_cv_lib_posix4_sem_init+set}" = set; then :
+if ${ac_cv_lib_posix4_sem_init+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -11127,7 +11236,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sem_init" >&5
 $as_echo "$ac_cv_lib_posix4_sem_init" >&6; }
-if test "x$ac_cv_lib_posix4_sem_init" = x""yes; then :
+if test "x$ac_cv_lib_posix4_sem_init" = xyes; then :
   $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h
 
        SEM_INIT_LIB=-lposix4
@@ -11242,9 +11351,9 @@ if test "${with_multiarch+set}" = set; then :
 root_libdir=$root_libdir/$withval
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linker accepts -static" >&5
-$as_echo_n "checking whether linker accepts -static... " >&6; }
-if test "${ac_cv_e2fsprogs_use_static+set}" = set; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can link with -static" >&5
+$as_echo_n "checking whether we can link with -static... " >&6; }
+if ${ac_cv_e2fsprogs_use_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
@@ -11403,10 +11512,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+       cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+         mv -f confcache "$cache_file"$$ &&
+         mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+         mv -f confcache "$cache_file" ;;
+       esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -11422,6 +11542,7 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
+U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
@@ -11438,7 +11559,7 @@ LTLIBOBJS=$ac_ltlibobjs
 
 
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -11539,6 +11660,7 @@ fi
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -11584,19 +11706,19 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
 # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
 # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
+# script with STATUS, using 1 if that was 0.
 as_fn_error ()
 {
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -11734,16 +11856,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -11792,7 +11914,7 @@ $as_echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -11803,28 +11925,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -11846,7 +11956,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -11912,10 +12022,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.65,
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -11932,11 +12042,16 @@ ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
-  --*=*)
+  --*=?*)
     ac_option=`expr "X$1" : 'X\([^=]*\)='`
     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
   *)
     ac_option=$1
     ac_optarg=$2
@@ -11958,6 +12073,7 @@ do
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -11970,7 +12086,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -11979,7 +12095,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -11999,7 +12115,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
@@ -12043,7 +12159,7 @@ do
     "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
     "$outlist") CONFIG_FILES="$CONFIG_FILES $outlist" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -12076,12 +12193,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -12115,24 +12233,24 @@ if test "x$ac_cr" = x; then
 fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 # Create commands to substitute file output variables.
 {
   echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" &&
-  echo 'cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&' &&
+  echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' &&
   echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' &&
   echo "_ACAWK" &&
   echo "_ACEOF"
 } >conf$$files.sh &&
 . ./conf$$files.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
 rm -f conf$$files.sh
 
 {
@@ -12140,18 +12258,18 @@ rm -f conf$$files.sh
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   . ./conf$$subs.sh ||
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
 
   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
   if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -12159,7 +12277,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -12207,7 +12325,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = "\a"
   \$ac_cs_awk_pipe_init
@@ -12245,21 +12363,29 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[         ]*VPATH[        ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[    ]*\):*/\1/
+  ac_vpsub='/^[         ]*VPATH[        ]*=[    ]*/{
+h
+s///
+s/^/:/
+s/[     ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
 s/:*$//
+x
+s/\(=[  ]*\).*/\1/
+G
+s/\n//
 s/^[^=]*=[      ]*$//
 }'
 fi
@@ -12271,7 +12397,7 @@ fi # test -n "$CONFIG_FILES"
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -12283,11 +12409,11 @@ _ACEOF
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -12372,7 +12498,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -12385,7 +12511,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -12404,7 +12530,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
         # (if the path is not absolute).  The absolute path cannot be DOS-style,
         # because $ac_f cannot contain `:'.
@@ -12413,7 +12539,7 @@ do
           [\\/$]*) false;;
           *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
           esac ||
-          as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+          as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -12439,8 +12565,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -12572,26 +12698,27 @@ $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" |
 if $ac_cs_awk_getline; then
-  $AWK -f "$tmp/subs.awk"
+  $AWK -f "$ac_tmp/subs.awk"
 else
-  $AWK -f "$tmp/subs.awk" | $SHELL
-fi >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  $AWK -f "$ac_tmp/subs.awk" | $SHELL
+fi \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
+which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&2;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -12600,21 +12727,21 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
-       || as_fn_error "could not create $ac_file" "$LINENO" 5
+      mv "$ac_tmp/config.h" "$ac_file" \
+       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
   fi
  ;;
 
@@ -12744,7 +12871,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -12765,7 +12892,7 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit $?
+  $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
index 7373e8e..fc65b03 100644 (file)
@@ -1,5 +1,5 @@
 AC_INIT(version.h)
-AC_PREREQ(2.50)
+AC_PREREQ(2.54)
 AC_CONFIG_AUX_DIR(config)
 AC_CONFIG_HEADERS([lib/config.h])
 AH_BOTTOM([#include "dirpaths.h"])
@@ -170,19 +170,34 @@ AC_SUBST(LINK_INSTALL_FLAGS)
 dnl
 dnl handle --enable-relative-symlinks
 dnl
-AC_ARG_ENABLE([symlink-relative-symlinks],
+relative_symlink_defined=
+AC_ARG_ENABLE([relative-symlinks],
 [  --enable-relative-symlinks use relative symlinks when installing],
 if test "$enableval" = "no"
 then
        SYMLINK_RELATIVE=
+       relative_symlink_defined=yes
        AC_MSG_RESULT([Disabling relative symlinks for install])
 else
        SYMLINK_RELATIVE=--relative
-       AC_MSG_RESULT([Enabling symlinks for install])
+       relative_symlink_defined=yes
+       AC_MSG_RESULT([Enabling relative symlinks for install])
+fi)
+AC_ARG_ENABLE([symlink-relative-symlinks],,
+if test "$enableval" = "no"
+then
+       SYMLINK_RELATIVE=yes
+       AC_MSG_RESULT([Disabling relative symlinks for install])
+else
+       SYMLINK_RELATIVE=--relative
+       AC_MSG_RESULT([Enabling relative symlinks for install])
 fi
 ,
+if test -z "$relative_symlink_defined"
+then
        SYMLINK_RELATIVE=
 AC_MSG_RESULT([Disabling relative symlinks for install by default])
+fi
 )
 AC_SUBST(SYMLINK_RELATIVE)
 dnl
@@ -553,7 +568,7 @@ dnl
 PKG_PROG_PKG_CONFIG
 AH_TEMPLATE([CONFIG_QUOTA], [Define to 1 to enable quota support])
 AC_ARG_ENABLE([quota],
-[  --enable-libquota     enable quota support],
+[  --enable-quota        enable quota support],
 if test "$enableval" = "no"
 then
        AC_MSG_RESULT([Disabling quota support])
@@ -581,6 +596,22 @@ AC_SUBST(PROFILED_LIBQUOTA)
 AC_SUBST(DEPPROFILED_LIBQUOTA)
 AC_SUBST(QUOTA_CMT)
 dnl
+dnl handle --disable-backtrace
+dnl
+AH_TEMPLATE([DISABLE_BACKTRACE], [Define to 1 to disable use of backtrace])
+AC_ARG_ENABLE([backtrace],
+[  --disable-backtrace   disable use backtrace],
+if test "$enableval" = "no"
+then
+       AC_MSG_RESULT([Disabling use of backtrace])
+       AC_DEFINE(DISABLE_BACKTRACE, 1)
+else
+       AC_MSG_RESULT([Enabling use of backtrace])
+fi
+,
+AC_MSG_RESULT([Enabling use of backtrace by default])
+)
+dnl
 dnl handle --enable-debugfs
 dnl
 AC_ARG_ENABLE([debugfs],
@@ -901,14 +932,17 @@ AC_CHECK_SIZEOF(short)
 AC_CHECK_SIZEOF(int)
 AC_CHECK_SIZEOF(long)
 AC_CHECK_SIZEOF(long long)
+AC_CHECK_SIZEOF(off_t)
 SIZEOF_SHORT=$ac_cv_sizeof_short
 SIZEOF_INT=$ac_cv_sizeof_int
 SIZEOF_LONG=$ac_cv_sizeof_long
 SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long
+SIZEOF_OFF_T=$ac_cv_sizeof_off_t
 AC_SUBST(SIZEOF_SHORT)
 AC_SUBST(SIZEOF_INT)
 AC_SUBST(SIZEOF_LONG)
 AC_SUBST(SIZEOF_LONG_LONG)
+AC_SUBST(SIZEOF_OFF_T)
 AC_C_BIGENDIAN
 BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh
 ASM_TYPES_HEADER=./asm_types.h
@@ -1007,6 +1041,7 @@ AC_CHECK_FUNCS(m4_flatten([
        posix_fadvise
        posix_memalign
        prctl
+       secure_getenv
        setmntent
        setresgid
        setresuid
@@ -1165,9 +1200,11 @@ libdir=$libdir/$withval
 root_libdir=$root_libdir/$withval
 )dnl
 dnl
-dnl See if -static works.
+dnl See if -static works.  This could fail if the linker does not
+dnl support -static, or if required external libraries are not available
+dnl in static form.
 dnl
-AC_MSG_CHECKING([whether linker accepts -static])
+AC_MSG_CHECKING([whether we can link with -static])
 AC_CACHE_VAL(ac_cv_e2fsprogs_use_static,
 [SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS -static"
 AC_TRY_LINK([#include <stdio.h>],[fflush(stdout);],
index 0e8319f..1f9b59a 100644 (file)
 
 // #include <linux/falloc.h>
 #define FALLOC_FL_KEEP_SIZE    0x01
+#define FALLOC_FL_PUNCH_HOLE   0x02 /* de-allocates range */
 
 void usage(void)
 {
-       printf("Usage: fallocate [-nt] [-o offset] -l length filename\n");
+       printf("Usage: fallocate [-npt] [-o offset] -l length filename\n");
        exit(EXIT_FAILURE);
 }
 
@@ -94,12 +95,17 @@ int main(int argc, char **argv)
        int     error;
        int     tflag = 0;
 
-       while ((opt = getopt(argc, argv, "nl:ot")) != -1) {
+       while ((opt = getopt(argc, argv, "npl:o:t")) != -1) {
                switch(opt) {
                case 'n':
                        /* do not change filesize */
                        falloc_mode = FALLOC_FL_KEEP_SIZE;
                        break;
+               case 'p':
+                       /* punch mode */
+                       falloc_mode = (FALLOC_FL_PUNCH_HOLE |
+                                      FALLOC_FL_KEEP_SIZE);
+                       break;
                case 'l':
                        length = cvtnum(optarg);
                        break;
index f89832c..8345fa1 100644 (file)
@@ -1,21 +1,22 @@
 /*
  * readdir accelerator
  *
- * (C) Copyright 2003, 2004 by Theodore Ts'o.
+ * (C) Copyright 2003, 2004, 2008 by Theodore Ts'o.
+ *
+ * 2008-06-08 Modified by Ross Boylan <RossBoylan stanfordalumni org>
+ *    Added support for readdir_r and readdir64_r calls.  Note
+ *     this has not been tested on anything other than GNU/Linux i386,
+ *     and that the regular readdir wrapper will take slightly more
+ *     space than Ted's original since it now includes a lock.
  *
  * Compile using the command:
  *
- * gcc -o spd_readdir.so -fPIC -shared spd_readdir.c -ldl
+ * gcc -o spd_readdir.so -shared -fpic spd_readdir.c -ldl
  *
  * Use it by setting the LD_PRELOAD environment variable:
  * 
  * export LD_PRELOAD=/usr/local/sbin/spd_readdir.so
  *
- * Note that this preload is not going to work for all programs.  In
- * particular, although it does supply readdir_r(), it is *not* thread
- * safe.  So I can't recommend this as something to be dropped in
- * /etc/ld.so.preload.
- *
  * %Begin-Header%
  * This file may be redistributed under the terms of the GNU Public
  * License.
 #define MAX_DIRSIZE    0
 
 #define DEBUG
+/* Util we autoconfiscate spd_readdir... */
+#define HAVE___SECURE_GETENV   1
+#define HAVE_PRCTL             1
+#define HAVE_SYS_PRCTL_H       1
 
 #ifdef DEBUG
 #define DEBUG_DIR(x)   {if (do_debug) { x; }}
 #include <dirent.h>
 #include <errno.h>
 #include <dlfcn.h>
+#ifdef HAVE_SYS_PRCTL_H
+#include <sys/prctl.h>
+#else
+#define PR_GET_DUMPABLE 3
+#endif
+#include <pthread.h>
 
 struct dirent_s {
        unsigned long long d_ino;
@@ -57,6 +68,7 @@ struct dirent_s {
 
 struct dir_s {
        DIR     *dir;
+       pthread_mutex_t lock; /* Mutex lock for this structure.  */
        int     num;
        int     max;
        struct dirent_s *dp;
@@ -74,6 +86,8 @@ static struct dirent *(*real_readdir)(DIR *dir) = 0;
 static int (*real_readdir_r)(DIR *dir, struct dirent *entry,
                             struct dirent **result) = 0;
 static struct dirent64 *(*real_readdir64)(DIR *dir) = 0;
+static int (*real_readdir64_r)(DIR *dir, struct dirent64 *entry,
+                              struct dirent64 **result) = 0;
 static off_t (*real_telldir)(DIR *dir) = 0;
 static void (*real_seekdir)(DIR *dir, off_t offset) = 0;
 static int (*real_dirfd)(DIR *dir) = 0;
@@ -83,6 +97,27 @@ static int num_open = 0;
 static int do_debug = 0;
 #endif
 
+static char *safe_getenv(const char *arg)
+{
+       if ((getuid() != geteuid()) || (getgid() != getegid()))
+               return NULL;
+#if HAVE_PRCTL
+       if (prctl(PR_GET_DUMPABLE, 0, 0, 0, 0) == 0)
+               return NULL;
+#else
+#if (defined(linux) && defined(SYS_prctl))
+       if (syscall(SYS_prctl, PR_GET_DUMPABLE, 0, 0, 0, 0) == 0)
+               return NULL;
+#endif
+#endif
+
+#if HAVE___SECURE_GETENV
+       return __secure_getenv(arg);
+#else
+       return getenv(arg);
+#endif
+}
+
 static void setup_ptr()
 {
        char *cp;
@@ -94,14 +129,15 @@ static void setup_ptr()
        real_readdir = dlsym(RTLD_NEXT, "readdir");
        real_readdir_r = dlsym(RTLD_NEXT, "readdir_r");
        real_readdir64 = dlsym(RTLD_NEXT, "readdir64");
+       real_readdir64_r = dlsym(RTLD_NEXT, "readdir64_r");
        real_telldir = dlsym(RTLD_NEXT, "telldir");
        real_seekdir = dlsym(RTLD_NEXT, "seekdir");
        real_dirfd = dlsym(RTLD_NEXT, "dirfd");
-       if ((cp = getenv("SPD_READDIR_MAX_SIZE")) != NULL) {
+       if ((cp = safe_getenv("SPD_READDIR_MAX_SIZE")) != NULL) {
                max_dirsize = atol(cp);
        }
 #ifdef DEBUG
-       if (getenv("SPD_READDIR_DEBUG")) {
+       if (safe_getenv("SPD_READDIR_DEBUG")) {
                printf("initialized!\n");
                do_debug++;
        }
@@ -112,6 +148,8 @@ static void free_cached_dir(struct dir_s *dirstruct)
 {
        int i;
 
+       pthread_mutex_destroy(&(dirstruct->lock));
+
        if (!dirstruct->dp)
                return;
 
@@ -148,18 +186,21 @@ static int ino_cmp(const void *a, const void *b)
        return (i_a - i_b);
 }
 
-struct dir_s *alloc_dirstruct(DIR *dir)
+static struct dir_s *alloc_dirstruct(DIR *dir)
 {
        struct dir_s    *dirstruct;
+       static pthread_mutexattr_t mutexattr;
+       mutexattr.__align = PTHREAD_MUTEX_RECURSIVE;
 
        dirstruct = malloc(sizeof(struct dir_s));
        if (dirstruct)
                memset(dirstruct, 0, sizeof(struct dir_s));
        dirstruct->dir = dir;
+       pthread_mutex_init(&(dirstruct->lock), &mutexattr);
        return dirstruct;
 }
 
-void cache_dirstruct(struct dir_s *dirstruct)
+static void cache_dirstruct(struct dir_s *dirstruct)
 {
        struct dirent_s *ds, *dnew;
        struct dirent64 *d;
@@ -238,7 +279,7 @@ DIR *fdopendir(int fd)
        if (!real_fdopendir)
                setup_ptr();
 
-       DEBUG_DIR(printf("fdpendir(%d) (%d open)\n", fd, num_open++));
+       DEBUG_DIR(printf("fdopendir(%d) (%d open)\n", fd, num_open++));
        dir = (*real_fdopendir)(fd);
        if (!dir)
                return NULL;
@@ -306,19 +347,19 @@ int readdir_r(DIR *dir, struct dirent *entry, struct dirent **result)
        if (dirstruct->direct)
                return (*real_readdir_r)(dirstruct->dir, entry, result);
 
+       pthread_mutex_lock(&(dirstruct->lock));
        if (dirstruct->pos >= dirstruct->num) {
                *result = NULL;
-               return 0;
+       } else {
+               ds = &dirstruct->dp[dirstruct->pos++];
+               entry->d_ino = ds->d_ino;
+               entry->d_off = ds->d_off;
+               entry->d_reclen = ds->d_reclen;
+               entry->d_type = ds->d_type;
+               strncpy(entry->d_name, ds->d_name, sizeof(entry->d_name));
+               *result = entry;
        }
-
-       ds = &dirstruct->dp[dirstruct->pos++];
-       entry->d_ino = ds->d_ino;
-       entry->d_off = ds->d_off;
-       entry->d_reclen = ds->d_reclen;
-       entry->d_type = ds->d_type;
-       strncpy(entry->d_name, ds->d_name, sizeof(entry->d_name));
-       *result = entry;
-
+       pthread_mutex_unlock(&(dirstruct->lock));
        return 0;
 }
 
@@ -344,6 +385,32 @@ struct dirent64 *readdir64(DIR *dir)
        return (&dirstruct->ret_dir64);
 }
 
+int readdir64_r (DIR *__restrict dir,
+                struct dirent64 *__restrict entry,
+                struct dirent64 **__restrict result)
+{
+       struct dir_s    *dirstruct = (struct dir_s *) dir;
+       struct dirent_s *ds;
+
+       if (dirstruct->direct)
+               return (*real_readdir64_r)(dir, entry, result);
+       pthread_mutex_lock(&(dirstruct->lock));
+       if (dirstruct->pos >= dirstruct->num) {
+               *result = NULL;
+       } else {
+               ds = &dirstruct->dp[dirstruct->pos++];
+               entry->d_ino = ds->d_ino;
+               entry->d_off = ds->d_off;
+               entry->d_reclen = ds->d_reclen;
+               entry->d_type = ds->d_type;
+               strncpy(entry->d_name, ds->d_name,
+                       sizeof(entry->d_name));
+               *result = entry;
+       }
+       pthread_mutex_unlock(&(dirstruct->lock));
+       return 0;
+}
+
 off_t telldir(DIR *dir)
 {
        struct dir_s    *dirstruct = (struct dir_s *) dir;
@@ -374,9 +441,11 @@ void rewinddir(DIR *dir)
        if (dirstruct->direct)
                return;
        
+       pthread_mutex_lock(&(dirstruct->lock));
        dirstruct->pos = 0;
        free_cached_dir(dirstruct);
        cache_dirstruct(dirstruct);
+       pthread_mutex_unlock(&(dirstruct->lock));
 }
 
 int dirfd(DIR *dir)
index a4cb2b4..c54af0d 100644 (file)
@@ -1,3 +1,116 @@
+e2fsprogs (1.42.8-1) unstable; urgency=low
+
+  * New upstream version
+  * Work around Debian Bug #712530 (Closes: #708307)
+  * Fix e2fsck so it can check a read-only root file system with an
+    external journal.  (Closes: #707030)
+  * Fix off-line resizing of file systems with flex_bg && !resize_inode
+    (Closes: #696746)
+  * Change mke2fs so that it does not set the root directory to the real
+    uid/gid of the mke2fs process.  Add the extended option root_owner to
+    override this behavior.
+  * If an invalid journal size is given to mke2fs, it will now complain
+    and exit sooner.
+  * Fix resize2fs when shrinking file systems to make sure that bitmap
+    blocks aren't left outside the bounds of the shrunken file system.
+    This could happen with flex_bg file systems that were grown using
+    the old online resizing algorithm.
+  * E2fsck will now detect and repair corrupted extent trees which contain
+    invalid extents at the end of the extent tree leaf block.
+  * E2fsck will now longer complain about zero length extended attribute values.
+  * Fix a regression introduced in e2fsprogs v1.42 which caused e2image -s
+    to crash.
+  * Add safety check so tune2fs will not attempt to set the inode size to
+    be larger than the block size.
+  * Enhance chattr to allow clearing the extent flag if the kernel allows it
+  * Fix e2image with large (> 32-bit) file systems (Closes: #703067)
+  * Mke2fs will not give warnings about the bigalloc and quota options in
+    quiet mode.
+  * Debugfs was erroneously giving spurious error messages for certain
+    extent_inode subcommands which take arguments (split_node,
+    replace_node, and insert_node).  This has been fixed.
+  * Fix the parsing of the 's' (sectors) in parse_num_blocks2, which among
+    other programs is used by mke2fs.
+  * Fix texinfo incompatibilities (Closes: #712365)
+  * Updated/fixed various man pages  (Closes: #712429, #712430, #707609)
+  * Update German translation
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Thu, 20 Jun 2013 23:09:25 -0500
+
+e2fsprogs (1.42.7-1) unstable; urgency=low
+
+  * New upstream version
+  * Add warning indicating that the quota and bigalloc features are
+    still under development.
+  * Added new options to filefrag to be consistent with the version from
+    Lustre
+  * Optimized e2fsck's CPU utilization
+  * Fixed e2fsck so it detects and fixes inconsistencies in the interior
+    nodes of an inode's extent tree
+  * Fixed a potential memory corruption failure in e2fsck's error path if
+    the call to ext2fs_open2() fails.
+  * Fixed e2fsck if its logging function is enabled in e2fsck.conf, and
+    the resulting file name for the log file is longer than 100 bytes,
+    that it properly handles this situation instead of crashing.
+  * E2fsck will now report the amount of memory that it attempted to
+    allocate when a memory allocation request fails, to make it easier to
+    track down the problem.
+  * Fixed a bug in resize2fs which could cause severe file system
+    corruption when growing an ext4 file system which was formatted with
+    fewer-than-normal reserved gdt blocks
+  * Fixed resize2fs to be able to handle off-line resizes of file
+    systems with the flex_bg feature and without any reserved gdt
+    blocks or if the file system did not have the resize_inode feature
+  * Further optimize resize2fs so it doesn't use quite as much CPU when
+    resizing very large file systems.
+  * Fixed 32-bit overflow bugs which could cause resize2fs to fail and
+    possibly corrupt the file system while resizing 64-bit file systems.
+  * Fixed a big which could cause resize2fs to corrupt bigalloc file systems.
+  * Fix a crash while mke2fs is parsing "-E resize=NNN" with the 64bit
+    file system feature enabled
+  * Added better error checking to mke2fs to check for invalid
+    parameters when creating bigalloc file system.
+  * When creating bigalloc filesystems, the -g option to mke2fs will now
+    specify the number of clusters per block group.
+  * Added the "symlink", "zap_block", "block_dump", and "extent_open"
+    commands to debugfs
+  * Fixed debugfs's htree command so that all its messages are sent
+    through the pager.
+  * Fixed debugfs's dump_file and cat functions so they work correctly
+    on file systems with a block size greater than 8k.
+  * Fixed mke2fs's handling of the mmp_update_interval option
+  * Fixed e2freefrag so it works on 64-bit file systems, and so it uses
+    much less memory.
+  * E2image can now include all data blocks in the e2image output
+    file when the user specifies the -a option.
+  * Fixed debugfs's mknod command so that it updates the block group
+    statistics
+  * Document the bigalloc feature in the mke2fs man page.
+    (Closes: #669730)
+  * Update Czech, Dutch, French, German, Polish, Sweedish, and
+    Vietnamese translations
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Tue, 21 Jan 2013 21:52:58 -0500
+
+e2fsprogs (1.42.6-1) unstable; urgency=low
+
+  * New upstream version
+  * Fix build dependencies to avoid requiring dc, and to allow
+    cross-building to work (Closes: #677497)
+  * Updated/fixed various man pages
+  * Mke2fs will now update its progress indicators at most once a second
+    to avoid overwhelming serial consoles.
+  * Resize2fs will support lazy_itable_init, speeding up off-line growth
+    of uninit_bg file systems.
+  * Resize2fs now supports on-line resizing 64-bit file systems beyond
+    16TB.  A number of bugs in resize2fs which prevented this have been
+    fixed.
+  * Resize2fs now correctly handles resizing 32-bit file systems to 16TB.
+  * Fixed a potential segfault in e2fsck when there is an I/O error
+    while reading the superblock.
+
+ -- Theodore Y. Ts'o <tytso@mit.edu>  Fri, 21 Sep 2012 12:14:41 -0400
+
 e2fsprogs (1.42.5-1.1) unstable; urgency=low
 
   * Non-maintainer upload.
index 292959a..0083b9d 100644 (file)
@@ -9,10 +9,11 @@ Source: e2fsprogs
 Section: admin
 Priority: required
 Maintainer: Theodore Y. Ts'o <tytso@mit.edu>
-Build-Depends: texi2html (>= 1.76), gettext, texinfo, dc, pkg-config, DIETLIBC_DEFINES gcc-multilib [mips mipsel], debhelper (>= 7.0), UTIL_LINUX_NG_DEFINES m4
-Standards-Version: 3.9.3
+Build-Depends: texi2html (>= 1.76), gettext, texinfo, pkg-config, DIETLIBC_DEFINES gcc-multilib [mips mipsel], debhelper (>= 7.0), UTIL_LINUX_NG_DEFINES m4
+Standards-Version: 3.9.4
 Homepage: http://e2fsprogs.sourceforge.net
 
+ifdef(`E2FSCK_STATIC',``
 Package: e2fsck-static
 Priority: optional
 Depends: ${shlibs:Depends}, ${misc:Depends}
@@ -27,6 +28,7 @@ Description: statically-linked version of the ext2/ext3/ext4 filesystem checker
  .
  You may want to install a statically-linked shell as well, to be able
  to run this program if something like your C library gets corrupted.
+'')dnl
 
 Package: libcomerr2
 Section: libs
index a1a66a6..b2cd6c9 100644 (file)
@@ -1,5 +1,7 @@
-usr/lib/*/*.so
-usr/lib/*/*.a
+usr/lib/*/libext2fs*.so
+usr/lib/*/libext2fs*.a
+usr/lib/*/libe2p*.so
+usr/lib/*/libe2p*.a
 usr/include/ext2fs
 usr/include/e2p
 usr/share/info/libext2fs.info*
index 276b4b6..11198f7 100644 (file)
@@ -1,2 +1,2 @@
-lib/*/libext2fs*
-lib/*/libe2p*
+lib/*/libext2fs*.so.*
+lib/*/libe2p*.so.*
index 3417fb8..5784a25 100644 (file)
@@ -82,6 +82,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_bg_itable_unused_set@Base 1.42
  ext2fs_bg_used_dirs_count@Base 1.42
  ext2fs_bg_used_dirs_count_set@Base 1.42
+ ext2fs_bitcount@Base 1.42.7
  ext2fs_blkmap64_bitarray@Base 1.42
  ext2fs_blkmap64_rbtree@Base 1.42.1
  ext2fs_block_alloc_stats2@Base 1.42
@@ -148,12 +149,15 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_expand_dir@Base 1.37
  ext2fs_ext_attr_hash_entry@Base 1.41.0
  ext2fs_extent_delete@Base 1.41.0
+ ext2fs_extent_fix_parents@Base 1.42.7
  ext2fs_extent_free@Base 1.41.0
  ext2fs_extent_get@Base 1.41.0
  ext2fs_extent_get_info@Base 1.41.0
  ext2fs_extent_goto@Base 1.41.0
+ ext2fs_extent_goto2@Base 1.42.7
  ext2fs_extent_header_verify@Base 1.41.0
  ext2fs_extent_insert@Base 1.41.0
+ ext2fs_extent_node_split@Base 1.42.7
  ext2fs_extent_open2@Base 1.41.6
  ext2fs_extent_open@Base 1.41.0
  ext2fs_extent_replace@Base 1.41.0
@@ -348,7 +352,6 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_open_file@Base 1.42
  ext2fs_open_inode_scan@Base 1.37
  ext2fs_parse_version_string@Base 1.37
- ext2fs_print_bmap_statistics@Base 1.42.1
  ext2fs_process_dir_block@Base 1.37
  ext2fs_punch@Base 1.42
  ext2fs_r_blocks_count@Base 1.42
@@ -412,6 +415,7 @@ libext2fs.so.2 e2fslibs #MINVER#
  ext2fs_swab16@Base 1.37
  ext2fs_swab32@Base 1.37
  ext2fs_swab64@Base 1.40
+ ext2fs_symlink@Base 1.42.7
  ext2fs_sync_device@Base 1.37
  ext2fs_tdb_append@Base 1.40
  ext2fs_tdb_chainlock@Base 1.40
index 84dc3f2..7b3da36 100644 (file)
@@ -1,4 +1,4 @@
-usr/lib/*/libblkid*
+usr/lib/*/libblkid*.so.*
 usr/include/blkid
 usr/share/man/man3/libblkid.3
 usr/lib/*/pkgconfig/blkid.pc
index 871d7be..54ef86d 100644 (file)
@@ -1 +1 @@
-lib/*/libblkid*
+lib/*/libblkid*.so.*
index e4e5efc..16b039e 100644 (file)
@@ -1 +1 @@
-lib/*/libcom_err*
+lib/*/libcom_err*.so.*
index e5d8182..386e185 100644 (file)
@@ -1 +1 @@
-lib/*/libss*
+lib/*/libss*.so.*
index 6dc05ce..0761f3b 100644 (file)
@@ -1 +1 @@
-lib/*/libuuid*
+lib/*/libuuid*.so.*
index cf8e070..b1d511f 100755 (executable)
@@ -171,7 +171,9 @@ else
 USRLIB ?= /usr/lib
 endif
 
-STD_CONF_FLAGS ?= --enable-symlink-install $(MULTIARCH_CONF)
+BACKTRACE_CONF_FLAGS ?= $(shell if ${debdir}/scripts/test-backtrace ; then echo --disable-backtrace ; fi)
+
+STD_CONF_FLAGS ?= --enable-symlink-install $(MULTIARCH_CONF) $(BACKTRACE_CONF_FLAGS)
 
 BF_CONF_FLAGS ?= --disable-nls --disable-imager --disable-testio-debug \
        --disable-uuidd --disable-tls --disable-debugfs
@@ -214,6 +216,12 @@ M4_ARGS+=-DDIETLIBC
 WITH_DIET_LIBC = --with-diet-libc 
 endif
 
+ifneq ($(BUILD_E2FSCK_STATIC),no)
+M4_ARGS+=-DE2FSCK_STATIC
+else
+M4_ARGS+=-UE2FSCK_STATIC
+endif
+
 FILES_FIXUP= libcomerr2.files comerr-dev.files libss2.files ss-dev.files \
        libuuid1.files uuid-dev.files libblkid1.files libblkid-dev.files \
        e2fslibs.files e2fslibs-dev.files
@@ -245,11 +253,11 @@ ${CFGSTDSTAMP}:
        mkdir -p ${stdbuilddir}
 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
        cd ${stdbuilddir} && AWK=/usr/bin/awk \
-               ${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \
+               ${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} ${EXTRA_CONF_FLAGS} \
                CFLAGS="${CFLAGS}" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)"
 else
        cd ${stdbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
-               ${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \
+               ${topdir}/configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} ${EXTRA_CONF_FLAGS} \
                --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) \
                CFLAGS="${CFLAGS}" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)"
 endif
@@ -275,11 +283,11 @@ ${CFGBFSTAMP}:
        mkdir -p ${bfbuilddir}
 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
        cd ${bfbuilddir} && AWK=/usr/bin/awk \
-               ${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} \
+               ${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} ${EXTRA_CONF_FLAGS} \
                CFLAGS="${CFLAGS} ${BF_CFLAGS}" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)"
 else
        cd ${bfbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
-               ${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} \
+               ${topdir}/configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} ${EXTRA_CONF_FLAGS} \
                --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) \
                CFLAGS="${CFLAGS}" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)"
 endif
@@ -294,18 +302,18 @@ ${CFGSTATICSTAMP}:
 ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
        if type diet > /dev/null  2>&1 ; then \
                cd ${staticbuilddir} && AWK=/usr/bin/awk \
-               ${topdir}/configure ${STATIC_CONF_FLAGS} \
+               ${topdir}/configure ${STATIC_CONF_FLAGS} ${EXTRA_CONF_FLAGS} \
                ${WITH_DIET_LIBC} CFLAGS="${CFLAGS}" \
                CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)"; \
        else \
                cd ${staticbuilddir} && AWK=/usr/bin/awk \
-                       ${topdir}/configure ${STATIC_CONF_FLAGS} \
+                       ${topdir}/configure ${STATIC_CONF_FLAGS} ${EXTRA_CONF_FLAGS} \
                        CFLAGS="${CFLAGS}" CPPFLAGS="$(CPPFLAGS)" \
                        LDFLAGS="$(LDFLAGS)"; \
        fi
 else
        cd ${staticbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \
-               ${topdir}/configure ${COMMON_CONF_FLAGS} ${STATIC_CONF_FLAGS} \
+               ${topdir}/configure ${COMMON_CONF_FLAGS} ${STATIC_CONF_FLAGS} ${EXTRA_CONF_FLAGS} \
                --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) \
                CFLAGS="${CFLAGS}" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)"
 endif
@@ -320,7 +328,9 @@ build-std: ${BUILDSTDSTAMP}
 ${BUILDSTDSTAMP}: ${CFGSTDSTAMP}
        dh_testdir
        $(MAKE) -C ${stdbuilddir} V=1 all
+ifneq ($(BUILD_E2FSCK_STATIC),no)
        $(MAKE) -C ${stdbuilddir}/e2fsck V=1 e2fsck.static
+endif
        $(MAKE) -C ${stdbuilddir}/po V=1 update-gmo
 
        ( cd ${stdbuilddir}/doc && $(MAKE) V=1 libext2fs_abt.html )
@@ -353,7 +363,9 @@ build-static: ${BUILDSTATICSTAMP}
 ${BUILDSTATICSTAMP}: ${CFGSTATICSTAMP}
        dh_testdir
        $(MAKE) -C ${staticbuilddir} V=1 libs
+ifneq ($(BUILD_E2FSCK_STATIC),no)
        $(MAKE) -C ${staticbuilddir}/e2fsck V=1 all e2fsck.static
+endif
        touch ${BUILDSTATICSTAMP}
 
 clean:
@@ -388,12 +400,15 @@ install-std: build
   # static libs and .h files
        $(MAKE) -C ${stdbuilddir} V=1 install-libs DESTDIR=${tmpdir} LDCONFIG=true
 
+ifneq ($(BUILD_E2FSCK_STATIC),no)
   # statically-linked fsck
        ${INSTALL_PROGRAM} $(E2FSCK_STATIC) ${tmpdir}/sbin
        cp ${mandir}/man8/e2fsck.8 ${mandir}/man8/e2fsck.static.8
+endif
+
   # remove static quota library for now
        rm ${tmpdir}/usr/include/quota/mkquota.h
-       find ${tmpdir}/usr/lib -name quota.pc -o -name libquota.a | xargs rm
+       find ${tmpdir} -name quota.pc -o -name libquota.a | xargs rm
 
 ifeq ($(DEB_BUILD_GNU_SYSTEM), gnu) 
        ${INSTALL} -m 0644 misc/mke2fs-hurd.conf ${tmpdir}/etc/mke2fs.conf
@@ -520,9 +535,12 @@ endif
        DH_OPTIONS= dh_installchangelogs -pe2fsprogs \
                -plibcomerr${COMERR_SOVERSION} \
                -plibss${SS_SOVERSION} \
-               -pe2fslibs -pe2fsck-static \
+               -pe2fslibs \
                -pe2fsprogs-dbg -pe2fslibs-dbg \
                -plibcomerr2-dbg -plibss2-dbg
+ifneq ($(BUILD_E2FSCK_STATIC),no)
+       DH_OPTIONS= dh_installchangelogs -pe2fsck-static
+endif
 ifneq ($(UTIL_LINUX_NG),yes)
        DH_OPTIONS= dh_installchangelogs -plibuuid${UUID_SOVERSION} \
                -puuid-dev -puuid-runtime -puuid-runtime-dbg -plibuuid1-dbg \
@@ -547,9 +565,12 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
        mkdir -p ${debugdir}/$(USRLIB)
        mv ${maindir}/usr/lib/debug ${debugdir}/$(USRLIB)
        rm -rf ${maindir}/usr/lib/debug
+
+ifneq ($(BUILD_E2FSCK_STATIC),no)
        mv ${e2fsckstaticdir}/usr/lib/debug/sbin/* \
                ${debugdir}/$(USRLIB)/debug
        rm -rf ${e2fsckstaticdir}/usr/lib
+endif
 
 ifneq ($(UTIL_LINUX_NG),yes)
        mkdir -p ${uuidruntimedbgdir}/$(USRLIB)
diff --git a/debian/scripts/test-backtrace b/debian/scripts/test-backtrace
new file mode 100755 (executable)
index 0000000..d90486a
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# Test to see if backtrace requires a library in /usr/lib
+# Returns true if the backtrace command works and requires a library in /usr/lib
+# This is a nasty workaround for Debian bug #708307, which is really a glibc bug
+#
+
+cat > /tmp/backtrace$$.c << EOF
+
+#include <execinfo.h>
+
+int main(int argc, char **argv)
+{
+       void *stack_syms[32];
+       int frames;
+
+       frames = backtrace(stack_syms, 32);
+       backtrace_symbols_fd(stack_syms, frames, 0);
+}
+EOF
+
+if ! cc -o /tmp/backtrace$$ /tmp/backtrace$$.c; then
+   exit 1
+fi
+
+if ! ldd /tmp/backtrace$$ > /tmp/backtrace$$.ldd 2>&1 ; then
+   exit 1
+fi
+
+grep -q /usr/lib /tmp/backtrace$$.ldd
+ret=$?
+
+/bin/rm -f /tmp/backtrace$$*
+exit $ret
index 7e71c3f..9a86dc6 100644 (file)
@@ -18,22 +18,29 @@ MK_CMDS=    _SS_DIR_OVERRIDE=../lib/ss ../lib/ss/mk_cmds
 
 DEBUG_OBJS= debug_cmds.o debugfs.o util.o ncheck.o icheck.o ls.o \
        lsdel.o dump.o set_fields.o logdump.o htree.o unused.o e2freefrag.o \
-       filefrag.o
+       filefrag.o extent_cmds.o extent_inode.o zap.o
 
 RO_DEBUG_OBJS= ro_debug_cmds.o ro_debugfs.o util.o ncheck.o icheck.o ls.o \
-       lsdel.o logdump.o htree.o e2freefrag.o filefrag.o
+       lsdel.o logdump.o htree.o e2freefrag.o filefrag.o extent_cmds.o \
+       extent_inode.o
 
 SRCS= debug_cmds.c $(srcdir)/debugfs.c $(srcdir)/util.c $(srcdir)/ls.c \
        $(srcdir)/ncheck.c $(srcdir)/icheck.c $(srcdir)/lsdel.c \
        $(srcdir)/dump.c $(srcdir)/set_fields.c ${srcdir}/logdump.c \
        $(srcdir)/htree.c $(srcdir)/unused.c ${srcdir}/../misc/e2freefrag.c \
-       $(srcdir)/filefrag.c
+       $(srcdir)/filefrag.c $(srcdir)/extent_inode.c $(srcdir)/zap.c
 
 LIBS= $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(LIBBLKID) \
        $(LIBUUID)
 DEPLIBS= $(LIBEXT2FS) $(LIBE2P) $(DEPLIBSS) $(DEPLIBCOM_ERR) \
        $(DEPLIBBLKID) $(DEPLIBUUID)
 
+STATIC_LIBS= $(STATIC_LIBEXT2FS) $(STATIC_LIBSS) $(STATIC_LIBCOM_ERR) \
+       $(STATIC_LIBBLKID) $(STATIC_LIBUUID) $(STATIC_LIBE2P)
+STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBSS) \
+               $(DEPSTATIC_LIBCOM_ERR) $(DEPSTATIC_LIBUUID) \
+               $(DEPSTATIC_LIBE2P)
+
 .c.o:
        $(E) "  CC $<"
        $(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@
@@ -44,6 +51,11 @@ debugfs: $(DEBUG_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o debugfs $(DEBUG_OBJS) $(LIBS)
 
+debugfs.static: $(DEBUG_OBJS) $(STATIC_DEPLIBS)
+       $(E) "  LD $@"
+       $(Q) $(CC) $(LDFLAGS_STATIC) -o debugfs.static $(DEBUG_OBJS) \
+               $(STATIC_LIBS) $(READLINE_LIB)
+
 rdebugfs: $(RO_DEBUG_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o rdebugfs $(RO_DEBUG_OBJS) $(LIBS)
@@ -52,6 +64,10 @@ debug_cmds.c debug_cmds.h: debug_cmds.ct
        $(E) "  MK_CMDS $@"
        $(Q) $(MK_CMDS) $(srcdir)/debug_cmds.ct
 
+extent_cmds.c extent_cmds.h: extent_cmds.ct
+       $(E) "  MK_CMDS $@"
+       $(Q) $(MK_CMDS) $(srcdir)/extent_cmds.ct
+
 ro_debug_cmds.c ro_debug_cmds.h: ro_debug_cmds.ct
        $(E) "  MK_CMDS $@"
        $(Q) $(MK_CMDS) $(srcdir)/ro_debug_cmds.ct
@@ -102,7 +118,7 @@ uninstall:
 
 clean:
        $(RM) -f $(PROGS) debugfs.8 \#* *.s *.o *.a *~ debug_cmds.c \
-               ro_debug_cmds.c core rdebugfs
+               extent_cmds.c ro_debug_cmds.c core rdebugfs debugfs.static
 
 mostlyclean: clean
 distclean: clean
index af969b1..96ff00f 100644 (file)
@@ -160,13 +160,16 @@ request do_bmap, "Calculate the logical->physical block mapping for an inode",
 request do_punch, "Punch (or truncate) blocks from an inode by deallocating them",
        punch, truncate;
 
+request do_symlink, "Create a symbolic link",
+       symlink;
+
 request do_imap, "Calculate the location of an inode",
        imap;
 
 request        do_dump_unused, "Dump unused blocks",
        dump_unused;
 
-request do_set_current_time, "Set current time to use when setting filesystme fields",
+request do_set_current_time, "Set current time to use when setting filesystem fields",
        set_current_time;
 
 request do_supported_features, "Print features supported by this version of e2fsprogs",
@@ -178,5 +181,14 @@ request do_dump_mmp, "Dump MMP information",
 request do_set_mmp_value, "Set MMP value",
        set_mmp_value, smmp;
 
+request do_extent_open, "Open inode for extent manipulation",
+       extent_open, eo;
+
+request do_zap_block, "Zap block: fill with 0, pattern, flip bits etc.",
+       zap_block, zap;
+
+request do_block_dump, "Dump contents of a block",
+       block_dump, bd;
+
 end;
 
index ea3375e..e563b0d 100644 (file)
@@ -168,6 +168,10 @@ Print the physical block number corresponding to the logical block number
 in the inode
 .IR filespec .
 .TP
+.I block_dump [-f out_file] block_num
+Dump the contents of a block, optionally to
+.IR out_file .
+.TP
 .I cat filespec
 Dump the contents of the inode 
 .I filespec
@@ -461,6 +465,9 @@ is, all of the blocks starting at
 .I start_blk
 through to the end of the file will be deallocated.
 .TP
+.I symlink filespec target
+Make a symbolic link.
+.TP
 .I pwd
 Print the current working directory.
 .TP
@@ -604,6 +611,14 @@ Create a file in the filesystem named
 and copy the contents of
 .I source_file
 into the destination file.
+.TP
+.I zap_block [-f file] [-o offset] [-l length] [-p pattern] block_num
+Zero, or pattern-fill, portions of a block within a file or
+within the filesystem.
+.TP
+.I zap_block [-f file] [-b bit] block_num
+Bit-flip portions of a block within a file or
+within the filesystem.
 .SH ENVIRONMENT VARIABLES
 .TP
 .B DEBUGFS_PAGER, PAGER
index cf80bd0..cf559df 100644 (file)
@@ -28,8 +28,6 @@ extern char *optarg;
 #include <sys/types.h>
 #include <sys/stat.h>
 
-#include "et/com_err.h"
-#include "ss/ss.h"
 #include "debugfs.h"
 #include "uuid/uuid.h"
 #include "e2p/e2p.h"
@@ -39,9 +37,9 @@ extern char *optarg;
 #include "../version.h"
 #include "jfs_user.h"
 
-extern ss_request_table debug_cmds;
 ss_request_table *extra_cmds;
 const char *debug_prog_name;
+int sci_idx;
 
 ext2_filsys    current_fs = NULL;
 ext2_ino_t     root, cwd;
@@ -1667,8 +1665,19 @@ void do_write(int argc, char *argv[])
        inode.i_links_count = 1;
        inode.i_size = statbuf.st_size;
        if (current_fs->super->s_feature_incompat &
-           EXT3_FEATURE_INCOMPAT_EXTENTS)
+           EXT3_FEATURE_INCOMPAT_EXTENTS) {
+               int i;
+               struct ext3_extent_header *eh;
+
+               eh = (struct ext3_extent_header *) &inode.i_block[0];
+               eh->eh_depth = 0;
+               eh->eh_entries = 0;
+               eh->eh_magic = EXT3_EXT_MAGIC;
+               i = (sizeof(inode.i_block) - sizeof(*eh)) /
+                       sizeof(struct ext3_extent);
+               eh->eh_max = ext2fs_cpu_to_le16(i);
                inode.i_flags |= EXT4_EXTENTS_FL;
+       }
        if (debugfs_write_new_inode(newfile, &inode, argv[0])) {
                close(fd);
                return;
@@ -1749,8 +1758,7 @@ void do_mknod(int argc, char *argv[])
        }
         if (ext2fs_test_inode_bitmap2(current_fs->inode_map,newfile))
                com_err(argv[0], 0, "Warning: inode already set");
-       ext2fs_mark_inode_bitmap2(current_fs->inode_map, newfile);
-       ext2fs_mark_ib_dirty(current_fs);
+       ext2fs_inode_alloc_stats2(current_fs, newfile, +1, 0);
        memset(&inode, 0, sizeof(inode));
        inode.i_mode = mode;
        inode.i_atime = inode.i_ctime = inode.i_mtime =
@@ -2192,6 +2200,49 @@ void do_punch(int argc, char *argv[])
 }
 #endif /* READ_ONLY */
 
+void do_symlink(int argc, char *argv[])
+{
+       char            *cp;
+       ext2_ino_t      parent;
+       char            *name, *target;
+       errcode_t       retval;
+
+       if (common_args_process(argc, argv, 3, 3, "symlink",
+                               "<filename> <target>", CHECK_FS_RW))
+               return;
+
+       cp = strrchr(argv[1], '/');
+       if (cp) {
+               *cp = 0;
+               parent = string_to_inode(argv[1]);
+               if (!parent) {
+                       com_err(argv[1], ENOENT, 0);
+                       return;
+               }
+               name = cp+1;
+       } else {
+               parent = cwd;
+               name = argv[1];
+       }
+       target = argv[2];
+
+try_again:
+       retval = ext2fs_symlink(current_fs, parent, 0, name, target);
+       if (retval == EXT2_ET_DIR_NO_SPACE) {
+               retval = ext2fs_expand_dir(current_fs, parent);
+               if (retval) {
+                       com_err(argv[0], retval, "while expanding directory");
+                       return;
+               }
+               goto try_again;
+       }
+       if (retval) {
+               com_err("ext2fs_symlink", retval, 0);
+               return;
+       }
+
+}
+
 void do_dump_mmp(int argc EXT2FS_ATTR((unused)), char *argv[])
 {
        struct ext2_super_block *sb;
@@ -2239,7 +2290,7 @@ void do_dump_mmp(int argc EXT2FS_ATTR((unused)), char *argv[])
        fprintf(stdout, "magic: 0x%x\n", mmp_s->mmp_magic);
 }
 
-static int source_file(const char *cmd_file, int sci_idx)
+static int source_file(const char *cmd_file, int ss_idx)
 {
        FILE            *f;
        char            buf[256];
@@ -2270,9 +2321,9 @@ static int source_file(const char *cmd_file, int sci_idx)
                if (cp)
                        *cp = 0;
                printf("debugfs: %s\n", buf);
-               retval = ss_execute_line(sci_idx, buf);
+               retval = ss_execute_line(ss_idx, buf);
                if (retval) {
-                       ss_perror(sci_idx, retval, buf);
+                       ss_perror(ss_idx, retval, buf);
                        exit_status++;
                }
        }
@@ -2284,7 +2335,6 @@ static int source_file(const char *cmd_file, int sci_idx)
 int main(int argc, char **argv)
 {
        int             retval;
-       int             sci_idx;
        const char      *usage = 
                "Usage: %s [-b blocksize] [-s superblock] [-f cmd_file] "
                "[-R request] [-V] ["
index 994577c..45175cf 100644 (file)
@@ -2,6 +2,7 @@
  * debugfs.h --- header file for the debugfs program
  */
 
+#include "ss/ss.h"
 #include "ext2fs/ext2_fs.h"
 #include "ext2fs/ext2fs.h"
 
@@ -21,6 +22,8 @@
 
 extern ext2_filsys current_fs;
 extern ext2_ino_t      root, cwd;
+extern int sci_idx;
+extern ss_request_table debug_cmds, extent_cmds;
 
 extern void reset_getopt(void);
 extern FILE *open_pager(void);
@@ -63,6 +66,32 @@ extern void do_dump(int argc, char **argv);
 extern void do_cat(int argc, char **argv);
 extern void do_rdump(int argc, char **argv);
 
+/* extent_inode.c */
+extern void do_extent_open(int argc, char **argv);
+extern void do_extent_close(int argc, char **argv);
+extern void do_current_node(int argc, char **argv);
+extern void do_root_node(int argc, char **argv);
+extern void do_last_leaf(int argc, char **argv);
+extern void do_first_sib(int argc, char **argv);
+extern void do_last_sib(int argc, char **argv);
+extern void do_next_sib(int argc, char **argv);
+extern void do_prev_sib(int argc, char **argv);
+extern void do_next_leaf(int argc, char **argv);
+extern void do_prev_leaf(int argc, char **argv);
+extern void do_next(int argc, char **argv);
+extern void do_prev(int argc, char **argv);
+extern void do_up(int argc, char **argv);
+extern void do_down(int argc, char **argv);
+extern void do_delete_node(int argc, char **argv);
+extern void do_replace_node(int argc, char **argv);
+extern void do_split_node(int argc, char **argv);
+extern void do_insert_node(int argc, char **argv);
+extern void do_set_bmap(int argc, char **argv);
+extern void do_print_all(int argc, char **argv);
+extern void do_fix_parents(int argc, char **argv);
+extern void do_info(int argc, char **argv);
+extern void do_goto_block(int argc, char **argv);
+
 /* htree.c */
 extern void do_htree_dump(int argc, char **argv);
 extern void do_dx_hash(int argc, char **argv);
@@ -133,9 +162,14 @@ extern void do_imap(int argc, char **argv);
 extern void do_set_current_time(int argc, char **argv);
 extern void do_supported_features(int argc, char **argv);
 extern void do_punch(int argc, char **argv);
+extern void do_symlink(int argc, char **argv);
 
 extern void do_dump_mmp(int argc, char **argv);
 extern void do_set_mmp_value(int argc, char **argv);
 
 extern void do_freefrag(int argc, char **argv);
 extern void do_filefrag(int argc, char *argv[]);
+
+/* zap.c */
+extern void do_zap_block(int argc, char **argv);
+extern void do_block_dump(int argc, char **argv);
index a15a0b7..9409ab6 100644 (file)
@@ -105,10 +105,10 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd,
 {
        errcode_t retval;
        struct ext2_inode       inode;
-       char            buf[8192];
+       char            *buf = 0;
        ext2_file_t     e2_file;
        int             nbytes;
-       unsigned int    got;
+       unsigned int    got, blocksize = current_fs->blocksize;
 
        if (debugfs_read_inode(ino, &inode, cmdname))
                return;
@@ -118,8 +118,13 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd,
                com_err(cmdname, retval, "while opening ext2 file");
                return;
        }
+       retval = ext2fs_get_mem(blocksize, &buf);
+       if (retval) {
+               com_err(cmdname, retval, "while allocating memory");
+               return;
+       }
        while (1) {
-               retval = ext2fs_file_read(e2_file, buf, sizeof(buf), &got);
+               retval = ext2fs_file_read(e2_file, buf, blocksize, &got);
                if (retval)
                        com_err(cmdname, retval, "while reading ext2 file");
                if (got == 0)
@@ -128,6 +133,8 @@ static void dump_file(const char *cmdname, ext2_ino_t ino, int fd,
                if ((unsigned) nbytes != got)
                        com_err(cmdname, errno, "while writing file");
        }
+       if (buf)
+               ext2fs_free_mem(&buf);
        retval = ext2fs_file_close(e2_file);
        if (retval) {
                com_err(cmdname, retval, "while closing ext2 file");
similarity index 91%
rename from lib/ext2fs/extent_dbg.ct
rename to debugfs/extent_cmds.ct
index d0571f4..e1c4395 100644 (file)
@@ -4,9 +4,6 @@
 #
 command_table extent_cmds;
 
-request do_inode, "Open an inode",
-       inode;
-
 request do_current_node, "Current extent node",
        current_node, current;
 
@@ -55,6 +52,9 @@ request do_insert_node, "Insert node",
 request do_split_node, "Split node",
        split_node, split;
 
+request do_fix_parents, "Fix parents",
+       fix_parents, fixp;
+
 request do_set_bmap, "Set block mapping",
        set_bmap;
 
@@ -70,5 +70,8 @@ request do_goto_block, "Goto extent containing specified block",
 request do_info, "Print extent info",
        info;
 
+request do_extent_close, "Close extent handle",
+       extent_close, ec;
+
 end;
 
diff --git a/debugfs/extent_inode.c b/debugfs/extent_inode.c
new file mode 100644 (file)
index 0000000..0bbc4c5
--- /dev/null
@@ -0,0 +1,542 @@
+/*
+ * extent_inode.c --- direct extent tree manipulation
+ *
+ * Copyright (C) 2012 Theodore Ts'o.  This file may be redistributed
+ * under the terms of the GNU Public License.
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#include <sys/types.h>
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#else
+extern int optind;
+extern char *optarg;
+#endif
+
+#include "debugfs.h"
+
+ext2_ino_t     current_ino;
+ext2_extent_handle_t current_handle;
+
+static void dbg_print_extent(char *desc, struct ext2fs_extent *extent)
+{
+       if (desc)
+               printf("%s: ", desc);
+       printf("extent: lblk %llu--%llu, len %u, pblk %llu, flags: ",
+              extent->e_lblk, extent->e_lblk + extent->e_len - 1,
+              extent->e_len, extent->e_pblk);
+       if (extent->e_flags & EXT2_EXTENT_FLAGS_LEAF)
+               fputs("LEAF ", stdout);
+       if (extent->e_flags & EXT2_EXTENT_FLAGS_UNINIT)
+               fputs("UNINIT ", stdout);
+       if (extent->e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT)
+               fputs("2ND_VISIT ", stdout);
+       if (!extent->e_flags)
+               fputs("(none)", stdout);
+       fputc('\n', stdout);
+
+}
+
+static int common_extent_args_process(int argc, char *argv[], int min_argc,
+                                     int max_argc, const char *cmd,
+                                     const char *usage, int flags)
+{
+       if (common_args_process(argc, argv, min_argc, max_argc, cmd,
+                               usage, flags))
+               return 1;
+
+       if (!current_handle) {
+               com_err(cmd, 0, "Extent handle not open");
+               return 1;
+       }
+       return 0;
+}
+
+static char *orig_prompt, *extent_prompt;
+
+void do_extent_open(int argc, char *argv[])
+{
+       ext2_ino_t      inode;
+       int             ret;
+       errcode_t       retval;
+       char            *cp;
+
+       if (check_fs_open(argv[0]))
+               return;
+
+       if (argc == 1) {
+               if (current_ino)
+                       printf("Current inode is %d\n", current_ino);
+               else
+                       printf("No current inode\n");
+               return;
+       }
+
+       if (common_inode_args_process(argc, argv, &inode, 0))
+               return;
+
+       current_ino = 0;
+
+       retval = ext2fs_extent_open(current_fs, inode, &current_handle);
+       if (retval) {
+               com_err(argv[1], retval, "while opening extent handle");
+               return;
+       }
+
+       current_ino = inode;
+
+       orig_prompt = ss_get_prompt(sci_idx);
+       extent_prompt = malloc(strlen(orig_prompt) + 32);
+       strcpy(extent_prompt, orig_prompt);
+       cp = strchr(extent_prompt, ':');
+       if (cp)
+               *cp = 0;
+       sprintf(extent_prompt + strlen(extent_prompt), " (extent ino %d): ",
+               current_ino);
+       ss_add_request_table(sci_idx, &extent_cmds, 1, &ret);
+       ss_set_prompt(sci_idx, extent_prompt);
+       return;
+}
+
+void do_extent_close(int argc, char *argv[])
+{
+       int ret;
+
+       if (common_args_process(argc, argv, 1, 1,
+                               "extent_close", "", 0))
+               return;
+
+       if (!current_handle) {
+               com_err(argv[0], 0, "Extent handle not open");
+               return;
+       }
+
+       ext2fs_extent_free(current_handle);
+       current_handle = NULL;
+       current_ino = 0;
+       ss_delete_request_table(sci_idx, &extent_cmds, &ret);
+       ss_set_prompt(sci_idx, orig_prompt);
+       free(extent_prompt);
+       extent_prompt = NULL;
+}
+
+static void generic_goto_node(const char *my_name, int argc,
+                             char **argv, int op)
+{
+       struct ext2fs_extent    extent;
+       errcode_t               retval;
+
+       if (my_name && common_args_process(argc, argv, 1, 1,
+                                          my_name, "", 0))
+               return;
+
+       if (!current_handle) {
+               com_err(argv[0], 0, "Extent handle not open");
+               return;
+       }
+
+       retval = ext2fs_extent_get(current_handle, op, &extent);
+       if (retval) {
+               com_err(argv[0], retval, 0);
+               return;
+       }
+       dbg_print_extent(0, &extent);
+}
+
+void do_current_node(int argc, char *argv[])
+{
+       generic_goto_node("current_node", argc, argv, EXT2_EXTENT_CURRENT);
+}
+
+void do_root_node(int argc, char *argv[])
+{
+       generic_goto_node("root_node", argc, argv, EXT2_EXTENT_ROOT);
+}
+
+void do_last_leaf(int argc, char *argv[])
+{
+       generic_goto_node("last_leaf", argc, argv, EXT2_EXTENT_LAST_LEAF);
+}
+
+void do_first_sib(int argc, char *argv[])
+{
+       generic_goto_node("first_sib", argc, argv, EXT2_EXTENT_FIRST_SIB);
+}
+
+void do_last_sib(int argc, char *argv[])
+{
+       generic_goto_node("next_sib", argc, argv, EXT2_EXTENT_LAST_SIB);
+}
+
+void do_next_sib(int argc, char *argv[])
+{
+       generic_goto_node("next_sib", argc, argv, EXT2_EXTENT_NEXT_SIB);
+}
+
+void do_prev_sib(int argc, char *argv[])
+{
+       generic_goto_node("prev_sib", argc, argv, EXT2_EXTENT_PREV_SIB);
+}
+
+void do_next_leaf(int argc, char *argv[])
+{
+       generic_goto_node("next_leaf", argc, argv, EXT2_EXTENT_NEXT_LEAF);
+}
+
+void do_prev_leaf(int argc, char *argv[])
+{
+       generic_goto_node("prev_leaf", argc, argv, EXT2_EXTENT_PREV_LEAF);
+}
+
+void do_next(int argc, char *argv[])
+{
+       generic_goto_node("next", argc, argv, EXT2_EXTENT_NEXT);
+}
+
+void do_prev(int argc, char *argv[])
+{
+       generic_goto_node("prev", argc, argv, EXT2_EXTENT_PREV);
+}
+
+void do_up(int argc, char *argv[])
+{
+       generic_goto_node("up", argc, argv, EXT2_EXTENT_UP);
+}
+
+void do_down(int argc, char *argv[])
+{
+       generic_goto_node("down", argc, argv, EXT2_EXTENT_DOWN);
+}
+
+void do_delete_node(int argc, char *argv[])
+{
+       struct ext2fs_extent extent;
+       errcode_t       retval;
+
+       if (common_extent_args_process(argc, argv, 1, 1, "delete_node",
+                                      "", CHECK_FS_RW | CHECK_FS_BITMAPS))
+               return;
+
+       retval = ext2fs_extent_delete(current_handle, 0);
+       if (retval) {
+               com_err(argv[0], retval, 0);
+               return;
+       }
+
+       retval = ext2fs_extent_get(current_handle, EXT2_EXTENT_CURRENT,
+                                  &extent);
+       if (retval)
+               return;
+       dbg_print_extent(0, &extent);
+}
+
+void do_replace_node(int argc, char *argv[])
+{
+       const char      *usage = "[--uninit] <lblk> <len> <pblk>";
+       errcode_t       retval;
+       struct ext2fs_extent extent;
+       int err;
+
+       if (common_extent_args_process(argc, argv, 3, 5, "replace_node",
+                                      usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
+               return;
+
+       extent.e_flags = 0;
+
+       if (!strcmp(argv[1], "--uninit")) {
+               argc--;
+               argv++;
+               extent.e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
+       }
+
+       if (argc != 4) {
+               fprintf(stderr, "Usage: %s %s\n", argv[0], usage);
+               return;
+       }
+
+       extent.e_lblk = parse_ulong(argv[1], argv[0], "logical block", &err);
+       if (err)
+               return;
+
+       extent.e_len = parse_ulong(argv[2], argv[0], "logical block", &err);
+       if (err)
+               return;
+
+       extent.e_pblk = parse_ulong(argv[3], argv[0], "logical block", &err);
+       if (err)
+               return;
+
+       retval = ext2fs_extent_replace(current_handle, 0, &extent);
+       if (retval) {
+               com_err(argv[0], retval, 0);
+               return;
+       }
+       generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT);
+}
+
+void do_split_node(int argc, char *argv[])
+{
+       errcode_t       retval;
+
+       if (common_extent_args_process(argc, argv, 1, 1, "split_node",
+                                      "", CHECK_FS_RW | CHECK_FS_BITMAPS))
+               return;
+
+       retval = ext2fs_extent_node_split(current_handle);
+       if (retval) {
+               com_err(argv[0], retval, 0);
+               return;
+       }
+       generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT);
+}
+
+void do_insert_node(int argc, char *argv[])
+{
+       const char      *usage = "[--after] [--uninit] <lblk> <len> <pblk>";
+       errcode_t       retval;
+       struct ext2fs_extent extent;
+       char *cmd;
+       int err;
+       int flags = 0;
+
+       if (common_extent_args_process(argc, argv, 3, 6, "insert_node",
+                                      usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
+               return;
+
+       cmd = argv[0];
+
+       extent.e_flags = 0;
+
+       while (argc > 2) {
+               if (!strcmp(argv[1], "--after")) {
+                       argc--;
+                       argv++;
+                       flags |= EXT2_EXTENT_INSERT_AFTER;
+                       continue;
+               }
+               if (!strcmp(argv[1], "--uninit")) {
+                       argc--;
+                       argv++;
+                       extent.e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
+                       continue;
+               }
+               break;
+       }
+
+       if (argc != 4) {
+               fprintf(stderr, "usage: %s %s\n", cmd, usage);
+               return;
+       }
+
+       extent.e_lblk = parse_ulong(argv[1], cmd,
+                                   "logical block", &err);
+       if (err)
+               return;
+
+       extent.e_len = parse_ulong(argv[2], cmd,
+                                   "length", &err);
+       if (err)
+               return;
+
+       extent.e_pblk = parse_ulong(argv[3], cmd,
+                                   "pysical block", &err);
+       if (err)
+               return;
+
+       retval = ext2fs_extent_insert(current_handle, flags, &extent);
+       if (retval) {
+               com_err(cmd, retval, 0);
+               return;
+       }
+       generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT);
+}
+
+void do_set_bmap(int argc, char **argv)
+{
+       const char      *usage = "[--uninit] <lblk> <pblk>";
+       struct ext2fs_extent extent;
+       errcode_t       retval;
+       blk_t           logical;
+       blk_t           physical;
+       char            *cmd = argv[0];
+       int             flags = 0;
+       int             err;
+
+       if (common_extent_args_process(argc, argv, 3, 5, "set_bmap",
+                                      usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
+               return;
+
+       if (argc > 2 && !strcmp(argv[1], "--uninit")) {
+               argc--;
+               argv++;
+               flags |= EXT2_EXTENT_SET_BMAP_UNINIT;
+       }
+
+       if (argc != 3) {
+               fprintf(stderr, "Usage: %s %s\n", cmd, usage);
+               return;
+       }
+
+       logical = parse_ulong(argv[1], cmd,
+                                   "logical block", &err);
+       if (err)
+               return;
+
+       physical = parse_ulong(argv[2], cmd,
+                                   "physical block", &err);
+       if (err)
+               return;
+
+       retval = ext2fs_extent_set_bmap(current_handle, logical,
+                                       (blk64_t) physical, flags);
+       if (retval) {
+               com_err(cmd, retval, 0);
+               return;
+       }
+
+       retval = ext2fs_extent_get(current_handle, EXT2_EXTENT_CURRENT,
+                                  &extent);
+       if (retval)
+               return;
+       dbg_print_extent(0, &extent);
+}
+
+void do_print_all(int argc, char **argv)
+{
+       const char      *usage = "[--leaf-only|--reverse|--reverse-leaf]";
+       struct ext2fs_extent    extent;
+       errcode_t               retval;
+       errcode_t               end_err = EXT2_ET_EXTENT_NO_NEXT;
+       int                     op = EXT2_EXTENT_NEXT;
+       int                     first_op = EXT2_EXTENT_ROOT;
+
+
+       if (common_extent_args_process(argc, argv, 1, 2, "print_all",
+                                      usage, 0))
+               return;
+
+       if (argc == 2) {
+               if (!strcmp(argv[1], "--leaf-only"))
+                       op = EXT2_EXTENT_NEXT_LEAF;
+               else if (!strcmp(argv[1], "--reverse")) {
+                       op = EXT2_EXTENT_PREV;
+                       first_op = EXT2_EXTENT_LAST_LEAF;
+                       end_err = EXT2_ET_EXTENT_NO_PREV;
+               } else if (!strcmp(argv[1], "--reverse-leaf")) {
+                       op = EXT2_EXTENT_PREV_LEAF;
+                       first_op = EXT2_EXTENT_LAST_LEAF;
+                       end_err = EXT2_ET_EXTENT_NO_PREV;
+               } else {
+                       fprintf(stderr, "Usage: %s %s\n", argv[0], usage);
+                       return;
+               }
+       }
+
+       retval = ext2fs_extent_get(current_handle, first_op, &extent);
+       if (retval) {
+               com_err(argv[0], retval, 0);
+               return;
+       }
+       dbg_print_extent(0, &extent);
+
+       while (1) {
+               retval = ext2fs_extent_get(current_handle, op, &extent);
+               if (retval == end_err)
+                       break;
+
+               if (retval) {
+                       com_err(argv[0], retval, 0);
+                       return;
+               }
+               dbg_print_extent(0, &extent);
+       }
+}
+
+void do_fix_parents(int argc, char **argv)
+{
+       errcode_t               retval;
+
+       if (common_extent_args_process(argc, argv, 1, 1, "fix_parents", "",
+                                      CHECK_FS_RW))
+               return;
+
+       retval = ext2fs_extent_fix_parents(current_handle);
+       if (retval) {
+               com_err(argv[0], retval, 0);
+               return;
+       }
+}
+
+void do_info(int argc, char **argv)
+{
+       struct ext2fs_extent    extent;
+       struct ext2_extent_info info;
+       errcode_t               retval;
+
+       if (common_extent_args_process(argc, argv, 1, 1, "info", "", 0))
+               return;
+
+       retval = ext2fs_extent_get_info(current_handle, &info);
+       if (retval) {
+               com_err(argv[0], retval, 0);
+               return;
+       }
+
+       retval = ext2fs_extent_get(current_handle,
+                                  EXT2_EXTENT_CURRENT, &extent);
+       if (retval) {
+               com_err(argv[0], retval, 0);
+               return;
+       }
+
+       dbg_print_extent(0, &extent);
+
+       printf("Current handle location: %d/%d (max: %d, bytes %d), level %d/%d\n",
+              info.curr_entry, info.num_entries, info.max_entries,
+              info.bytes_avail, info.curr_level, info.max_depth);
+       printf("\tmax lblk: %llu, max pblk: %llu\n", info.max_lblk,
+              info.max_pblk);
+       printf("\tmax_len: %u, max_uninit_len: %u\n", info.max_len,
+              info.max_uninit_len);
+}
+
+void do_goto_block(int argc, char **argv)
+{
+       errcode_t               retval;
+       blk64_t                 blk;
+       int                     level = 0, err;
+
+       if (common_extent_args_process(argc, argv, 2, 3, "goto_block",
+                                      "block [level]", 0))
+               return;
+
+       if (strtoblk(argv[0], argv[1], &blk))
+               return;
+
+       if (argc == 3) {
+               level = parse_ulong(argv[2], argv[0], "level", &err);
+               if (err)
+                       return;
+       }
+
+       retval = ext2fs_extent_goto2(current_handle, level, (blk64_t) blk);
+
+       if (retval) {
+               com_err(argv[0], retval,
+                       "while trying to go to block %llu, level %d",
+                       (unsigned long long) blk, level);
+               return;
+       }
+
+       generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT);
+}
index 05745eb..24f8250 100644 (file)
@@ -52,7 +52,7 @@ static void htree_dump_leaf_node(ext2_filsys fs, ext2_ino_t ino,
                return;
        }
 
-       printf("Reading directory block %llu, phys %llu\n", blk, pblk);
+       fprintf(pager, "Reading directory block %llu, phys %llu\n", blk, pblk);
        errcode = ext2fs_read_dir_block2(current_fs, pblk, buf, 0);
        if (errcode) {
                com_err("htree_dump_leaf_node", errcode,
@@ -201,7 +201,6 @@ void do_htree_dump(int argc, char *argv[])
        char            *buf = NULL;
        struct          ext2_dx_root_info  *rootnode;
        struct          ext2_dx_entry *ent;
-       struct          ext2_dx_countlimit *limit;
        errcode_t       errcode;
 
        if (check_fs_open(argv[0]))
@@ -255,7 +254,6 @@ void do_htree_dump(int argc, char *argv[])
        fprintf(pager, "\t Flags: %d\n", rootnode->unused_flags);
 
        ent = (struct ext2_dx_entry *) (buf + 24 + rootnode->info_length);
-       limit = (struct ext2_dx_countlimit *) ent;
 
        htree_dump_int_node(current_fs, ino, &inode, rootnode, ent,
                            buf + current_fs->blocksize,
index 4feb621..8226d1a 100644 (file)
@@ -87,5 +87,8 @@ request do_supported_features, "Print features supported by this version of e2fs
 request do_dump_mmp, "Dump MMP information",
        dump_mmp;
 
+request do_extent_open, "Open inode for extent manipulation",
+       extent_open, eo;
+
 end;
 
index 08bfd8d..5c86d74 100644 (file)
@@ -389,7 +389,10 @@ static errcode_t parse_uint(struct field_set_info *info, char *field,
        n = num & mask;
        switch (size) {
        case 8:
-               *u.ptr64 = n;
+               /* Should never get here */
+               fprintf(stderr, "64-bit field %s has a second 64-bit field\n"
+                       "defined; BUG?!?\n", info->name);
+               *u.ptr64 = 0;
                break;
        case 4:
                *u.ptr32 = n;
diff --git a/debugfs/zap.c b/debugfs/zap.c
new file mode 100644 (file)
index 0000000..ba205a1
--- /dev/null
@@ -0,0 +1,261 @@
+/*
+ * zap.c --- zap block
+ *
+ * Copyright (C) 2012 Theodore Ts'o.  This file may be redistributed
+ * under the terms of the GNU Public License.
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#include <sys/types.h>
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#else
+extern int optind;
+extern char *optarg;
+#endif
+
+#include "debugfs.h"
+
+void do_zap_block(int argc, char *argv[])
+{
+       unsigned long   pattern = 0;
+       unsigned char   *buf;
+       ext2_ino_t      inode;
+       errcode_t       errcode;
+       blk64_t         block;
+       char            *file = NULL;
+       int             c, err;
+       int             offset = -1;
+       int             length = -1;
+       int             bit = -1;
+
+       if (check_fs_open(argv[0]))
+               return;
+       if (check_fs_read_write(argv[0]))
+               return;
+
+       reset_getopt();
+       while ((c = getopt (argc, argv, "b:f:l:o:p:")) != EOF) {
+               switch (c) {
+               case 'f':
+                       file = optarg;
+                       break;
+               case 'b':
+                       bit = parse_ulong(optarg, argv[0],
+                                         "bit", &err);
+                       if (err)
+                               return;
+                       if (bit >= (int) current_fs->blocksize * 8) {
+                               com_err(argv[0], 0, "The bit to flip "
+                                       "must be within a %d block\n",
+                                       current_fs->blocksize);
+                               return;
+                       }
+                       break;
+               case 'p':
+                       pattern = parse_ulong(optarg, argv[0],
+                                             "pattern", &err);
+                       if (err)
+                               return;
+                       if (pattern >= 256) {
+                               com_err(argv[0], 0, "The fill pattern must "
+                                       "be an 8-bit value\n");
+                               return;
+                       }
+                       break;
+               case 'o':
+                       offset = parse_ulong(optarg, argv[0],
+                                            "offset", &err);
+                       if (err)
+                               return;
+                       if (offset >= (int) current_fs->blocksize) {
+                               com_err(argv[0], 0, "The offset must be "
+                                       "within a %d block\n",
+                                       current_fs->blocksize);
+                               return;
+                       }
+                       break;
+
+                       break;
+               case 'l':
+                       length = parse_ulong(optarg, argv[0],
+                                            "length", &err);
+                       if (err)
+                               return;
+                       break;
+               default:
+                       goto print_usage;
+               }
+       }
+
+       if (bit > 0 && offset > 0) {
+               com_err(argv[0], 0, "The -o and -b options can not be mixed.");
+               return;
+       }
+
+       if (offset < 0)
+               offset = 0;
+       if (length < 0)
+               length = current_fs->blocksize - offset;
+       if ((offset + length) > (int) current_fs->blocksize) {
+               com_err(argv[0], 0, "The specified length is too bug\n");
+               return;
+       }
+
+       if (argc != optind+1) {
+       print_usage:
+               com_err(0, 0, "Usage:\tzap_block [-f file] [-o offset] "
+                       "[-l length] [-p pattern] block_num");
+               com_err(0, 0, "\tzap_block [-f file] [-b bit] "
+                       "block_num");
+               return;
+       }
+
+       block = parse_ulonglong(argv[optind], argv[0], "block", &err);
+       if (err)
+               return;
+
+       if (file) {
+               inode = string_to_inode(file);
+               if (!inode)
+                       return;
+               errcode = ext2fs_bmap2(current_fs, inode, 0, 0, 0,
+                                      block, 0, &block);
+               if (errcode) {
+                       com_err(argv[0], errcode,
+                               "while mapping logical block %llu\n", block);
+                       return;
+               }
+       }
+
+       buf = malloc(current_fs->blocksize);
+       if (!buf) {
+               com_err(argv[0], 0, "Couldn't allocate block buffer");
+               return;
+       }
+
+       errcode = io_channel_read_blk64(current_fs->io, block, 1, buf);
+       if (errcode) {
+               com_err(argv[0], errcode,
+                       "while reading block %llu\n", block);
+               goto errout;
+       }
+
+       if (bit >= 0)
+               buf[bit >> 3] ^= 1 << (bit & 7);
+       else
+               memset(buf+offset, pattern, length);
+
+       errcode = io_channel_write_blk64(current_fs->io, block, 1, buf);
+       if (errcode) {
+               com_err(argv[0], errcode,
+                       "while write block %llu\n", block);
+               goto errout;
+       }
+
+errout:
+       free(buf);
+       return;
+}
+
+void do_block_dump(int argc, char *argv[])
+{
+       unsigned char   *buf;
+       ext2_ino_t      inode;
+       errcode_t       errcode;
+       blk64_t         block;
+       char            *file = NULL;
+       unsigned int    i, j;
+       int             c, err;
+       int             suppress = -1;
+
+       if (check_fs_open(argv[0]))
+               return;
+
+       reset_getopt();
+       while ((c = getopt (argc, argv, "f:")) != EOF) {
+               switch (c) {
+               case 'f':
+                       file = optarg;
+                       break;
+
+               default:
+                       goto print_usage;
+               }
+       }
+
+       if (argc != optind+1) {
+       print_usage:
+               com_err(0, 0, "Usage: dump_block [-f file] "
+                       " block_num");
+               return;
+       }
+
+       block = parse_ulonglong(argv[optind], argv[0], "block", &err);
+       if (err)
+               return;
+
+       if (file) {
+               inode = string_to_inode(file);
+               if (!inode)
+                       return;
+               errcode = ext2fs_bmap2(current_fs, inode, 0, 0, 0,
+                                      block, 0, &block);
+               if (errcode) {
+                       com_err(argv[0], errcode,
+                               "while mapping logical block %llu\n", block);
+                       return;
+               }
+       }
+
+       buf = malloc(current_fs->blocksize);
+       if (!buf) {
+               com_err(argv[0], 0, "Couldn't allocate block buffer");
+               return;
+       }
+
+       errcode = io_channel_read_blk64(current_fs->io, block, 1, buf);
+       if (errcode) {
+               com_err(argv[0], errcode,
+                       "while reading block %llu\n", block);
+               goto errout;
+       }
+
+       for (i=0; i < current_fs->blocksize; i += 16) {
+               if (suppress < 0) {
+                       if (i && memcmp(buf + i, buf + i - 16, 16) == 0) {
+                               suppress = i;
+                               printf("*\n");
+                               continue;
+                       }
+               } else {
+                       if (memcmp(buf + i, buf + suppress, 16) == 0)
+                               continue;
+                       suppress = -1;
+               }
+               printf("%04o  ", i);
+               for (j = 0; j < 16; j++) {
+                       printf("%02x", buf[i+j]);
+                       if ((j % 2) == 1)
+                               putchar(' ');
+               }
+               putchar(' ');
+               for (j = 0; j < 16; j++)
+                       printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
+               putchar('\n');
+       }
+       putchar('\n');
+
+errout:
+       free(buf);
+       return;
+}
index 3398d5f..d7cb6c3 100644 (file)
@@ -15,6 +15,7 @@ DVI=texi2dvi
 DVIPS=dvips -o "$@"
 INFO=@MAKEINFO@
 HTML=texi2html -split_chapter
+PS2PDF=ps2pdf
 
 all:: libext2fs.info libext2fs.dvi
 
@@ -40,6 +41,14 @@ libext2fs.dvi: $(srcdir)/libext2fs.texinfo
        $(E) "  TEXI2DVI $@"
        -$(Q) $(DVI) $(srcdir)/libext2fs.texinfo
 
+libext2fs.ps: libext2fs.dvi
+       $(E) "  DVIPS $@"
+       -$(Q) $(DVIPS) libext2fs.dvi
+
+libext2fs.pdf: libext2fs.ps
+       $(E) "  PS2PDF $@"
+       -$(Q) $(PS2PDF) libext2fs.ps
+
 libext2fs_abt.html: $(srcdir)/libext2fs.texinfo
        $(E) "  TEXI2HTML $@"
        -$(Q) $(HTML) $(srcdir)/libext2fs.texinfo
@@ -59,7 +68,7 @@ clean-all:: clean-tex clean-backup clean-final clean-tarfiles clean-html
 
 .PHONY: clean-final
 clean-final::
-       $(RM) -f *.ps *.info *.info-? *.html
+       $(RM) -f *.ps *.info *.info-? *.html *.pdf
 
 .PHONY: clean-tex
 clean-tex::
index 9d8e7f1..768b1de 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo    @c -*-texinfo-*-
 @c %**start of header
 @setfilename libext2fs.info
-@settitle The EXT2FS Library (version 1.42.5)
+@settitle The EXT2FS Library (version 1.42.8)
 @synindex tp fn
 @comment %**end of header
 
@@ -30,7 +30,7 @@ This file documents the ext2fs library, a library for manipulating the
 ext2 filesystem.
 
 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-2006, 2007, 2008, 2009, 2010, 2011, 2012 by Theodore Ts'o
+2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 by Theodore Ts'o
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -60,8 +60,8 @@ by the author.
 
 @title The EXT2FS Library
 @subtitle The EXT2FS Library
-@subtitle Version 1.42.5
-@subtitle July 2012
+@subtitle Version 1.42.8
+@subtitle June 2013
 
 @author by Theodore Ts'o
 
@@ -77,7 +77,7 @@ by the author.
 @page
 @vskip 0pt plus 1filll
 Copyright @copyright{} 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Theodore Ts'o
+2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Theodore Ts'o
 
 @sp 2
 
@@ -102,9 +102,7 @@ by the Foundation.
 
 @top The EXT2FS Library
 
-This manual documents the EXT2FS Library, version 1.42.5.
-
-@end ifinfo
+This manual documents the EXT2FS Library, version 1.42.8.
 
 @menu
 * Introduction to the EXT2FS Library::  
@@ -113,6 +111,8 @@ This manual documents the EXT2FS Library, version 1.42.5.
 * Function Index::              
 @end menu
 
+@end ifinfo
+
 @c ----------------------------------------------------------------------
 
 @node Introduction to the EXT2FS Library, EXT2FS Library Functions, Top, Top
@@ -767,7 +767,7 @@ to initialize directory entries for @file{.} and @file{..}, respectively.
 
 @deftypefun errcode_t ext2fs_dir_iterate (ext2_filsys @var{fs}, ext2_ino_t @var{dir}, int @var{flags}, char *@var{block_buf}, int (*@var{func})(struct ext2_dir_entry *@var{dirent}, int @var{offset}, int @var{blocksize}, char *@var{buf}, void *@var{private}), void *@var{private})
 
-This function interates over all of the directory entries in the
+This function iterates over all of the directory entries in the
 directory @var{dir}, calling the callback function @var{func} for each
 directory entry in the directory.  The @var{block_buf} parameter should
 either be NULL, or if the @code{ext2fs_dir_iterate} function is 
index a52bbe1..eadd5ea 100644 (file)
@@ -28,7 +28,7 @@ STATIC_DEPLIBS= $(DEPSTATIC_LIBQUOTA) $(STATIC_LIBEXT2FS) \
 
 PROFILED_LIBS= $(PROFILED_LIBQUOTA) $(PROFILED_LIBEXT2FS) \
               $(PROFILED_LIBCOM_ERR) $(PROFILED_LIBBLKID) $(PROFILED_LIBUUID) \
-              $(PROFILED_LIBE2P) $(LIBINTL) \
+              $(PROFILED_LIBE2P) $(LIBINTL)
 PROFILED_DEPLIBS= $(DEPPROFILED_LIBQUOTA) $(PROFILED_LIBEXT2FS) \
                  $(DEPPROFILED_LIBCOM_ERR) $(DEPPROFILED_LIBBLKID) \
                  $(DEPPROFILED_LIBUUID) $(DEPPROFILED_LIBE2P)
@@ -129,7 +129,7 @@ e2fsck.static: $(OBJS) $(STATIC_DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(LD) $(LDFLAGS_STATIC) -o e2fsck.static $(OBJS) $(STATIC_LIBS) 
 
-e2fsck.profiled: $(PROFILED_OBJS)  $(PROFILED_DEPLIBS)
+e2fsck.profiled: $(OBJS)  $(PROFILED_DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(LD) $(ALL_LDFLAGS) -g -pg -o e2fsck.profiled $(PROFILED_OBJS) \
                $(PROFILED_LIBS) 
@@ -143,7 +143,8 @@ crc32table.h: gen_crc32table
        $(E) "  GEN32TABLE $@"
        $(Q) ./gen_crc32table > crc32table.h
 
-tst_sigcatcher: $(srcdir)/sigcatcher.c
+tst_sigcatcher: $(srcdir)/sigcatcher.c sigcatcher.o
+       $(E) "  CC $@"
        $(Q) $(CC) $(BUILD_LDFLAGS) $(ALL_CFLAGS) $(RDYNAMIC) \
                $(srcdir)/sigcatcher.c -DDEBUG -o tst_sigcatcher
 
index 6eecf33..6dddf9c 100644 (file)
@@ -60,7 +60,7 @@ static errcode_t e2fsck_handle_read_error(io_channel channel,
        preenhalt(ctx);
        if (ask(ctx, _("Ignore error"), 1)) {
                if (ask(ctx, _("Force rewrite"), 1))
-                       io_channel_write_blk64(channel, block, 1, data);
+                       io_channel_write_blk64(channel, block, count, data);
                return 0;
        }
 
index 92f8ae2..bfc1bcd 100644 (file)
@@ -75,20 +75,31 @@ typedef __u64 __be64;
  * We use the standard libext2fs portability tricks for inline
  * functions.
  */
+#ifdef NO_INLINE_FUNCS
 extern lkmem_cache_t * do_cache_create(int len);
 extern void do_cache_destroy(lkmem_cache_t *cache);
 extern size_t journal_tag_bytes(journal_t *journal);
+#endif
 
 #if (defined(E2FSCK_INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
 #ifdef E2FSCK_INCLUDE_INLINE_FUNCS
-#define _INLINE_ extern
+#if (__STDC_VERSION__ >= 199901L)
+#define _INLINE_ extern inline
 #else
+#define _INLINE_ inline
+#endif
+#else /* !E2FSCK_INCLUDE_INLINE FUNCS */
+#if (__STDC_VERSION__ >= 199901L)
+#define _INLINE_ inline
+#else /* not C99 */
 #ifdef __GNUC__
 #define _INLINE_ extern __inline__
 #else                          /* For Watcom C */
 #define _INLINE_ extern inline
-#endif
-#endif
+#endif /* __GNUC__ */
+#endif /* __STDC_VERSION__ >= 199901L */
+#endif /* E2FSCK_INCLUDE_INLINE_FUNCS */
+
 
 _INLINE_ lkmem_cache_t * do_cache_create(int len)
 {
index 767ea10..6908aec 100644 (file)
@@ -314,7 +314,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
                                               BLOCK_FLAG_HOLE, 0,
                                               process_journal_block, &pb);
                if ((pb.last_block + 1) * ctx->fs->blocksize <
-                   EXT2_I_SIZE(&j_inode->i_ext2)) {
+                   (int) EXT2_I_SIZE(&j_inode->i_ext2)) {
                        retval = EXT2_ET_JOURNAL_TOO_SMALL;
                        goto try_backup_journal;
                }
@@ -372,9 +372,19 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal)
 #ifndef USE_INODE_IO
        if (ext_journal)
 #endif
-               retval = io_ptr->open(journal_name,
-                                     IO_FLAG_RW | IO_FLAG_EXCLUSIVE,
+       {
+               int flags = IO_FLAG_RW;
+               if (!(ctx->mount_flags & EXT2_MF_ISROOT &&
+                     ctx->mount_flags & EXT2_MF_READONLY))
+                       flags |= IO_FLAG_EXCLUSIVE;
+               if ((ctx->mount_flags & EXT2_MF_READONLY) &&
+                   (ctx->options & E2F_OPT_FORCE))
+                       flags &= ~IO_FLAG_EXCLUSIVE;
+
+
+               retval = io_ptr->open(journal_name, flags,
                                      &ctx->journal_io);
+       }
        if (retval)
                goto errout;
 
index 9229fbf..c48b8eb 100644 (file)
@@ -36,19 +36,25 @@ static void alloc_string(struct string *s, int len)
 
 static void append_string(struct string *s, const char *a, int len)
 {
+       int needlen;
+
        if (!len)
                len = strlen(a);
 
-       if (s->end + len >= s->len) {
-               char *n = realloc(s, s->len * 2);
+       needlen = s->end + len + 1;
+       if (needlen > s->len) {
+               char *n;
+
+               if (s->len * 2 > needlen)
+                       needlen = s->len * 2;
+               n = realloc(s->s, needlen);
 
                if (n) {
                        s->s = n;
-                       s->len = s->len * 2;
+                       s->len = needlen;
                } else {
-                       len = s->len - s->end - 1;
-                       if (len <= 0)
-                               return;
+                       /* Don't append if we ran out of memory */
+                       return;
                }
        }
        memcpy(s->s + s->end, a, len);
index 980dc4b..b99473d 100644 (file)
@@ -197,7 +197,7 @@ static void safe_print(FILE *f, const char *cp, int len)
 static void print_pathname(FILE *f, ext2_filsys fs, ext2_ino_t dir,
                           ext2_ino_t ino)
 {
-       errcode_t       retval;
+       errcode_t       retval = 0;
        char            *path;
 
        if (!dir && (ino < num_special_inodes)) {
@@ -361,8 +361,7 @@ static _INLINE_ void expand_dirent_expression(FILE *f, ext2_filsys fs, char ch,
                                              struct problem_context *ctx)
 {
        struct ext2_dir_entry   *dirent;
-       unsigned int rec_len;
-       int     len;
+       unsigned int rec_len, len;
 
        if (!ctx || !ctx->dirent)
                goto no_dirent;
index 78fbe8d..8f2f961 100644 (file)
@@ -274,7 +274,7 @@ static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx)
        struct ext2_super_block *sb = ctx->fs->super;
        struct ext2_inode_large *inode;
        struct ext2_ext_attr_entry *entry;
-       char *start, *end;
+       char *start;
        unsigned int storage_size, remain;
        int problem = 0;
 
@@ -283,7 +283,6 @@ static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx)
                inode->i_extra_isize;
        start = ((char *) inode) + EXT2_GOOD_OLD_INODE_SIZE +
                inode->i_extra_isize + sizeof(__u32);
-       end = (char *) inode + EXT2_INODE_SIZE(ctx->fs->super);
        entry = (struct ext2_ext_attr_entry *) start;
 
        /* scan all entry's headers first */
@@ -308,7 +307,7 @@ static void check_ea_in_inode(e2fsck_t ctx, struct problem_context *pctx)
                remain -= EXT2_EXT_ATTR_SIZE(entry->e_name_len);
 
                /* check value size */
-               if (entry->e_value_size == 0 || entry->e_value_size > remain) {
+               if (entry->e_value_size > remain) {
                        pctx->num = entry->e_value_size;
                        problem = PR_1_ATTR_VALUE_SIZE;
                        goto fix;
@@ -1432,6 +1431,16 @@ static _INLINE_ void mark_block_used(e2fsck_t ctx, blk64_t block)
        }
 }
 
+static _INLINE_ void mark_blocks_used(e2fsck_t ctx, blk64_t block,
+                                     unsigned int num)
+{
+       if (ext2fs_test_block_bitmap_range2(ctx->block_found_map, block, num))
+               ext2fs_mark_block_bitmap_range2(ctx->block_found_map, block, num);
+       else
+               while (num--)
+                       mark_block_used(ctx, block++);
+}
+
 /*
  * Adjust the extended attribute block's reference counts at the end
  * of pass 1, either by subtracting out references for EA blocks that
@@ -1751,11 +1760,11 @@ void e2fsck_clear_inode(e2fsck_t ctx, ext2_ino_t ino,
 
 static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                             struct process_block_struct *pb,
-                            blk64_t start_block,
+                            blk64_t start_block, blk64_t end_block,
                             ext2_extent_handle_t ehandle)
 {
        struct ext2fs_extent    extent;
-       blk64_t                 blk;
+       blk64_t                 blk, last_lblk;
        e2_blkcnt_t             blockcnt;
        unsigned int            i;
        int                     is_dir, is_leaf;
@@ -1771,6 +1780,7 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
        while (!pctx->errcode && info.num_entries-- > 0) {
                is_leaf = extent.e_flags & EXT2_EXTENT_FLAGS_LEAF;
                is_dir = LINUX_S_ISDIR(pctx->inode->i_mode);
+               last_lblk = extent.e_lblk + extent.e_len - 1;
 
                problem = 0;
                if (extent.e_pblk == 0 ||
@@ -1779,18 +1789,25 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                        problem = PR_1_EXTENT_BAD_START_BLK;
                else if (extent.e_lblk < start_block)
                        problem = PR_1_OUT_OF_ORDER_EXTENTS;
+               else if (end_block && last_lblk > end_block)
+                       problem = PR_1_EXTENT_END_OUT_OF_BOUNDS;
                else if (is_leaf && extent.e_len == 0)
                        problem = PR_1_EXTENT_LENGTH_ZERO;
                else if (is_leaf &&
                         (extent.e_pblk + extent.e_len) >
                         ext2fs_blocks_count(ctx->fs->super))
                        problem = PR_1_EXTENT_ENDS_BEYOND;
+               else if (is_leaf && is_dir &&
+                        ((extent.e_lblk + extent.e_len) >
+                         (1 << (21 - ctx->fs->super->s_log_block_size))))
+                       problem = PR_1_TOOBIG_DIR;
 
                if (problem) {
-               report_problem:
+report_problem:
                        pctx->blk = extent.e_pblk;
                        pctx->blk2 = extent.e_lblk;
                        pctx->num = extent.e_len;
+                       pctx->blkcount = extent.e_lblk + extent.e_len;
                        if (fix_problem(ctx, problem, pctx)) {
                                e2fsck_read_bitmaps(ctx);
                                pctx->errcode =
@@ -1799,6 +1816,7 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                                        pctx->str = "ext2fs_extent_delete";
                                        return;
                                }
+                               ext2fs_extent_fix_parents(ehandle);
                                pctx->errcode = ext2fs_extent_get(ehandle,
                                                                  EXT2_EXTENT_CURRENT,
                                                                  &extent);
@@ -1812,6 +1830,8 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                }
 
                if (!is_leaf) {
+                       blk64_t lblk = extent.e_lblk;
+
                        blk = extent.e_pblk;
                        pctx->errcode = ext2fs_extent_get(ehandle,
                                                  EXT2_EXTENT_DOWN, &extent);
@@ -1822,7 +1842,20 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                                        goto report_problem;
                                return;
                        }
-                       scan_extent_node(ctx, pctx, pb, extent.e_lblk, ehandle);
+                       /* The next extent should match this index's logical start */
+                       if (extent.e_lblk != lblk) {
+                               struct ext2_extent_info e_info;
+
+                               ext2fs_extent_get_info(ehandle, &e_info);
+                               pctx->blk = lblk;
+                               pctx->blk2 = extent.e_lblk;
+                               pctx->num = e_info.curr_level - 1;
+                               problem = PR_1_EXTENT_INDEX_START_INVALID;
+                               if (fix_problem(ctx, problem, pctx))
+                                       ext2fs_extent_fix_parents(ehandle);
+                       }
+                       scan_extent_node(ctx, pctx, pb, extent.e_lblk,
+                                        last_lblk, ehandle);
                        if (pctx->errcode)
                                return;
                        pctx->errcode = ext2fs_extent_get(ehandle,
@@ -1857,7 +1890,8 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                        }
                        pb->fragmented = 1;
                }
-               while (is_dir && ++pb->last_db_block < extent.e_lblk) {
+               while (is_dir && (++pb->last_db_block <
+                                 (e2_blkcnt_t) extent.e_lblk)) {
                        pctx->errcode = ext2fs_add_dir_block2(ctx->fs->dblist,
                                                              pb->ino, 0,
                                                              pb->last_db_block);
@@ -1867,15 +1901,19 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                                goto failed_add_dir_block;
                        }
                }
+               if (!ctx->fs->cluster_ratio_bits) {
+                       mark_blocks_used(ctx, extent.e_pblk, extent.e_len);
+                       pb->num_blocks += extent.e_len;
+               }
                for (blk = extent.e_pblk, blockcnt = extent.e_lblk, i = 0;
                     i < extent.e_len;
                     blk++, blockcnt++, i++) {
-                       if (!(ctx->fs->cluster_ratio_bits &&
-                             pb->previous_block &&
+                       if (ctx->fs->cluster_ratio_bits &&
+                           !(pb->previous_block &&
                              (EXT2FS_B2C(ctx->fs, blk) ==
                               EXT2FS_B2C(ctx->fs, pb->previous_block)) &&
                              (blk & EXT2FS_CLUSTER_MASK(ctx->fs)) ==
-                             (blockcnt & EXT2FS_CLUSTER_MASK(ctx->fs)))) {
+                             ((unsigned) blockcnt & EXT2FS_CLUSTER_MASK(ctx->fs)))) {
                                mark_block_used(ctx, blk);
                                pb->num_blocks++;
                        }
@@ -1898,10 +1936,10 @@ static void scan_extent_node(e2fsck_t ctx, struct problem_context *pctx,
                if (is_dir && extent.e_len > 0)
                        pb->last_db_block = blockcnt - 1;
                pb->previous_block = extent.e_pblk + extent.e_len - 1;
-               start_block = pb->last_block = extent.e_lblk + extent.e_len - 1;
+               start_block = pb->last_block = last_lblk;
                if (is_leaf && !is_dir &&
                    !(extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT))
-                       pb->last_init_lblock = extent.e_lblk + extent.e_len - 1;
+                       pb->last_init_lblock = last_lblk;
        next:
                pctx->errcode = ext2fs_extent_get(ehandle,
                                                  EXT2_EXTENT_NEXT_SIB,
@@ -1937,7 +1975,7 @@ static void check_blocks_extents(e2fsck_t ctx, struct problem_context *pctx,
                ctx->extent_depth_count[info.max_depth]++;
        }
 
-       scan_extent_node(ctx, pctx, pb, 0, ehandle);
+       scan_extent_node(ctx, pctx, pb, 0, 0, ehandle);
        if (pctx->errcode &&
            fix_problem(ctx, PR_1_EXTENT_ITERATE_FAILURE, pctx)) {
                pb->num_blocks = 0;
@@ -2324,7 +2362,7 @@ static int process_block(ext2_filsys fs,
                     (EXT2FS_B2C(ctx->fs, blk) ==
                      EXT2FS_B2C(ctx->fs, p->previous_block)) &&
                     (blk & EXT2FS_CLUSTER_MASK(ctx->fs)) ==
-                    (blockcnt & EXT2FS_CLUSTER_MASK(ctx->fs)))) {
+                    ((unsigned) blockcnt & EXT2FS_CLUSTER_MASK(ctx->fs)))) {
                mark_block_used(ctx, blk);
                p->num_blocks++;
        }
@@ -2655,7 +2693,7 @@ static void mark_table_blocks(e2fsck_t ctx)
        ext2_filsys fs = ctx->fs;
        blk64_t b;
        dgrp_t  i;
-       int     j;
+       unsigned int    j;
        struct problem_context pctx;
 
        clear_problem_context(&pctx);
index 93fb630..cd6c883 100644 (file)
@@ -624,7 +624,6 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
 {
        ext2_filsys fs = ctx->fs;
        struct process_block_struct pb;
-       struct ext2_inode       inode;
        struct problem_context  pctx;
        unsigned int            count;
 
@@ -635,33 +634,35 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
        pctx.str = "delete_file";
        pb.cur_cluster = ~0;
 
-       e2fsck_read_inode(ctx, ino, &inode, "delete_file");
-       if (ext2fs_inode_has_valid_blocks2(fs, &inode))
-               pctx.errcode = ext2fs_block_iterate3(fs, ino, BLOCK_FLAG_READ_ONLY,
-                                                    block_buf, delete_file_block, &pb);
+       if (ext2fs_inode_has_valid_blocks2(fs, &dp->inode))
+               pctx.errcode = ext2fs_block_iterate3(fs, ino,
+                                                    BLOCK_FLAG_READ_ONLY,
+                                                    block_buf,
+                                                    delete_file_block, &pb);
        if (pctx.errcode)
                fix_problem(ctx, PR_1B_BLOCK_ITERATE, &pctx);
        if (ctx->inode_bad_map)
                ext2fs_unmark_inode_bitmap2(ctx->inode_bad_map, ino);
-       ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(inode.i_mode));
-       quota_data_sub(ctx->qctx, &inode, ino, pb.dup_blocks * fs->blocksize);
-       quota_data_inodes(ctx->qctx, &inode, ino, -1);
+       ext2fs_inode_alloc_stats2(fs, ino, -1, LINUX_S_ISDIR(dp->inode.i_mode));
+       quota_data_sub(ctx->qctx, &dp->inode, ino,
+                      pb.dup_blocks * fs->blocksize);
+       quota_data_inodes(ctx->qctx, &dp->inode, ino, -1);
 
        /* Inode may have changed by block_iterate, so reread it */
-       e2fsck_read_inode(ctx, ino, &inode, "delete_file");
-       e2fsck_clear_inode(ctx, ino, &inode, 0, "delete_file");
-       if (ext2fs_file_acl_block(fs, &inode) &&
+       e2fsck_read_inode(ctx, ino, &dp->inode, "delete_file");
+       e2fsck_clear_inode(ctx, ino, &dp->inode, 0, "delete_file");
+       if (ext2fs_file_acl_block(fs, &dp->inode) &&
            (fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_EXT_ATTR)) {
                count = 1;
                pctx.errcode = ext2fs_adjust_ea_refcount2(fs,
-                                       ext2fs_file_acl_block(fs, &inode),
+                                       ext2fs_file_acl_block(fs, &dp->inode),
                                                   block_buf, -1, &count);
                if (pctx.errcode == EXT2_ET_BAD_EA_BLOCK_NUM) {
                        pctx.errcode = 0;
                        count = 1;
                }
                if (pctx.errcode) {
-                       pctx.blk = ext2fs_file_acl_block(fs, &inode);
+                       pctx.blk = ext2fs_file_acl_block(fs, &dp->inode);
                        fix_problem(ctx, PR_1B_ADJ_EA_REFCOUNT, &pctx);
                }
                /*
@@ -672,12 +673,12 @@ static void delete_file(e2fsck_t ctx, ext2_ino_t ino,
                 */
                if ((count == 0) ||
                    ext2fs_test_block_bitmap2(ctx->block_dup_map,
-                                       ext2fs_file_acl_block(fs, &inode))) {
-                       blk64_t blk = ext2fs_file_acl_block(fs, &inode);
+                                       ext2fs_file_acl_block(fs, &dp->inode))) {
+                       blk64_t blk = ext2fs_file_acl_block(fs, &dp->inode);
                        delete_file_block(fs, &blk,
                                          BLOCK_COUNT_EXTATTR, 0, 0, &pb);
-                       ext2fs_file_acl_block_set(fs, &inode, blk);
-                       quota_data_sub(ctx->qctx, &inode, ino, fs->blocksize);
+                       ext2fs_file_acl_block_set(fs, &dp->inode, blk);
+                       quota_data_sub(ctx->qctx, &dp->inode, ino, fs->blocksize);
                }
        }
 }
index 882950d..bceadfe 100644 (file)
@@ -668,7 +668,7 @@ static void salvage_directory(ext2_filsys fs,
         */
        if ((left < 0) &&
            ((int) rec_len + left > 8) &&
-           (name_len + 8 <= (int) rec_len + left) &&
+           ((int) name_len + 8 <= (int) rec_len + left) &&
            dirent->inode <= fs->super->s_inodes_count &&
            strnlen(dirent->name, name_len) == name_len) {
                (void) ext2fs_set_rec_len(fs, (int) rec_len + left, dirent);
@@ -1189,7 +1189,6 @@ static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf)
        struct del_block        del_block;
 
        e2fsck_read_inode(ctx, ino, &inode, "deallocate_inode");
-       e2fsck_clear_inode(ctx, ino, &inode, 0, "deallocate_inode");
        clear_problem_context(&pctx);
        pctx.ino = ino;
 
@@ -1224,7 +1223,7 @@ static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf)
        }
 
        if (!ext2fs_inode_has_valid_blocks2(fs, &inode))
-               return;
+               goto clear_inode;
 
        if (LINUX_S_ISREG(inode.i_mode) && EXT2_I_SIZE(&inode) >= 0x80000000UL)
                ctx->large_files--;
@@ -1239,6 +1238,10 @@ static void deallocate_inode(e2fsck_t ctx, ext2_ino_t ino, char* block_buf)
                ctx->flags |= E2F_FLAG_ABORT;
                return;
        }
+clear_inode:
+       /* Inode may have changed by block_iterate, so reread it */
+       e2fsck_read_inode(ctx, ino, &inode, "deallocate_inode");
+       e2fsck_clear_inode(ctx, ino, &inode, 0, "deallocate_inode");
 }
 
 /*
index 1e63280..2d55180 100644 (file)
@@ -123,7 +123,7 @@ void e2fsck_pass4(e2fsck_t ctx)
 
        /* Protect loop from wrap-around if s_inodes_count maxed */
        for (i=1; i <= fs->super->s_inodes_count && i > 0; i++) {
-               int isdir = ext2fs_test_inode_bitmap2(ctx->inode_dir_map, i);
+               int isdir;
 
                if (ctx->flags & E2F_FLAG_SIGNAL_MASK)
                        goto errout;
@@ -157,6 +157,7 @@ void e2fsck_pass4(e2fsck_t ctx)
                        ext2fs_icount_fetch(ctx->inode_count, i,
                                            &link_counted);
                }
+               isdir = ext2fs_test_inode_bitmap2(ctx->inode_dir_map, i);
                if (isdir && (link_counted > EXT2_LINK_MAX))
                        link_counted = 1;
                if (link_counted != link_count) {
index 8312fe0..fce0f6e 100644 (file)
@@ -212,6 +212,12 @@ static void check_block_bitmaps(e2fsck_t ctx)
        int     cmp_block = 0;
        int     redo_flag = 0;
        blk64_t super_blk, old_desc_blk, new_desc_blk;
+       char *actual_buf, *bitmap_buf;
+
+       actual_buf = (char *) e2fsck_allocate_memory(ctx, fs->blocksize,
+                                                    "actual bitmap buffer");
+       bitmap_buf = (char *) e2fsck_allocate_memory(ctx, fs->blocksize,
+                                                    "bitmap block buffer");
 
        clear_problem_context(&pctx);
        free_array = (unsigned int *) e2fsck_allocate_memory(ctx,
@@ -259,11 +265,53 @@ redo_counts:
        for (i = B2C(fs->super->s_first_data_block);
             i < ext2fs_blocks_count(fs->super);
             i += EXT2FS_CLUSTER_RATIO(fs)) {
+               int first_block_in_bg = (B2C(i) -
+                                        B2C(fs->super->s_first_data_block)) %
+                       fs->super->s_clusters_per_group == 0;
+               int n, nbytes = fs->super->s_clusters_per_group / 8;
+
                actual = ext2fs_fast_test_block_bitmap2(ctx->block_found_map, i);
 
+               /*
+                * Try to optimize pass5 by extracting a bitmap block
+                * as expected from what we have on disk, and then
+                * comparing the two.  If they are identical, then
+                * update the free block counts and go on to the next
+                * block group.  This is much faster than doing the
+                * individual bit-by-bit comparison.  The one downside
+                * is that this doesn't work if we are asking e2fsck
+                * to do a discard operation.
+                */
+               if (!first_block_in_bg ||
+                   (group == (int)fs->group_desc_count - 1) ||
+                   (ctx->options & E2F_OPT_DISCARD))
+                       goto no_optimize;
+
+               retval = ext2fs_get_block_bitmap_range2(ctx->block_found_map,
+                               B2C(i), fs->super->s_clusters_per_group,
+                               actual_buf);
+               if (retval)
+                       goto no_optimize;
+               if (ext2fs_bg_flags_test(fs, group, EXT2_BG_BLOCK_UNINIT))
+                       memset(bitmap_buf, 0, nbytes);
+               else {
+                       retval = ext2fs_get_block_bitmap_range2(fs->block_map,
+                                       B2C(i), fs->super->s_clusters_per_group,
+                                       bitmap_buf);
+                       if (retval)
+                               goto no_optimize;
+               }
+               if (memcmp(actual_buf, bitmap_buf, nbytes) != 0)
+                       goto no_optimize;
+               n = ext2fs_bitcount(actual_buf, nbytes);
+               group_free = fs->super->s_clusters_per_group - n;
+               free_blocks += group_free;
+               i += EXT2FS_C2B(fs, fs->super->s_clusters_per_group - 1);
+               goto next_group;
+       no_optimize:
+
                if (skip_group) {
-                       if ((B2C(i) - B2C(fs->super->s_first_data_block)) %
-                           fs->super->s_clusters_per_group == 0) {
+                       if (first_block_in_bg) {
                                super_blk = 0;
                                old_desc_blk = 0;
                                new_desc_blk = 0;
@@ -401,6 +449,7 @@ redo_counts:
                        if (!bitmap && i >= first_free)
                                e2fsck_discard_blocks(ctx, first_free,
                                                      (i - first_free) + 1);
+               next_group:
                        first_free = ext2fs_blocks_count(fs->super);
 
                        free_array[group] = group_free;
@@ -475,6 +524,8 @@ redo_counts:
        }
 errout:
        ext2fs_free_mem(&free_array);
+       ext2fs_free_mem(&actual_buf);
+       ext2fs_free_mem(&bitmap_buf);
 }
 
 static void check_inode_bitmaps(e2fsck_t ctx)
index 977a4c8..6d03765 100644 (file)
@@ -946,6 +946,20 @@ static struct e2fsck_problem problem_table[] = {
          N_("@i %i has zero length extent\n\t(@n logical @b %c, physical @b %b)\n"),
          PROMPT_CLEAR, 0 },
 
+       /*
+        * Interior extent node logical offset doesn't match first node below it
+        */
+       { PR_1_EXTENT_INDEX_START_INVALID,
+         N_("Interior @x node level %N of @i %i:\n"
+            "Logical start %b does not match logical start %c at next level.  "),
+         PROMPT_FIX, 0 },
+
+       /* Extent end is out of bounds for the tree */
+       { PR_1_EXTENT_END_OUT_OF_BOUNDS,
+         N_("@i %i, end of extent exceeds allowed value\n\t(logical @b %c, physical @b %b, len %N)\n"),
+         PROMPT_CLEAR, 0 },
+
+
        /* Pass 1b errors */
 
        /* Pass 1B: Rescan for duplicate/bad blocks */
@@ -1816,7 +1830,7 @@ int fix_problem(e2fsck_t ctx, problem_t code, struct problem_context *pctx)
                return 0;
        }
        if (!(ptr->flags & PR_CONFIG)) {
-               char    key[9], *new_desc;
+               char    key[9], *new_desc = NULL;
 
                sprintf(key, "0x%06x", code);
 
index 1b5815b..b578678 100644 (file)
@@ -558,6 +558,10 @@ struct problem_context {
 /* Extent has zero length */
 #define PR_1_EXTENT_LENGTH_ZERO                0x010066
 
+/* Index start doesn't match start of next extent down */
+#define PR_1_EXTENT_INDEX_START_INVALID        0x01006D
+
+#define PR_1_EXTENT_END_OUT_OF_BOUNDS  0x01006E
 /*
  * Pass 1b errors
  */
@@ -586,7 +590,6 @@ struct problem_context {
 /* Error adjusting EA refcount */
 #define PR_1B_ADJ_EA_REFCOUNT  0x011007
 
-
 /* Pass 1C: Scan directories for inodes with dup blocks. */
 #define PR_1C_PASS_HEADER      0x012000
 
index e94ef4e..e4e5ae1 100644 (file)
@@ -283,12 +283,9 @@ int journal_recover(journal_t *journal)
 int journal_skip_recovery(journal_t *journal)
 {
        int                     err;
-       journal_superblock_t *  sb;
-
        struct recovery_info    info;
 
        memset (&info, 0, sizeof(info));
-       sb = journal->j_superblock;
 
        err = do_one_pass(journal, &info, PASS_SCAN);
 
@@ -297,6 +294,8 @@ int journal_skip_recovery(journal_t *journal)
                ++journal->j_transaction_sequence;
        } else {
 #ifdef CONFIG_JBD_DEBUG
+               journal_superblock_t *sb = journal->j_superblock;
+
                int dropped = info.end_transaction - be32_to_cpu(sb->s_sequence);
 #endif
                jbd_debug(1,
@@ -363,11 +362,6 @@ static int do_one_pass(journal_t *journal,
        int                     tag_bytes = journal_tag_bytes(journal);
        __u32                   crc32_sum = ~0; /* Transactional Checksums */
 
-       /* Precompute the maximum metadata descriptors in a descriptor block */
-       int                     MAX_BLOCKS_PER_DESC;
-       MAX_BLOCKS_PER_DESC = ((journal->j_blocksize-sizeof(journal_header_t))
-                              / tag_bytes);
-
        /*
         * First thing is to establish what we expect to find in the log
         * (in terms of transaction IDs), and where (in terms of log
@@ -408,14 +402,14 @@ static int do_one_pass(journal_t *journal,
                        if (tid_geq(next_commit_ID, info->end_transaction))
                                break;
 
-               jbd_debug(2, "Scanning for sequence ID %u at %lu/%lu\n",
+               jbd_debug(2, "Scanning for sequence ID %u at %llu/%lu\n",
                          next_commit_ID, next_log_block, journal->j_last);
 
                /* Skip over each chunk of the transaction looking
                 * either the next descriptor block or the final commit
                 * record. */
 
-               jbd_debug(3, "JBD: checking block %ld\n", next_log_block);
+               jbd_debug(3, "JBD: checking block %llu\n", next_log_block);
                err = jread(&bh, journal, next_log_block);
                if (err)
                        goto failed;
@@ -735,12 +729,16 @@ static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
                unsigned long long blocknr;
                int err;
 
-               if (record_len == 4)
-                       blocknr = ext2fs_be32_to_cpu(*((__be32 *)(bh->b_data +
-                                                                 offset)));
-               else
-                       blocknr = ext2fs_be64_to_cpu(*((__be64 *)(bh->b_data +
-                                                                 offset)));
+               if (record_len == 4) {
+                       __be32 b;
+                       memcpy(&b, bh->b_data + offset, sizeof(__be32));
+                       blocknr = ext2fs_be32_to_cpu(b);
+               } else {
+                       __be64 b;
+                       memcpy(&b, bh->b_data + offset, sizeof(__be64));
+                       blocknr = ext2fs_be64_to_cpu(b);
+               }
+
                offset += record_len;
                err = journal_set_revoke(journal, blocknr, sequence);
                if (err)
index e9abb56..4b669f0 100644 (file)
@@ -171,7 +171,7 @@ void region_print(region_t region, FILE *f)
 
 int main(int argc, char **argv)
 {
-       region_t        r;
+       region_t        r = NULL;
        int             pc = 0, ret;
        region_addr_t   start, end;
 
index aa7f406..3d509ad 100644 (file)
@@ -59,7 +59,7 @@ struct fill_dir_struct {
        e2fsck_t ctx;
        struct hash_entry *harray;
        int max_array, num_array;
-       int dir_size;
+       unsigned int dir_size;
        int compress;
        ino_t parent;
 };
@@ -122,7 +122,7 @@ static int fill_dir_block(ext2_filsys fs,
                if (((dir_offset + rec_len) > fs->blocksize) ||
                    (rec_len < 8) ||
                    ((rec_len % 4) != 0) ||
-                   (((dirent->name_len & 0xFF)+8) > rec_len)) {
+                   (((dirent->name_len & 0xFF)+8U) > rec_len)) {
                        fd->err = EXT2_ET_DIR_CORRUPTED;
                        return BLOCK_ABORT;
                }
@@ -404,10 +404,9 @@ static errcode_t copy_dir_entries(e2fsck_t ctx,
        char                    *block_start;
        struct hash_entry       *ent;
        struct ext2_dir_entry   *dirent;
-       unsigned int            rec_len, prev_rec_len;
-       int                     i, left;
+       unsigned int            rec_len, prev_rec_len, left, slack, offset;
+       int                     i;
        ext2_dirhash_t          prev_hash;
-       int                     offset, slack;
 
        if (ctx->htree_slack_percentage == 255) {
                profile_get_uint(ctx->profile, "options",
@@ -828,7 +827,7 @@ void e2fsck_rehash_directories(e2fsck_t ctx)
        struct dir_info_iter *  dirinfo_iter = 0;
        ext2_ino_t              ino;
        errcode_t               retval;
-       int                     cur, max, all_dirs, dir_index, first = 1;
+       int                     cur, max, all_dirs, first = 1;
 
        init_resource_track(&rtrack, ctx->fs->io);
        all_dirs = ctx->options & E2F_OPT_COMPRESS_DIRS;
@@ -840,7 +839,6 @@ void e2fsck_rehash_directories(e2fsck_t ctx)
 
        clear_problem_context(&pctx);
 
-       dir_index = ctx->fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_DIR_INDEX;
        cur = 0;
        if (all_dirs) {
                dirinfo_iter = e2fsck_dir_info_iter_begin(ctx);
index 10b9328..e4d60ce 100644 (file)
@@ -251,6 +251,7 @@ static struct str_table sigbus_code_table[] = {
        END_TABLE
 };
 
+#if 0 /* should this be hooked in somewhere? */
 static struct str_table sigstrap_code_table[] = {
 #ifdef TRAP_BRKPT
        DEFINE_ENTRY(TRAP_BRKPT)
@@ -260,6 +261,7 @@ static struct str_table sigstrap_code_table[] = {
 #endif
        END_TABLE
 };
+#endif
 
 static struct str_table sigcld_code_table[] = {
 #ifdef CLD_EXITED
@@ -283,6 +285,7 @@ static struct str_table sigcld_code_table[] = {
        END_TABLE
 };
 
+#if 0 /* should this be hooked in somewhere? */
 static struct str_table sigpoll_code_table[] = {
 #ifdef POLL_IN
        DEFINE_ENTRY(POLL_IN)
@@ -304,6 +307,7 @@ static struct str_table sigpoll_code_table[] = {
 #endif
        END_TABLE
 };
+#endif
 
 static const char *lookup_table(int num, struct str_table *table)
 {
@@ -327,7 +331,8 @@ static const char *lookup_table_fallback(int num, struct str_table *table)
        return buf;
 }
 
-static void die_signal_handler(int signum, siginfo_t *siginfo, void *context)
+static void die_signal_handler(int signum, siginfo_t *siginfo,
+                              void *context EXT2FS_ATTR((unused)))
 {
        void *stack_syms[32];
        int frames;
@@ -368,7 +373,7 @@ static void die_signal_handler(int signum, siginfo_t *siginfo, void *context)
               fprintf(stderr, "fault addr=%p", siginfo->si_addr);
        fprintf(stderr, "\n");
 
-#ifdef HAVE_BACKTRACE
+#if defined(HAVE_BACKTRACE) && !defined(DISABLE_BACKTRACE)
        frames = backtrace(stack_syms, 32);
        backtrace_symbols_fd(stack_syms, frames, 2);
 #endif
index 160991d..07f5fe5 100644 (file)
@@ -317,7 +317,8 @@ void check_resize_inode(e2fsck_t ctx)
        struct problem_context  pctx;
        int             i, gdt_off, ind_off;
        dgrp_t          j;
-       blk64_t         blk, pblk, expect;
+       blk64_t         blk, pblk;
+       blk_t           expect; /* for resize inode, which is 32-bit only */
        __u32           *dind_buf = 0, *ind_buf;
        errcode_t       retval;
 
@@ -464,11 +465,11 @@ void check_super_block(e2fsck_t ctx)
        ext2_filsys fs = ctx->fs;
        blk64_t first_block, last_block;
        struct ext2_super_block *sb = fs->super;
+       unsigned int    ipg_max;
        problem_t       problem;
        blk64_t blocks_per_group = fs->super->s_blocks_per_group;
        __u32   bpg_max, cpg_max;
        int     inodes_per_block;
-       int     ipg_max;
        int     inode_size;
        int     accept_time_fudge;
        int     broken_system_clock;
@@ -914,8 +915,7 @@ int check_backup_super_block(e2fsck_t ctx)
                if (!ext2fs_bg_has_super(fs, g))
                        continue;
 
-               sb = fs->super->s_first_data_block +
-                       (g * fs->super->s_blocks_per_group);
+               sb = ext2fs_group_first_block2(fs, g);
 
                retval = io_channel_read_blk(fs->io, sb, -SUPERBLOCK_SIZE,
                                             buf);
index 6348777..51eeb25 100644 (file)
@@ -204,8 +204,7 @@ static void show_stats(e2fsck_t     ctx)
                        ctx->fs_blockdev_count), ctx->fs_blockdev_count);
        log_out(ctx, P_("%12u fifo\n", "%12u fifos\n", ctx->fs_fifo_count),
                ctx->fs_fifo_count);
-       log_out(ctx, P_("%12u link\n", "%12u links\n",
-                       ctx->fs_links_count - dir_links),
+       log_out(ctx, P_("%12u link\n", "%12u links\n", num_links),
                ctx->fs_links_count - dir_links);
        log_out(ctx, P_("%12u symbolic link", "%12u symbolic links",
                        ctx->fs_symlinks_count), ctx->fs_symlinks_count);
@@ -217,9 +216,8 @@ static void show_stats(e2fsck_t     ctx)
                        ctx->fs_sockets_count),
                ctx->fs_sockets_count);
        log_out(ctx, "------------\n");
-       log_out(ctx, P_("%12u file\n", "%12u files\n",
-                       ctx->fs_total_count - dir_links),
-               ctx->fs_total_count - dir_links);
+       log_out(ctx, P_("%12u file\n", "%12u files\n", num_files),
+               num_files);
 }
 
 static void check_mount(e2fsck_t ctx)
@@ -1064,7 +1062,7 @@ static errcode_t try_open_fs(e2fsck_t ctx, int flags, io_manager io_ptr,
                retval = ext2fs_open2(ctx->filesystem_name, ctx->io_options,
                                      flags, 0, 0, io_ptr, ret_fs);
 
-       if (ret_fs)
+       if (retval == 0)
                e2fsck_set_bitmap_type(*ret_fs, EXT2FS_BMAP64_RBTREE,
                                       "default", NULL);
        return retval;
@@ -1173,7 +1171,7 @@ int main (int argc, char *argv[])
        int old_bitmaps;
        __u32 features[3];
        char *cp;
-       int qtype;  /* quota type */
+       int qtype = -99;  /* quota type */
 
        clear_problem_context(&pctx);
        sigcatcher_setup();
index 7c4caab..2b7d2ff 100644 (file)
@@ -121,7 +121,8 @@ void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned int size,
 #endif
        ret = malloc(size);
        if (!ret) {
-               sprintf(buf, "Can't allocate %s\n", description);
+               sprintf(buf, "Can't allocate %u bytes for %s\n",
+                       size, description);
                fatal_error(ctx, buf);
        }
        memset(ret, 0, size);
@@ -616,7 +617,7 @@ int ext2_file_type(unsigned int mode)
 errcode_t e2fsck_zero_blocks(ext2_filsys fs, blk_t blk, int num,
                             blk_t *ret_blk, int *ret_count)
 {
-       int             j, count, next_update, next_update_incr;
+       int             j, count;
        static char     *buf;
        errcode_t       retval;
 
@@ -639,10 +640,6 @@ errcode_t e2fsck_zero_blocks(ext2_filsys fs, blk_t blk, int num,
                memset(buf, 0, fs->blocksize * STRIDE_LENGTH);
        }
        /* OK, do the write loop */
-       next_update = 0;
-       next_update_incr = num / 100;
-       if (next_update_incr < 1)
-               next_update_incr = 1;
        for (j = 0; j < num; j += STRIDE_LENGTH, blk += STRIDE_LENGTH) {
                count = num - j;
                if (count > STRIDE_LENGTH)
@@ -795,7 +792,6 @@ void e2fsck_set_bitmap_type(ext2_filsys fs, unsigned int default_type,
                            const char *profile_name, unsigned int *old_type)
 {
        unsigned type;
-       errcode_t       retval;
 
        if (old_type)
                *old_type = fs->default_bitmap_type;
index 680a6ad..8a05207 100644 (file)
@@ -1,16 +1,16 @@
 Begin3
 Title:          EXT2 Filesystem utilities
-Version:        1.42.5
-Entered-date:   29July2012
+Version:        1.42.8
+Entered-date:   20Jun2013
 Description:    The filesystem utilities for the EXT2, EXT3, and EXT4
                filesystems, including e2fsck, mke2fs, dumpe2fs, and others.
 Keywords:       utilities, filesystem, Ext2fs, ext3, ext4
 Author:         tytso@mit.edu (Theodore Tso)
 Maintained-by:  tytso@mit.edu (Theodore Tso)
 Primary-site:   download.sourceforge.net /pub/sourceforge/e2fsprogs
-                5784kB e2fsprogs-1.42.5.tar.gz
-                504kB  e2fsprogs-libs-1.42.5.tar.gz
-                1kB    e2fsprogs-1.42.5.lsm
+                5852kB e2fsprogs-1.42.8.tar.gz
+                564kB  e2fsprogs-libs-1.42.8.tar.gz
+                1kB    e2fsprogs-1.42.8.lsm
 Alternate-site: 
 Platforms:     linux 1.2.x/1.3.x/2.0.x/2.1.x/2.2.x/2.3.x/2.4.x/2.5.x/2.6.x/3.x
 Copying-policy: GPL-2/LGPL-2
index c66281c..78479d3 100644 (file)
@@ -24,8 +24,9 @@ image:                $(ELF_LIB)
 
 $(ELF_LIB): $(OBJS)
        $(E) "  GEN_ELF_SOLIB $(ELF_LIB)"
-       $(Q) (cd elfshared; $(CC) --shared -o $(ELF_LIB) $(ELF_OTHER_LIBS) \
-               $(LDFLAGS) -Wl,-soname,$(ELF_SONAME) $(OBJS))
+       $(Q) (cd elfshared; $(CC) --shared -o $(ELF_LIB) \
+               -L$(top_builddir)/../lib $(LDFLAGS) \
+               -Wl,-soname,$(ELF_SONAME) $(OBJS) $(ELF_OTHER_LIBS))
        $(Q) $(MV) elfshared/$(ELF_LIB) .
        $(Q) $(RM) -f ../$(ELF_LIB) ../$(ELF_IMAGE).so ../$(ELF_SONAME)
        $(Q) (cd ..; $(LN) $(LINK_BUILD_FLAGS) \
index 66f2b4c..5990be8 100644 (file)
@@ -24,8 +24,9 @@ image:                $(ELF_LIB)
 
 $(ELF_LIB): $(OBJS)
        $(E) "  GEN_ELF_SOLIB $(ELF_LIB)"
-       $(Q) (cd elfshared; $(CC) --shared -o $(ELF_LIB) $(ELF_OTHER_LIBS) \
-               $(LDFLAGS) -Wl,-h,$(ELF_SONAME) $(OBJS))
+       $(Q) (cd elfshared; $(CC) --shared -o $(ELF_LIB) \
+               -L$(top_builddir)/../lib $(LDFLAGS) \
+               -Wl,-h,$(ELF_SONAME) $(OBJS) $(ELF_OTHER_LIBS))
        $(Q) $(MV) elfshared/$(ELF_LIB) .
        $(Q) $(RM) -f ../$(ELF_LIB) ../$(ELF_IMAGE).so ../$(ELF_SONAME)
        $(Q) (cd ..; $(LN) $(LINK_BUILD_FLAGS) \
index f23a137..0ec8564 100644 (file)
@@ -36,7 +36,7 @@ ELF_SO_VERSION = 1
 ELF_IMAGE = libblkid
 ELF_MYDIR = blkid
 ELF_INSTALL_DIR = $(root_libdir)
-ELF_OTHER_LIBS = -L../.. -luuid
+ELF_OTHER_LIBS = -luuid
 
 BSDLIB_VERSION = 2.0
 BSDLIB_IMAGE = libblkid
index 73900a5..8bdd239 100644 (file)
@@ -11,6 +11,9 @@
  */
 
 #include "config.h"
+#if HAVE_SECURE_GETENV
+#define _GNU_SOURCE
+#endif
 #if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -49,7 +52,9 @@ static char *safe_getenv(const char *arg)
 #endif
 #endif
 
-#ifdef HAVE___SECURE_GETENV
+#if defined(HAVE_SECURE_GETENV)
+       return secure_getenv(arg);
+#elif defined(HAVE___SECURE_GETENV)
        return __secure_getenv(arg);
 #else
        return getenv(arg);
index f670e1b..f9be962 100644 (file)
@@ -75,52 +75,46 @@ static int valid_offset(int fd, blkid_loff_t offset)
  */
 blkid_loff_t blkid_get_dev_size(int fd)
 {
-       int valid_blkgetsize64 = 1;
-#ifdef __linux__
-       struct          utsname ut;
-#endif
        unsigned long long size64;
-       unsigned long size;
        blkid_loff_t high, low;
-#ifdef FDGETPRM
-       struct floppy_struct this_floppy;
-#endif
-#ifdef HAVE_SYS_DISKLABEL_H
-       int part = -1;
-       struct disklabel lab;
-       struct partition *pp;
-       char ch;
-       struct stat st;
-#endif /* HAVE_SYS_DISKLABEL_H */
 
 #ifdef DKIOCGETBLOCKCOUNT      /* For Apple Darwin */
        if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0) {
-               if ((sizeof(blkid_loff_t) < sizeof(unsigned long long))
-                   && (size64 << 9 > 0xFFFFFFFF))
+               if (sizeof(blkid_loff_t) < sizeof(unsigned long long) &&
+                   (size64 << 9) > 0xFFFFFFFF)
                        return 0; /* EFBIG */
-               return (blkid_loff_t) size64 << 9;
+               return (blkid_loff_t)size64 << 9;
        }
 #endif
 
 #ifdef BLKGETSIZE64
+       {
+               int valid_blkgetsize64 = 1;
 #ifdef __linux__
-       if ((uname(&ut) == 0) &&
-           ((ut.release[0] == '2') && (ut.release[1] == '.') &&
-            (ut.release[2] < '6') && (ut.release[3] == '.')))
-               valid_blkgetsize64 = 0;
-#endif
-       if (valid_blkgetsize64 &&
-           ioctl(fd, BLKGETSIZE64, &size64) >= 0) {
-               if ((sizeof(blkid_loff_t) < sizeof(unsigned long long))
-                   && ((size64) > 0xFFFFFFFF))
-                       return 0; /* EFBIG */
-               return size64;
+               struct          utsname ut;
+
+               if ((uname(&ut) == 0) &&
+                   ((ut.release[0] == '2') && (ut.release[1] == '.') &&
+                    (ut.release[2] < '6') && (ut.release[3] == '.')))
+                       valid_blkgetsize64 = 0;
+#endif
+               if (valid_blkgetsize64 &&
+                   ioctl(fd, BLKGETSIZE64, &size64) >= 0) {
+                       if (sizeof(blkid_loff_t) < sizeof(unsigned long long) &&
+                           (size64 > 0xFFFFFFFF))
+                               return 0; /* EFBIG */
+                       return size64;
+               }
        }
 #endif /* BLKGETSIZE64 */
 
 #ifdef BLKGETSIZE
-       if (ioctl(fd, BLKGETSIZE, &size) >= 0)
-               return (blkid_loff_t)size << 9;
+       {
+               unsigned long size;
+
+               if (ioctl(fd, BLKGETSIZE, &size) >= 0)
+                       return (blkid_loff_t)size << 9;
+       }
 #endif
 
 /* tested on FreeBSD 6.1-RELEASE i386 */
@@ -130,26 +124,39 @@ blkid_loff_t blkid_get_dev_size(int fd)
 #endif /* DIOCGMEDIASIZE */
 
 #ifdef FDGETPRM
-       if (ioctl(fd, FDGETPRM, &this_floppy) >= 0)
-               return (blkid_loff_t)this_floppy.size << 9;
+       {
+               struct floppy_struct this_floppy;
+
+               if (ioctl(fd, FDGETPRM, &this_floppy) >= 0)
+                       return (blkid_loff_t)this_floppy.size << 9;
+       }
 #endif
 #ifdef HAVE_SYS_DISKLABEL_H
-       /*
-        * This code works for FreeBSD 4.11 i386, except for the full device
-        * (such as /dev/ad0). It doesn't work properly for newer FreeBSD
-        * though. FreeBSD >= 5.0 should be covered by the DIOCGMEDIASIZE
-        * above however.
-        *
-        * Note that FreeBSD >= 4.0 has disk devices as unbuffered (raw,
-        * character) devices, so we need to check for S_ISCHR, too.
-        */
-       if (fstat(fd, &st) >= 0 && (S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode)))
-               part = st.st_rdev & 7;
-
-       if (part >= 0 && (ioctl(fd, DIOCGDINFO, (char *)&lab) >= 0)) {
-               pp = &lab.d_partitions[part];
-               if (pp->p_size)
-                       return pp->p_size << 9;
+       {
+               int part = -1;
+               struct disklabel lab;
+               struct partition *pp;
+               char ch;
+               struct stat st;
+
+               /*
+                * This code works for FreeBSD 4.11 i386, except for the full
+                * device (such as /dev/ad0). It doesn't work properly for
+                * newer FreeBSD though. FreeBSD >= 5.0 should be covered by
+                * the DIOCGMEDIASIZE above however.
+                *
+                * Note that FreeBSD >= 4.0 has disk devices as unbuffered (raw,
+                * character) devices, so we need to check for S_ISCHR, too.
+                */
+               if (fstat(fd, &st) >= 0 &&
+                   (S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode)))
+                       part = st.st_rdev & 7;
+
+               if (part >= 0 && (ioctl(fd, DIOCGDINFO, (char *)&lab) >= 0)) {
+                       pp = &lab.d_partitions[part];
+                       if (pp->p_size)
+                               return pp->p_size << 9;
+               }
        }
 #endif /* HAVE_SYS_DISKLABEL_H */
        {
index 6970b12..bd31fe0 100644 (file)
@@ -43,10 +43,8 @@ static int figure_label_len(const unsigned char *label, int len)
 
        while ((*end == ' ' || *end == 0) && end >= label)
                --end;
-       if (end >= label) {
-               label = label;
+       if (end >= label)
                return end - label + 1;
-       }
        return 0;
 }
 
@@ -1163,7 +1161,8 @@ static int probe_hfs(struct blkid_probe *probe __BLKID_ATTR((unused)),
                         struct blkid_magic *id __BLKID_ATTR((unused)),
                         unsigned char *buf)
 {
-       struct hfs_mdb *hfs = (struct hfs_mdb *) buf;
+       struct hfs_mdb *hfs = (struct hfs_mdb *)buf;
+       unsigned long long *uuid_ptr;
        char    uuid_str[17];
        __u64   uuid;
 
@@ -1171,7 +1170,8 @@ static int probe_hfs(struct blkid_probe *probe __BLKID_ATTR((unused)),
            (memcmp(hfs->embed_sig, "HX", 2) == 0))
                return 1;       /* Not hfs, but an embedded HFS+ */
 
-       uuid = blkid_le64(*((unsigned long long *) hfs->finder_info.id));
+       uuid_ptr = (unsigned long long *)hfs->finder_info.id;
+       uuid = blkid_le64(*uuid_ptr);
        if (uuid) {
                sprintf(uuid_str, "%016llX", uuid);
                blkid_set_tag(probe->dev, "UUID", uuid_str, 0);
@@ -1205,9 +1205,10 @@ static int probe_hfsplus(struct blkid_probe *probe,
        unsigned int leaf_node_size;
        unsigned int leaf_block;
        unsigned int label_len;
-       int ext;
+       unsigned long long *uuid_ptr;
        __u64 leaf_off, uuid;
        char    uuid_str[17], label[512];
+       int ext;
 
        /* Check for a HFS+ volume embedded in a HFS volume */
        if (memcmp(sbd->signature, "BD", 2) == 0) {
@@ -1235,7 +1236,8 @@ static int probe_hfsplus(struct blkid_probe *probe,
            (memcmp(hfsplus->signature, "HX", 2) != 0))
                return 1;
 
-       uuid = blkid_le64(*((unsigned long long *) hfsplus->finder_info.id));
+       uuid_ptr = (unsigned long long *)hfsplus->finder_info.id;
+       uuid = blkid_le64(*uuid_ptr);
        if (uuid) {
                sprintf(uuid_str, "%016llX", uuid);
                blkid_set_tag(probe->dev, "UUID", uuid_str, 0);
index 90e9743..b500a2c 100644 (file)
@@ -26,6 +26,9 @@
 /* Define to 1 if using `alloca.c'. */
 #undef C_ALLOCA
 
+/* Define to 1 to disable use of backtrace */
+#undef DISABLE_BACKTRACE
+
 /* Define to 1 if ext2 compression enabled */
 #undef ENABLE_COMPRESSION
 
 /* Define to 1 if if struct sockaddr contains sa_len */
 #undef HAVE_SA_LEN
 
+/* Define to 1 if you have the `secure_getenv' function. */
+#undef HAVE_SECURE_GETENV
+
 /* Define to 1 if you have the <semaphore.h> header file. */
 #undef HAVE_SEMAPHORE_H
 
 /* The size of `long long', as computed by sizeof. */
 #undef SIZEOF_LONG_LONG
 
+/* The size of `off_t', as computed by sizeof. */
+#undef SIZEOF_OFF_T
+
 /* The size of `short', as computed by sizeof. */
 #undef SIZEOF_SHORT
 
index e7c6fec..71031ff 100644 (file)
@@ -31,7 +31,7 @@ int getversion (int fd, unsigned long * version)
 
        r = ioctl (fd, EXT2_IOC_GETVERSION, &ver);
        *version = ver;
-       return 0;
+       return r;
 #else /* ! HAVE_EXT2_IOCTLS */
        extern int errno;
        errno = EOPNOTSUPP;
index d9ad3e7..e8d6283 100644 (file)
@@ -35,10 +35,16 @@ unsigned long long parse_num_blocks2(const char *arg, int log_block_size)
                num <<= 10;
                /* fallthrough */
        case 'K': case 'k':
-               num >>= log_block_size;
+               if (log_block_size < 0)
+                       num <<= 10;
+               else
+                       num >>= log_block_size;
                break;
        case 's':
-               num >>= (1+log_block_size);
+               if (log_block_size < 0)
+                       num <<= 9;
+               else
+                       num >>= (1+log_block_size);
                break;
        case '\0':
                break;
@@ -62,11 +68,21 @@ main(int argc, char **argv)
        unsigned long num;
        int log_block_size = 0;
 
-       if (argc != 2) {
-               fprintf(stderr, "Usage: %s arg\n", argv[0]);
+       if (argc != 2 && argc != 3) {
+               fprintf(stderr, "Usage: %s arg [log_block_size]\n", argv[0]);
                exit(1);
        }
 
+       if (argc == 3) {
+               char *p;
+
+               log_block_size = strtol(argv[2], &p, 0);
+               if (*p) {
+                       fprintf(stderr, "Bad log_block_size: %s\n", argv[2]);
+                       exit(1);
+               }
+       }
+
        num = parse_num_blocks(argv[1], log_block_size);
 
        printf("Parsed number: %lu\n", num);
index 26a3360..8d1ea26 100644 (file)
@@ -59,12 +59,34 @@ compile_et: $(DEP_SUBSTITUTE) $(srcdir)/compile_et.sh.in
        $(Q) $(SUBSTITUTE) $(srcdir)/compile_et.sh.in compile_et
        $(Q) $(CHMOD) +x compile_et
 
+DVI=texi2dvi
+DVIPS=dvips -o "$@"
+INFO=@MAKEINFO@
+HTML=texi2html -split_chapter
+PS2PDF=ps2pdf
+
 com_err.ps : com_err.dvi
 com_err.dvi: com_err.texinfo
 
+com_err.info: $(srcdir)/com_err.texinfo
+       $(E) "  MAKEINFO $@"
+       -$(Q) $(INFO) $(srcdir)/com_err.texinfo
+
+com_err.dvi: $(srcdir)/com_err.texinfo
+       $(E) "  TEXI2DVI $@"
+       -$(Q) $(DVI) $(srcdir)/com_err.texinfo
+
+com_err.ps: com_err.dvi
+       $(E) "  DVIPS $@"
+       -$(Q) $(DVIPS) com_err.dvi
+
+com_err.pdf: com_err.ps
+       $(E) "  PS2PDF $@"
+       -$(Q) $(PS2PDF) com_err.ps
+
 com_err_abt.html: $(srcdir)/com_err.texinfo
        $(E) "  TEXI2HTML $@"
-       -$(Q) texi2html -split_chapter $(srcdir)/com_err.texinfo
+       -$(Q) $(HTML) $(srcdir)/com_err.texinfo
        -$(Q) if test -d com_err ; then \
                mv com_err/* . ; rmdir com_err ; \
                fi
@@ -133,7 +155,9 @@ check:: compile_et
 clean::
        $(RM) -f compile_et libcom_err.a libcom_err_p.a com_err.info
        $(RM) -f $(OBJS) profiled/*
-       $(RM) -f *~ \#* *.bak *.otl *.aux *.toc *.PS *.dvi *.ps TAGS *.ln *.html
+       $(RM) -f *~ \#* *.bak *.otl *.aux *.toc *.PS *.dvi *.ps TAGS *.ln \
+               *.html *.cp *.fn *.fns *.ky *.log *.pc *.pg *.toc *.tp *.vr \
+               *.pdf
        $(RM) -f ../libcom_err.a ../libcom_err_p.a
 
 mostlyclean:: clean
index 7e6a494..748c7e2 100644 (file)
@@ -14,7 +14,7 @@
 @c Software Foundation, and is under different copyright restrictions
 @c from the rest of this package.)
 
-@setfilename com_err
+@setfilename com_err.info
 @settitle A Common Error Description Library for UNIX
 
 @ifinfo
 @end direntry
 @end ifinfo
 
-@iftex
-@tolerance 10000
+@c smallbook
 
-@c Mutate section headers...
-@begingroup
-  @catcode\11#=6
-  @gdef@secheading#1#2#3{@secheadingi {#3@enspace #1}}
-@endgroup
+@iftex
+@finalout
 @end iftex
 
 @ifinfo
@@ -61,6 +57,7 @@ notice identical to this one except for the removal of this paragraph
 (this paragraph not being relevant to the printed manual).
 
 @end ignore
+@end ifinfo
 
 @setchapternewpage odd
 
@@ -114,7 +111,7 @@ from the remainder of this package.
 
 @end titlepage
 
-
+@ifinfo
 @node Top, Why com_err?, (dir), (dir)
 
 @top A Common Error Description Library for UNIX
@@ -133,12 +130,11 @@ This manual documents the com_err library.
 * Acknowledgements::            
 @end menu
 
-@end ifinfo
-
 @page
+@end ifinfo
 
 @node Why com_err?, Error codes, Top, Top
-@section Why com_err?
+@chapter Why com_err?
 
 In building application software packages, a programmer often has to
 deal with a number of libraries, each of which can use a different
@@ -174,7 +170,7 @@ of the form @samp{unknown code foo 32}, where @samp{foo} would be the name
 of the table.
 
 @node Error codes, Error table source file, Why com_err?, Top
-@section Error codes
+@chapter Error codes
 
 Error codes themselves are 32 bit (signed) integers, of which the high
 order 24 bits are an identifier of which error table the error code is
@@ -203,7 +199,7 @@ much other software that assumes an ANSI-C environment base) without
 significant effort.
 
 @node Error table source file, The error-table compiler, Error codes, Top
-@section Error table source file
+@chapter Error table source file
 
 The error table source file begins with the declaration of the table name,
 as
@@ -241,7 +237,7 @@ error table might be:
 @end example
 
 @node The error-table compiler, Run-time support routines, Error table source file, Top
-@section The error-table compiler
+@chapter The error-table compiler
 
 The error table compiler is named @code{compile_et}.  It takes one
 argument, the pathname of a file (ending in @samp{.et}, e.g.,
@@ -255,7 +251,7 @@ codes defined; the object module generated from the C code may be linked in
 to a program which wishes to use the printed forms of the error codes.
 
 @node Run-time support routines, Coding Conventions, The error-table compiler, Top
-@section Run-time support routines
+@chapter Run-time support routines
 
 Any source file which uses the routines supplied with or produced by the
 com_err package should include the header file @file{<com_err.h>}.  It
@@ -306,9 +302,7 @@ left to circumstances which render @code{com_err} (below) unusable.
 
 @end deftypefun
 
-@deftypefun
-void com_err (const char *@var{whoami}, long @var{error_code},
-              const char *@var{format}, ...);             
+@deftypefun void com_err (const char *@var{whoami}, long @var{error_code}, const char *@var{format}, ...);             
 
 This routine provides an alternate way to print error messages to
 standard error; it allows the error message to be passed in as a
@@ -321,8 +315,7 @@ printed.  @var{format} may not be omitted.
 
 @end deftypefun
 
-@deftypefun
-void com_err_va (const char *@var{whoami}, long @var{error_code}, const char *@var{format}, va_list @var{args});
+@deftypefun void com_err_va (const char *@var{whoami}, long @var{error_code}, const char *@var{format}, va_list @var{args});
 
 This routine provides an interface, equivalent to @code{com_err} above,
 which may be used by higher-level variadic functions (functions which
@@ -330,7 +323,7 @@ accept variable numbers of arguments).
 
 @end deftypefun
 
-@deftypefun void (*set_com_err_hook (void (*@var{proc}) (const char *@var{whoami}, long @var{error_code}, va_list @var{args}))) (const char *@var{whoami}, long @var{error_code}, va_list @var{args});
+@deftypefun void *set_com_err_hook (void (*@var{proc}) (const char *@var{whoami}, long @var{error_code}, va_list @var{args}) (const char *@var{whoami}, long @var{error_code}, va_list @var{args}));
 
 @deftypefunx void reset_com_err_hook ();
 
@@ -390,7 +383,7 @@ the ANSI C library).
 @end deftypefun
 
 @node Coding Conventions, Building and Installation, Run-time support routines, Top
-@section Coding Conventions
+@chapter Coding Conventions
 
 The following conventions are just some general stylistic conventions
 to follow when writing robust libraries and programs.  Conventions
@@ -501,7 +494,7 @@ error:
 @end example
 
 @node Building and Installation, Bug Reports, Coding Conventions, Top
-@section Building and Installation
+@chapter Building and Installation
 
 The distribution of this package will probably be done as a compressed
 ``tar''-format file available via anonymous FTP from SIPB.MIT.EDU.
@@ -514,7 +507,7 @@ installed for use; @samp{com_err.3} and @samp{compile_et.1} can also be
 installed as manual pages.
 
 @node Bug Reports, Acknowledgements, Building and Installation, Top
-@section Bug Reports
+@chapter Bug Reports
 
 The principal author of this library is: Ken
 Raeburn, @t{raeburn@@MIT.EDU}.  
@@ -524,7 +517,7 @@ Ts'o, and so bugs and comments should be sent to @t{tytso@@thunk.org}.
 
 
 @node Acknowledgements,  , Bug Reports, Top
-@section Acknowledgements
+@chapter Acknowledgements
 
 I would like to thank: Bill Sommerfeld, for his help with some of this
 documentation, and catching some of the bugs the first time around;
index dc77b69..92509e6 100644 (file)
@@ -17,6 +17,9 @@
  */
 
 #include "config.h"
+#if HAVE_SECURE_GETENV
+#define _GNU_SOURCE
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -209,7 +212,9 @@ static char *safe_getenv(const char *arg)
 #endif
 #endif
 
-#ifdef HAVE___SECURE_GETENV
+#if defined(HAVE_SECURE_GETENV)
+       return secure_getenv(arg);
+#elif defined(HAVE___SECURE_GETENV)
        return __secure_getenv(arg);
 #else
        return getenv(arg);
index 838160c..dddd014 100644 (file)
-%% TeX macros to handle texinfo files
-
-%   Copyright (C) 1985, 1986, 1988 Richard M. Stallman
-
-%                     NO WARRANTY
-
-%  BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
-%NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT
-%WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
-%RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
-%WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-%BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-%FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY
-%AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
-%DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
-%CORRECTION.
-
-% IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
-%STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
-%WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
-%LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
-%OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-%USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
-%DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
-%A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
-%PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
-%DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
-
-%              GENERAL PUBLIC LICENSE TO COPY
-
-%  1. You may copy and distribute verbatim copies of this source file
-%as you receive it, in any medium, provided that you conspicuously
-%and appropriately publish on each copy a valid copyright notice
-%"Copyright (C) 1986 Richard M. Stallman"; and include
-%following the copyright notice a verbatim copy of the above disclaimer
-%of warranty and of this License.
-
-%  2. You may modify your copy or copies of this source file or
-%any portion of it, and copy and distribute such modifications under
-%the terms of Paragraph 1 above, provided that you also do the following:
-
-%    a) cause the modified files to carry prominent notices stating
-%    that you changed the files and the date of any change; and
-
-%    b) cause the whole of any work that you distribute or publish,
-%    that in whole or in part contains or is a derivative of this
-%    program or any part thereof, to be licensed at no charge to all
-%    third parties on terms identical to those contained in this
-%    License Agreement (except that you may choose to grant more extensive
-%    warranty protection to some or all third parties, at your option).
-
-%    c) You may charge a distribution fee for the physical act of
-%    transferring a copy, and you may at your option offer warranty
-%    protection in exchange for a fee.
-
-%Mere aggregation of another unrelated program with this program (or its
-%derivative) on a volume of a storage or distribution medium does not bring
-%the other program under the scope of these terms.
-
-%  3. You may copy and distribute this program (or a portion or derivative
-%of it, under Paragraph 2) in object code or executable form under the terms
-%of Paragraphs 1 and 2 above provided that you also do one of the following:
-
-%    a) accompany it with the complete corresponding machine-readable
-%    source code, which must be distributed under the terms of
-%    Paragraphs 1 and 2 above; or,
-
-%    b) accompany it with a written offer, valid for at least three
-%    years, to give any third party free (except for a nominal
-%    shipping charge) a complete machine-readable copy of the
-%    corresponding source code, to be distributed under the terms of
-%    Paragraphs 1 and 2 above; or,
-
-%    c) accompany it with the information you received as to where the
-%    corresponding source code may be obtained.  (This alternative is
-%    allowed only for noncommercial distribution and only if you
-%    received the program in object code or executable form alone.)
-
-%For an executable file, complete source code means all the source code for
-%all modules it contains; but, as a special exception, it need not include
-%source code for modules which are standard libraries that accompany the
-%operating system on which the executable file runs.
-
-%  4. You may not copy, sublicense, distribute or transfer this program
-%except as expressly provided under this License Agreement.  Any attempt
-%otherwise to copy, sublicense, distribute or transfer this program is void and
-%your rights to use the program under this License agreement shall be
-%automatically terminated.  However, parties who have received computer
-%software programs from you with this License Agreement will not have
-%their licenses terminated so long as such parties remain in full compliance.
-
-%  5. If you wish to incorporate parts of this program into other free
-%programs whose distribution conditions are different, write to the Free
-%Software Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yet
-%worked out a simple rule that can be stated here, but we will often permit
-%this.  We will be guided by the two goals of preserving the free status of
-%all derivatives of our free software and of promoting the sharing and reuse of
-%software.
-
-%In other words, you are welcome to use, share and improve this program.
-%You are forbidden to forbid anyone else to use, share and improve
-%what you give them.   Help stamp out software-hoarding!
-
-\def\texinfoversion{1.18}
-\message{Loading texinfo package [Version \texinfoversion]:}
-\message{}
-
-% Save some parts of plain tex whose names we will redefine.
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2006-02-13.16}
+%
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
+% Software Foundation, Inc.
+%
+% This texinfo.tex file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at
+% your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this texinfo.tex file; see the file COPYING.  If not, write
+% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+% Boston, MA 02110-1301, USA.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction.  (This has been our intent since Texinfo was invented.)
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+%   ftp://tug.org/tex/texinfo.tex
+%     (and all CTAN mirrors, see http://www.ctan.org).
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org.  Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem.  Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution.  For a simple
+% manual foo.texi, however, you can get away with this:
+%   tex foo.texi
+%   texindex foo.??
+%   tex foo.texi
+%   tex foo.texi
+%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent.  You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
 
-\let\ptexlbrace=\{
-\let\ptexrbrace=\}
-\let\ptexdot=\.
-\let\ptexstar=\*
-\let\ptexend=\end
-\let\ptexbullet=\bullet
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+  \catcode`+=\active \catcode`\_=\active}
+
+\message{Basics,}
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
 \let\ptexb=\b
+\let\ptexbullet=\bullet
 \let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
 \let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexstar=\*
 \let\ptext=\t
-\let\ptexl=\l
-\let\ptexL=\L
 
-\def\tie{\penalty 10000\ }     % Save plain tex definition of ~.
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
 
-\message{Basics,}
-\chardef\other=12
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+  \let\linenumber = \empty % Pre-3.0.
+\else
+  \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
 
-\hyphenation{ap-pen-dix}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{eshell}
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+  ap-pen-dix bit-map bit-maps
+  data-base data-bases eshell fall-ing half-way long-est man-u-script
+  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+  spell-ing spell-ings
+  stand-alone strong-est time-stamp time-stamps which-ever white-space
+  wide-spread wrap-around
+}
 
 % Margin to add to right of even pages, to left of odd pages.
-\newdimen \bindingoffset  \bindingoffset=0pt
-\newdimen \normaloffset   \normaloffset=\hoffset
+\newdimen\bindingoffset
+\newdimen\normaloffset
 \newdimen\pagewidth \newdimen\pageheight
-\pagewidth=\hsize \pageheight=\vsize
 
-%---------------------Begin change-----------------------
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @| inserts a changebar to the left of the current line.  It should
+% surround any changed text.  This approach does *not* work if the
+% change spans more than two lines of output.  To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+  % \vadjust can only be used in horizontal mode.
+  \leavevmode
+  %
+  % Append this vertical mode material after the current line in the output.
+  \vadjust{%
+    % We want to insert a rule with the height and depth of the current
+    % leading; that is exactly what \strutbox is supposed to record.
+    \vskip-\baselineskip
+    %
+    % \vadjust-items are inserted at the left edge of the type.  So
+    % the \llap here moves out into the left-hand margin.
+    \llap{%
+      %
+      % For a thicker or thinner bar, change the `1pt'.
+      \vrule height\baselineskip width1pt
+      %
+      % This is the space between the bar and the text.
+      \hskip 12pt
+    }%
+  }%
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal.  We don't just call \tracingall here,
+% since that produces some useless output on the terminal.  We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+  \tracingstats2
+  \tracingpages1
+  \tracinglostchars2  % 2 gives us more in etex
+  \tracingparagraphs1
+  \tracingoutput1
+  \tracingmacros2
+  \tracingrestores1
+  \showboxbreadth\maxdimen \showboxdepth\maxdimen
+  \ifx\eTeXversion\undefined\else % etex gives us more logging
+    \tracingscantokens1
+    \tracingifs1
+    \tracinggroups1
+    \tracingnesting2
+    \tracingassigns1
+  \fi
+  \tracingcommands3  % 3 gives us more in etex
+  \errorcontextlines16
+}%
+
+% add check for \lastpenalty to plain's definitions.  If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+  \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+  \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+  \removelastskip\penalty-200\bigskip\fi\fi}
+
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
 %
-% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
 %
-\newdimen\cornerlong \newdimen\cornerthick
-\newdimen \topandbottommargin
-\newdimen \outerhsize \newdimen \outervsize
-\cornerlong=1pc\cornerthick=.3pt       % These set size of cropmarks
-\outerhsize=7in
-\outervsize=9.5in
-\topandbottommargin=.75in
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
 %
-%---------------------End change-----------------------
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong  \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
 
 % \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions itself, but you have to call it yourself.
-\chardef\PAGE=255  \output={\onepageout{\pagecontents\PAGE}}
-\def\onepageout#1{\hoffset=\normaloffset
-\ifodd\pageno  \advance\hoffset by \bindingoffset
-\else \advance\hoffset by -\bindingoffset\fi
-\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}%
- {\let\hsize=\pagewidth \makefootline}}
-\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-
-
-% Here is a modification of the main output routine for Near East Publications
-% This provides right-angle cropmarks at all four corners.
-% The contents of the page are centerlined into the cropmarks,
-% and any desired binding offset is added as an \hskip on either
-% site of the centerlined box.  (P. A. MacKay, 12 November, 1986)
-%
-\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
-                \shipout
-                \vbox to \outervsize{\hsize=\outerhsize
-                 \vbox{\line{\ewtop\hfill\ewtop}}
-                 \nointerlineskip
-                 \line{\vbox{\moveleft\cornerthick\nstop}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nstop}}
-                 \vskip \topandbottommargin
-                 \centerline{\ifodd\pageno\hskip\bindingoffset\fi
-                       \vbox{
-                       {\let\hsize=\pagewidth \makeheadline}
-                       \pagebody{#1}
-                       {\let\hsize=\pagewidth \makefootline}}
-                       \ifodd\pageno\else\hskip\bindingoffset\fi}
-                \vskip \topandbottommargin plus1fill minus1fill
-                 \boxmaxdepth\cornerthick
-                 \line{\vbox{\moveleft\cornerthick\nsbot}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nsbot}}
-                 \nointerlineskip
-                 \vbox{\line{\ewbot\hfill\ewbot}}
-       }
-  \advancepageno 
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-%
-% Do @cropmarks to get crop marks
-\def\cropmarks{\let\onepageout=\croppageout }
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+  %
+  \ifodd\pageno  \advance\hoffset by \bindingoffset
+  \else \advance\hoffset by -\bindingoffset\fi
+  %
+  % Do this outside of the \shipout so @code etc. will be expanded in
+  % the headline as they should be, not taken literally (outputting ''code).
+  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+  %
+  {%
+    % Have to do this stuff outside the \shipout because we want it to
+    % take effect in \write's, yet the group defined by the \vbox ends
+    % before the \shipout runs.
+    %
+    \indexdummies         % don't expand commands in the output.
+    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
+               % the page break happens to be in the middle of an example.
+               % We don't want .vr (or whatever) entries like this:
+               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+               % "\acronym" won't work when it's read back in;
+               % it needs to be 
+               % {\code {{\tt \backslashcurfont }acronym}
+    \shipout\vbox{%
+      % Do this early so pdf references go to the beginning of the page.
+      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+      %
+      \ifcropmarks \vbox to \outervsize\bgroup
+        \hsize = \outerhsize
+        \vskip-\topandbottommargin
+        \vtop to0pt{%
+          \line{\ewtop\hfil\ewtop}%
+          \nointerlineskip
+          \line{%
+            \vbox{\moveleft\cornerthick\nstop}%
+            \hfill
+            \vbox{\moveright\cornerthick\nstop}%
+          }%
+          \vss}%
+        \vskip\topandbottommargin
+        \line\bgroup
+          \hfil % center the page within the outer (page) hsize.
+          \ifodd\pageno\hskip\bindingoffset\fi
+          \vbox\bgroup
+      \fi
+      %
+      \unvbox\headlinebox
+      \pagebody{#1}%
+      \ifdim\ht\footlinebox > 0pt
+        % Only leave this space if the footline is nonempty.
+        % (We lessened \vsize for it in \oddfootingxxx.)
+        % The \baselineskip=24pt in plain's \makefootline has no effect.
+        \vskip 2\baselineskip
+        \unvbox\footlinebox
+      \fi
+      %
+      \ifcropmarks
+          \egroup % end of \vbox\bgroup
+        \hfil\egroup % end of (centering) \line\bgroup
+        \vskip\topandbottommargin plus1fill minus1fill
+        \boxmaxdepth = \cornerthick
+        \vbox to0pt{\vss
+          \line{%
+            \vbox{\moveleft\cornerthick\nsbot}%
+            \hfill
+            \vbox{\moveright\cornerthick\nsbot}%
+          }%
+          \nointerlineskip
+          \line{\ewbot\hfil\ewbot}%
+        }%
+      \egroup % \vbox from first cropmarks clause
+      \fi
+    }% end of \shipout\vbox
+  }% end of group with \indexdummies
+  \advancepageno
+  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
 
 \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
 {\catcode`\@ =11
 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
 \dimen@=\dp#1 \unvbox#1
 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
 \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
 }
 
-%
 % Here are the rules for the cropmarks.  Note that they are
 % offset so that the space between them is truly \outerhsize or \outervsize
 % (P. A. MacKay, 12 November, 1986)
 \def\nsbot{\vbox
   {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
 
-% Parse an argument, then pass it to #1.
-% The argument can be delimited with [...] or with "..." or braces
-% or it can be a whole line.
-% #1 should be a macro which expects
-% an ordinary undelimited TeX argument.
-
-\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}
+% Parse an argument, then pass it to #1.  The argument is the rest of
+% the input line (except we remove a trailing comment).  #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+  \def\next{#2}%
+  \begingroup
+    \obeylines
+    \spaceisspace
+    #1%
+    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
 
-\def\parseargx{%
-\ifx \obeyedspace\temp \aftergroup\parseargdiscardspace \else%
-\aftergroup \parseargline %
-\fi \endgroup}
+{\obeylines %
+  \gdef\parseargline#1^^M{%
+    \endgroup % End of the group started in \parsearg.
+    \argremovecomment #1\comment\ArgTerm%
+  }%
+}
 
-{\obeyspaces %
-\gdef\parseargdiscardspace {\begingroup\obeylines\futurelet\temp\parseargx}}
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
 
-\gdef\obeyedspace{\ }
+% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+%    @end itemize  @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+  \def\temp{#3}%
+  \ifx\temp\empty
+    % We cannot use \next here, as it holds the macro to run;
+    % thus we reuse \temp.
+    \let\temp\finishparsearg
+  \else
+    \let\temp\argcheckspaces
+  \fi
+  % Put the space token in:
+  \temp#1 #3\ArgTerm
+}
 
-\def\parseargline{\begingroup \obeylines \parsearglinex}
-{\obeylines %
-\gdef\parsearglinex #1^^M{\endgroup \next {#1}}}
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \next.
+% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
 
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+% \parseargdef\foo{...}
+%      is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick.  --kasal, 16nov03
 
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment.  Type Return to continue.}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
+\def\parseargdef#1{%
+  \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+  \def#2{\parsearg#1}%
+  \def#1##1%
+}
 
-% @begin foo  is the same as @foo, for now.
-\newhelp\EMsimple{Type <Return> to continue}
+% Several utility definitions with active space:
+{
+  \obeyspaces
+  \gdef\obeyedspace{ }
+
+  % Make each space character in the input produce a normal interword
+  % space in the output.  Don't allow a line break at this space, as this
+  % is used only in environments like @example, where each line of input
+  % should produce a line of output anyway.
+  %
+  \gdef\sepspaces{\obeyspaces\let =\tie}
+
+  % If an index command is used in an @example environment, any spaces
+  % therein should become regular spaces in the raw index file, not the
+  % expansion of \tie (\leavevmode \penalty \@M \ ).
+  \gdef\unsepspaces{\let =\space}
+}
 
-\outer\def\begin{\parsearg\beginxxx}
 
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
 
-%% @end foo executes the definition of \Efoo.
-%% foo can be delimited by doublequotes or brackets.
+% Define the framework for environments in texinfo.tex.  It's used like this:
+%
+%   \envdef\foo{...}
+%   \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo.  \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches.  The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as enviroments; they don't open a group.  (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At runtime, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+  \def\temp{#1}%
+  \ifx\thisenv\temp
+  \else
+    \badenverr
+  \fi
+}
 
-\def\end{\parsearg\endxxx}
+% Evironment mismatch, #1 expected:
+\def\badenverr{%
+  \errhelp = \EMsimple
+  \errmessage{This command can appear only \inenvironment\temp,
+    not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+  \ifx#1\empty
+    out of any environment%
+  \else
+    in environment \expandafter\string#1%
+  \fi
+}
 
-\def\endxxx #1{%
-\expandafter\ifx\csname E#1\endcsname\relax
-\expandafter\ifx\csname #1\endcsname\relax
-\errmessage{Undefined command @end #1}\else
-\errorE{#1}\fi\fi
-\csname E#1\endcsname}
-\def\errorE#1{
-{\errhelp=\EMsimple \errmessage{@end #1 not within #1 environment}}}
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+  \if 1\csname iscond.#1\endcsname
+  \else
+    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
+    \expandafter\checkenv\csname#1\endcsname
+    \csname E#1\endcsname
+    \endgroup
+  \fi
+}
 
-% Single-spacing is done by various environments.
+\newhelp\EMsimple{Press RETURN to continue.}
 
-\newskip\singlespaceskip \singlespaceskip = \baselineskip
-\def\singlespace{%
-{\advance \baselineskip by -\singlespaceskip
-\kern \baselineskip}%
-\baselineskip=\singlespaceskip
-}
 
 %% Simple single-character @ commands
 
 % @@ prints an @
 % Kludge this until the fonts are right (grr).
-\def\@{{\sf \char '100}}
+\def\@{{\tt\char64}}
 
-% Define @` and @' to be the same as ` and '
-% but suppressing ligatures.
-\def\`{{`}}
-\def\'{{'}}
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
 
 % Used to generate quoted braces.
-
-\def\mylbrace {{\tt \char '173}}
-\def\myrbrace {{\tt \char '175}}
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
 \let\{=\mylbrace
 \let\}=\myrbrace
+\begingroup
+  % Definitions to produce \{ and \} commands for indices,
+  % and @{ and @} for the aux/toc files.
+  \catcode`\{ = \other \catcode`\} = \other
+  \catcode`\[ = 1 \catcode`\] = 2
+  \catcode`\! = 0 \catcode`\\ = \other
+  !gdef!lbracecmd[\{]%
+  !gdef!rbracecmd[\}]%
+  !gdef!lbraceatcmd[@{]%
+  !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+  \def\temp{#1}%
+  \ifx\temp\imacro \ptexi
+  \else\ifx\temp\jmacro \j
+  \else \errmessage{@dotless can be used only with i or j}%
+  \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence.  (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo.  Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+  L\kern-.36em
+  {\setbox0=\hbox{T}%
+   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
+  \kern-.15em
+  \TeX
+}
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
 
 % @: forces normal size whitespace following.
 \def\:{\spacefactor=1000 }
 
 % @* forces a line break.
-\def\*{\hfil\break}
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
+\def\*{\hfil\break\hbox{}\ignorespaces}
 
-% @w prevents a word break
-\def\w #1{\hbox{#1}}
+% @/ allows a line break.
+\let\/=\allowbreak
 
-% @group ... @end group  forces ... to be all on one page.
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
 
-\def\group{\begingroup% \inENV ???
-\def \Egroup{\egroup\endgroup}
-\vbox\bgroup}
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
 
-% @br   forces paragraph break
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
 
-\let\br = \par
+% @frenchspacing on|off  says whether to put extra space after punctuation.
+% 
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+  \def\temp{#1}%
+  \ifx\temp\onword \plainfrenchspacing
+  \else\ifx\temp\offword \plainnonfrenchspacing
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
+  \fi\fi
+}
 
-% @dots{}  output some dots
+% @w prevents a word break.  Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line.  According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0).  If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large.  This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material.  In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom.  The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+  \ifnum\catcode`\^^M=\active \else
+    \errhelp = \groupinvalidhelp
+    \errmessage{@group invalid in context where filling is enabled}%
+  \fi
+  \startsavinginserts
+  %
+  \setbox\groupbox = \vtop\bgroup
+    % Do @comment since we are called inside an environment such as
+    % @example, where each end-of-line in the input causes an
+    % end-of-line in the output.  We don't want the end-of-line after
+    % the `@group' to put extra space in the output.  Since @group
+    % should appear on a line by itself (according to the Texinfo
+    % manual), we don't worry about eating any user text.
+    \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it.  Thus, space below is not quite equal to space
+% above.  But it's pretty close.
+\def\Egroup{%
+    % To get correct interline space between the last line of the group
+    % and the first line afterwards, we have to propagate \prevdepth.
+    \endgraf % Not \par, as it may have been set to \lisppar.
+    \global\dimen1 = \prevdepth
+  \egroup           % End the \vtop.
+  % \dimen0 is the vertical size of the group's box.
+  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
+  % \dimen2 is how much space is left on the page (more or less).
+  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
+  % if the group doesn't fit on the current page, and it's a big big
+  % group, force a page break.
+  \ifdim \dimen0 > \dimen2
+    \ifdim \pagetotal < \vfilllimit\pageheight
+      \page
+    \fi
+  \fi
+  \box\groupbox
+  \prevdepth = \dimen1
+  \checkinserts
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil  \mil=0.001in
+
+% Old definition--didn't work.
+%\parseargdef\need{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+%\prevdepth=-1000pt
+%}}
+
+\parseargdef\need{%
+  % Ensure vertical mode, so we don't make a big box in the middle of a
+  % paragraph.
+  \par
+  %
+  % If the @need value is less than one line space, it's useless.
+  \dimen0 = #1\mil
+  \dimen2 = \ht\strutbox
+  \advance\dimen2 by \dp\strutbox
+  \ifdim\dimen0 > \dimen2
+    %
+    % Do a \strut just to make the height of this box be normal, so the
+    % normal leading is inserted relative to the preceding line.
+    % And a page break here is fine.
+    \vtop to #1\mil{\strut\vfil}%
+    %
+    % TeX does not even consider page breaks if a penalty added to the
+    % main vertical list is 10000 or more.  But in order to see if the
+    % empty box we just added fits on the page, we must make it consider
+    % page breaks.  On the other hand, we don't want to actually break the
+    % page after the empty box.  So we use a penalty of 9999.
+    %
+    % There is an extremely small chance that TeX will actually break the
+    % page at this \penalty, if there are no other feasible breakpoints in
+    % sight.  (If the user is using lots of big @group commands, which
+    % almost-but-not-quite fill up a page, TeX will have a hard time doing
+    % good page breaking, for example.)  However, I could not construct an
+    % example where a page broke at this \penalty; if it happens in a real
+    % document, then we can reconsider our strategy.
+    \penalty9999
+    %
+    % Back up by the size of the box, whether we did a page break or not.
+    \kern -#1\mil
+    %
+    % Do not allow a page break right after this kern.
+    \nobreak
+  \fi
+}
 
-\def\dots{$\ldots$}
+% @br   forces paragraph break (and is undocumented).
 
-% @page    forces the start of a new page
+\let\br = \par
 
+% @page forces the start of a new page.
+%
 \def\page{\par\vfill\supereject}
 
 % @exdent text....
 % outputs text on separate line in roman font, starting at standard page margin
 
-\def\exdent{\errmessage{@exdent in filled text}}
-  % @lisp, etc, define \exdent locally from \internalexdent
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
 
-{\obeyspaces
-\gdef\internalexdent{\parsearg\exdentzzz}}
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
 
-\def\exdentzzz #1{{\advance \leftskip by -\lispnarrowing
-\advance \hsize by -\leftskip
-\advance \hsize by -\rightskip
-\leftline{{\rm#1}}}}
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+  \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph.  For more general purposes, use the \margin insertion
+% class.  WHICH is `l' or `r'.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+  \nobreak
+  \kern-\strutdepth
+  \vtop to \strutdepth{%
+    \baselineskip=\strutdepth
+    \vss
+    % if you have multiple lines of stuff to put here, you'll need to
+    % make the vbox yourself of the appropriate size.
+    \ifx#1l%
+      \llap{\ignorespaces #2\hskip\inmarginspacing}%
+    \else
+      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+    \fi
+    \null
+  }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+  \setbox0 = \hbox{\ignorespaces #2}%
+  \ifdim\wd0 > 0pt
+    \def\lefttext{#1}%  have both texts
+    \def\righttext{#2}%
+  \else
+    \def\lefttext{#1}%  have only one text
+    \def\righttext{#1}%
+  \fi
+  %
+  \ifodd\pageno
+    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+  \else
+    \def\temp{\inleftmargin\lefttext}%
+  \fi
+  \temp
+}
 
 % @include file    insert text of that file as input.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+  \pushthisfilestack
+  \def\thisfile{#1}%
+  {%
+    \makevalueexpandable
+    \def\temp{\input #1 }%
+    \expandafter
+  }\temp
+  \popthisfilestack
+}
+\def\filenamecatcodes{%
+  \catcode`\\=\other
+  \catcode`~=\other
+  \catcode`^=\other
+  \catcode`_=\other
+  \catcode`|=\other
+  \catcode`<=\other
+  \catcode`>=\other
+  \catcode`+=\other
+  \catcode`-=\other
+}
 
-\def\include{\parsearg\includezzz}
-\def\includezzz #1{{\def\thisfile{#1}\input #1
-}}
+\def\pushthisfilestack{%
+  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+  \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
 
-\def\thisfile{}
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+  the stack of filenames is empty.}}
 
-% @center line   outputs that line, centered
+\def\thisfile{}
 
-\def\center{\parsearg\centerzzz}
-\def\centerzzz #1{{\advance\hsize by -\leftskip
-\advance\hsize by -\rightskip
-\centerline{#1}}}
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+  \ifhmode
+    \let\next\centerH
+  \else
+    \let\next\centerV
+  \fi
+  \next{\hfil \ignorespaces#1\unskip \hfil}%
+}
+\def\centerH#1{%
+  {%
+    \hfil\break
+    \advance\hsize by -\leftskip
+    \advance\hsize by -\rightskip
+    \line{#1}%
+    \break
+  }%
+}
+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
 
 % @sp n   outputs n lines of vertical space
 
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\par \vskip #1\baselineskip}
+\parseargdef\sp{\vskip #1\baselineskip}
 
 % @comment ...line which is ignored...
 % @c is the same as @comment
 % @ignore ... @end ignore  is another way to write a comment
 
-\def\comment{\parsearg \commentxxx}
-
-\def\commentxxx #1{}
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
 
 \let\c=\comment
 
-\long\def\ignore #1\end ignore{}
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \defaultparindent = 0pt
+    \else
+      \defaultparindent = #1em
+    \fi
+  \fi
+  \parindent = \defaultparindent
+}
 
-\outer\def\ifset{\parsearg\ifsetxxx}
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \lispnarrowing = 0pt
+    \else
+      \lispnarrowing = #1em
+    \fi
+  \fi
+}
 
-\def\ifsetxxx #1#2\end ifset{%
-\expandafter\ifx\csname IF#1\endcsname\relax \else #2\fi}
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading.  If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\noneword
+    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+  \else\ifx\temp\insertword
+    \let\suppressfirstparagraphindent = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @firstparagraphindent option `\temp'}%
+  \fi\fi
+}
 
-\outer\def\ifclear{\parsearg\ifclearxxx}
+% Here is how we actually suppress indentation.  Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+  \gdef\indent{%
+    \restorefirstparagraphindent
+    \indent
+  }%
+  \gdef\noindent{%
+    \restorefirstparagraphindent
+    \noindent
+  }%
+  \global\everypar = {%
+    \kern -\parindent
+    \restorefirstparagraphindent
+  }%
+}
 
-\def\ifclearxxx #1#2\end ifclear{%
-\expandafter\ifx\csname IF#1\endcsname\relax #2\fi}
+\gdef\restorefirstparagraphindent{%
+  \global \let \indent = \ptexindent
+  \global \let \noindent = \ptexnoindent
+  \global \everypar = {}%
+}
 
-% Some texinfo constructs that are trivial in tex
 
-\def\iftex{}
-\def\Eiftex{}
-\long\def\ifinfo #1\end ifinfo{}
-\long\def\menu #1\end menu{}
+% @asis just yields its argument.  Used with @table, for example.
+%
 \def\asis#1{#1}
 
-\def\node{\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx [#1,]}
-\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
-\let\lastnode=\relax
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+  \catcode`\_ = \active
+  \gdef\mathunderscore{%
+    \catcode`\_=\active
+    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+  }
+}
+% Another complication: we want \\ (and @\) to output a \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care.  Texinfo does not
+% otherwise define @\.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+  \tex
+  \mathunderscore
+  \let\\ = \mathbackslash
+  \mathactive
+  $\finishmath
+}
+\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
 
-\def\donoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\setref{\lastnode}\fi
-\let\lastnode=\relax}
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+  \catcode`^ = \active
+  \catcode`< = \active
+  \catcode`> = \active
+  \catcode`+ = \active
+  \gdef\mathactive{%
+    \let^ = \ptexhat
+    \let< = \ptexless
+    \let> = \ptexgtr
+    \let+ = \ptexplus
+  }
+}
+
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{$\ptexbullet$}
+\def\minus{$-$}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in a typewriter
+% font as three actual period characters.
+%
+\def\dots{%
+  \leavevmode
+  \hbox to 1.5em{%
+    \hskip 0pt plus 0.25fil
+    .\hfil.\hfil.%
+    \hskip 0pt plus 0.5fil
+  }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+  \dots
+  \spacefactor=\endofsentencespacefactor
+}
 
-\def\unnumbnoderef{\ifx\lastnode\relax\else
-\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi
-\let\lastnode=\relax}
+% @comma{} is so commas can be inserted into text without messing up
+% Texinfo's parsing.
+%
+\let\comma = ,
 
+% @refill is a no-op.
 \let\refill=\relax
 
-\let\setfilename=\comment
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
+   \iflinks
+     \tryauxfile
+     % Open the new aux file.  TeX will close it automatically at exit.
+     \immediate\openout\auxfile=\jobname.aux
+   \fi % \openindices needs to do some work in any case.
+   \openindices
+   \let\setfilename=\comment % Ignore extra @setfilename cmds.
+   %
+   % If texinfo.cnf is present on the system, read it.
+   % Useful for site-wide @afourpaper, etc.
+   \openin 1 texinfo.cnf
+   \ifeof 1 \else \input texinfo.cnf \fi
+   \closein 1
+   %
+   \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+  \newindex{cp}%
+  \newcodeindex{fn}%
+  \newcodeindex{vr}%
+  \newcodeindex{tp}%
+  \newcodeindex{ky}%
+  \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set).  So we test for \relax and 0 as well as \undefined,
+% borrowed from ifpdf.sty.
+\ifx\pdfoutput\undefined
+\else
+  \ifx\pdfoutput\relax
+  \else
+    \ifcase\pdfoutput
+    \else
+      \pdftrue
+    \fi
+  \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places.  Thus, we have to
+% double any backslashes.  Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e.  Not good.
+% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
+% (and related messages, the final outcome is that it is up to the TeX
+% user to double the backslashes and otherwise make the string valid, so
+% that's what we do).
+
+% double active backslashes.
+% 
+{\catcode`\@=0 \catcode`\\=\active
+ @gdef@activebackslashdouble{%
+   @catcode`@\=@active
+   @let\=@doublebackslash}
+}
+
+% To handle parens, we must adopt a different approach, since parens are
+% not active characters.  hyperref.dtx (which has the same problem as
+% us) handles it with this amazing macro to replace tokens.  I've
+% tinkered with it a little for texinfo, but it's definitely from there.
+% 
+% #1 is the tokens to replace.
+% #2 is the replacement.
+% #3 is the control sequence with the string.
+% 
+\def\HyPsdSubst#1#2#3{%
+  \def\HyPsdReplace##1#1##2\END{%
+    ##1%
+    \ifx\\##2\\%
+    \else
+      #2%
+      \HyReturnAfterFi{%
+        \HyPsdReplace##2\END
+      }%
+    \fi
+  }%
+  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
+}
+\long\def\HyReturnAfterFi#1\fi{\fi#1}
+
+% #1 is a control sequence in which to do the replacements.
+\def\backslashparens#1{%
+  \xdef#1{#1}% redefine it as its expansion; the definition is simply
+             % \lastnode when called from \setref -> \pdfmkdest.
+  \HyPsdSubst{(}{\realbackslash(}{#1}%
+  \HyPsdSubst{)}{\realbackslash)}{#1}%
+}
+
+\ifpdf
+  \input pdfcolor
+  \pdfcatalog{/PageMode /UseOutlines}%
+  \def\dopdfimage#1#2#3{%
+    \def\imagewidth{#2}%
+    \def\imageheight{#3}%
+    % without \immediate, pdftex seg faults when the same image is
+    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
+    \ifnum\pdftexversion < 14
+      \immediate\pdfimage
+    \else
+      \immediate\pdfximage
+    \fi
+      \ifx\empty\imagewidth\else width \imagewidth \fi
+      \ifx\empty\imageheight\else height \imageheight \fi
+      \ifnum\pdftexversion<13
+         #1.pdf%
+       \else
+         {#1.pdf}%
+       \fi
+    \ifnum\pdftexversion < 14 \else
+      \pdfrefximage \pdflastximage
+    \fi}
+  \def\pdfmkdest#1{{%
+    % We have to set dummies so commands such as @code, and characters
+    % such as \, aren't expanded when present in a section title.
+    \atdummies
+    \activebackslashdouble
+    \def\pdfdestname{#1}%
+    \backslashparens\pdfdestname
+    \pdfdest name{\pdfdestname} xyz%
+  }}%
+  %
+  % used to mark target names; must be expandable.
+  \def\pdfmkpgn#1{#1}%
+  %
+  \let\linkcolor = \Blue  % was Cyan, but that seems light?
+  \def\endlink{\Black\pdfendlink}
+  % Adding outlines to PDF; macros for calculating structure of outlines
+  % come from Petr Olsak
+  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+    \else \csname#1\endcsname \fi}
+  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+    \advance\tempnum by 1
+    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+  %
+  % #1 is the section text, which is what will be displayed in the
+  % outline by the pdf viewer.  #2 is the pdf expression for the number
+  % of subentries (or empty, for subsubsections).  #3 is the node text,
+  % which might be empty if this toc entry had no corresponding node.
+  % #4 is the page number
+  %
+  \def\dopdfoutline#1#2#3#4{%
+    % Generate a link to the node text if that exists; else, use the
+    % page number.  We could generate a destination for the section
+    % text in the case where a section has no node, but it doesn't
+    % seem worth the trouble, since most documents are normally structured.
+    \def\pdfoutlinedest{#3}%
+    \ifx\pdfoutlinedest\empty
+      \def\pdfoutlinedest{#4}%
+    \else
+      % Doubled backslashes in the name.
+      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
+       \backslashparens\pdfoutlinedest}%
+    \fi
+    %
+    % Also double the backslashes in the display string.
+    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
+     \backslashparens\pdfoutlinetext}%
+    %
+    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+  }
+  %
+  \def\pdfmakeoutlines{%
+    \begingroup
+      % Thanh's hack / proper braces in bookmarks
+      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+      %
+      % Read toc silently, to get counts of subentries for \pdfoutline.
+      \def\numchapentry##1##2##3##4{%
+       \def\thischapnum{##2}%
+       \def\thissecnum{0}%
+       \def\thissubsecnum{0}%
+      }%
+      \def\numsecentry##1##2##3##4{%
+       \advancenumber{chap\thischapnum}%
+       \def\thissecnum{##2}%
+       \def\thissubsecnum{0}%
+      }%
+      \def\numsubsecentry##1##2##3##4{%
+       \advancenumber{sec\thissecnum}%
+       \def\thissubsecnum{##2}%
+      }%
+      \def\numsubsubsecentry##1##2##3##4{%
+       \advancenumber{subsec\thissubsecnum}%
+      }%
+      \def\thischapnum{0}%
+      \def\thissecnum{0}%
+      \def\thissubsecnum{0}%
+      %
+      % use \def rather than \let here because we redefine \chapentry et
+      % al. a second time, below.
+      \def\appentry{\numchapentry}%
+      \def\appsecentry{\numsecentry}%
+      \def\appsubsecentry{\numsubsecentry}%
+      \def\appsubsubsecentry{\numsubsubsecentry}%
+      \def\unnchapentry{\numchapentry}%
+      \def\unnsecentry{\numsecentry}%
+      \def\unnsubsecentry{\numsubsecentry}%
+      \def\unnsubsubsecentry{\numsubsubsecentry}%
+      \readdatafile{toc}%
+      %
+      % Read toc second time, this time actually producing the outlines.
+      % The `-' means take the \expnumber as the absolute number of
+      % subentries, which we calculated on our first read of the .toc above.
+      %
+      % We use the node names as the destinations.
+      \def\numchapentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+      \def\numsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+      \def\numsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+      \def\numsubsubsecentry##1##2##3##4{% count is always zero
+        \dopdfoutline{##1}{}{##3}{##4}}%
+      %
+      % PDF outlines are displayed using system fonts, instead of
+      % document fonts.  Therefore we cannot use special characters,
+      % since the encoding is unknown.  For example, the eogonek from
+      % Latin 2 (0xea) gets translated to a | character.  Info from
+      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+      %
+      % xx to do this right, we have to translate 8-bit characters to
+      % their "best" equivalent, based on the @documentencoding.  Right
+      % now, I guess we'll just let the pdf reader have its way.
+      \indexnofonts
+      \setupdatafile
+      \catcode`\\=\active \otherbackslash
+      \input \jobname.toc
+    \endgroup
+  }
+  %
+  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+    \ifx\PP\D\let\nextsp\relax
+    \else\let\nextsp\skipspaces
+      \ifx\p\space\else\addtokens{\filename}{\PP}%
+        \advance\filenamelength by 1
+      \fi
+    \fi
+    \nextsp}
+  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+  \ifnum\pdftexversion < 14
+    \let \startlink \pdfannotlink
+  \else
+    \let \startlink \pdfstartlink
+  \fi
+  % make a live url in pdf output.
+  \def\pdfurl#1{%
+    \begingroup
+      % it seems we really need yet another set of dummies; have not
+      % tried to figure out what each command should do in the context
+      % of @url.  for now, just make @/ a no-op, that's the only one
+      % people have actually reported a problem with.
+      % 
+      \normalturnoffactive
+      \def\@{@}%
+      \let\/=\empty
+      \makevalueexpandable
+      \leavevmode\Red
+      \startlink attr{/Border [0 0 0]}%
+        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+    \endgroup}
+  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+  \def\maketoks{%
+    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+    \ifx\first0\adn0
+    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+    \else
+      \ifnum0=\countA\else\makelink\fi
+      \ifx\first.\let\next=\done\else
+        \let\next=\maketoks
+        \addtokens{\toksB}{\the\toksD}
+        \ifx\first,\addtokens{\toksB}{\space}\fi
+      \fi
+    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+    \next}
+  \def\makelink{\addtokens{\toksB}%
+    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+  \def\pdflink#1{%
+    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+    \linkcolor #1\endlink}
+  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+  \let\pdfmkdest = \gobble
+  \let\pdfurl = \gobble
+  \let\endlink = \relax
+  \let\linkcolor = \relax
+  \let\pdfmakeoutlines = \relax
+\fi  % \ifx\pdfoutput
 
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{See Info file \file{\losespace#3{}}, node `\losespace#1{}'}
-\def\losespace #1{#1}
 
 \message{fonts,}
 
-% Font-change commands.
-
-%% Try out Computer Modern fonts at \magstephalf
-\font\tenrm=cmr10 scaled \magstephalf
-\font\tentt=cmtt10 scaled \magstephalf
-% Instead of cmb10, you many want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10.
-\font\tenbf=cmb10 scaled \magstephalf 
-\font\tenit=cmti10 scaled \magstephalf
-\font\tensl=cmsl10 scaled \magstephalf
-\font\tensf=cmss10 scaled \magstephalf
-\def\li{\sf}
-\font\tensc=cmcsc10 scaled \magstephalf
-
-% Fonts for @defun, etc.
-\font\defbf=cmbx10 scaled \magstep1 %was 1314
-\let\deftt=\tentt
-\def\df{\let\tt=\deftt \defbf}
-
-% Font for title
-\font\titlerm = cmbx10 scaled \magstep5
-
-% Fonts for indices
-\font\indit=cmti9 \font\indrm=cmr9
-\def\indbf{\indrm} \def\indsl{\indit}
-\def\indexfonts{\let\it=\indit \let\sl=\indsl \let\bf=\indbf \let\rm=\indrm}
-
-% Fonts for headings
-\font\chaprm=cmbx10 scaled \magstep3
-\font\chapit=cmti10 scaled \magstep3
-\font\chapsl=cmsl10 scaled \magstep3
-\font\chaptt=cmtt10 scaled \magstep3
-\font\chapsf=cmss10 scaled \magstep3
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+  \csname ten#1\endcsname  % change the current font
+}
+
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+% Default leading.
+\newdimen\textleading  \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly.  There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+\def\setleading#1{%
+  \normalbaselineskip = #1\relax
+  \normallineskip = \lineskipfactor\normalbaselineskip
+  \normalbaselines
+  \setbox\strutbox =\hbox{%
+    \vrule width0pt height\strutheightpercent\baselineskip
+                    depth \strutdepthpercent \baselineskip
+  }%
+}
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\undefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx}               %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}
+\setfont\deftt\ttshape{10}{\magstep1}
+\setfont\defttsl\ttslshape{10}{\magstep1}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}
+\setfont\chapit\itbshape{10}{\magstep3}
+\setfont\chapsl\slbshape{10}{\magstep3}
+\setfont\chaptt\ttbshape{12}{\magstep2}
+\setfont\chapttsl\ttslshape{10}{\magstep3}
+\setfont\chapsf\sfbshape{17}{1000}
 \let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}
+\setfont\secit\itbshape{10}{\magstep2}
+\setfont\secsl\slbshape{10}{\magstep2}
+\setfont\sectt\ttbshape{12}{\magstep1}
+\setfont\secttsl\ttslshape{10}{\magstep2}
+\setfont\secsf\sfbshape{12}{\magstep1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
+\setfont\ssecit\itbshape{10}{1315}
+\setfont\ssecsl\slbshape{10}{1315}
+\setfont\ssectt\ttbshape{12}{\magstephalf}
+\setfont\ssecttsl\ttslshape{10}{1315}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}
+\setfont\reducedtt\ttshape{10}{1000}
+\setfont\reducedbf\bfshape{10}{1000}
+\setfont\reducedit\itshape{10}{1000}
+\setfont\reducedsl\slshape{10}{1000}
+\setfont\reducedsf\sfshape{10}{1000}
+\setfont\reducedsc\scshape{10}{1000}
+\setfont\reducedttsl\ttslshape{10}{1000}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families.  Since
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+  \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE.  We do this because \STYLE needs to also set the
+% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower).  These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+\def\textfonts{%
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+  \let\tenttsl=\textttsl
+  \def\curfontsize{text}%
+  \def\lsize{reduced}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+  \let\tenttsl=\titlettsl
+  \def\curfontsize{title}%
+  \def\lsize{chap}\def\lllsize{subsec}%
+  \resetmathfonts \setleading{25pt}}
+\def\titlefont#1{{\titlefonts\rm #1}}
+\def\chapfonts{%
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+  \let\tenttsl=\chapttsl
+  \def\curfontsize{chap}%
+  \def\lsize{sec}\def\lllsize{text}%
+  \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+  \let\tenttsl=\secttsl
+  \def\curfontsize{sec}%
+  \def\lsize{subsec}\def\lllsize{reduced}%
+  \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+  \let\tenttsl=\ssecttsl
+  \def\curfontsize{ssec}%
+  \def\lsize{text}\def\lllsize{small}%
+  \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+  \let\tenttsl=\reducedttsl
+  \def\curfontsize{reduced}%
+  \def\lsize{small}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+  \let\tenttsl=\smallttsl
+  \def\curfontsize{small}%
+  \def\lsize{smaller}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+  \let\tenttsl=\smallerttsl
+  \def\curfontsize{smaller}%
+  \def\lsize{smaller}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{9.5pt}}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+%   8.5x11=86   smallbook=72  a4=90  a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+%   8.5x11=90+  smallbook=80  a4=90+  a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt.  So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+%   8.5x11=71  smallbook=60  a4=75  a5=58
+%
+% I wish the USA used A4 paper.
+% --karl, 24jan03.
+
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\textfonts \rm
+
+% Define these so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
 
-\font\secrm=cmbx10 scaled \magstep2
-\font\secit=cmti10 scaled \magstep2
-\font\secsl=cmsl10 scaled \magstep2
-\font\sectt=cmtt10 scaled \magstep2
-\font\secsf=cmss10 scaled \magstep2
-\let\secbf=\secrm
-
-\font\ssecrm=cmbx10 scaled \magstep1
-\font\ssecit=cmti10 scaled \magstep1
-\font\ssecsl=cmsl10 scaled \magstep1
-\font\ssectt=cmtt10 scaled \magstep1
-\font\ssecsf=cmss10 scaled \magstep1
-\let\ssecbf=\ssecrm
-
-\def\textfonts{\let\rm=\tenrm\let\it=\tenit\let\sl=\tensl\let\bf=\tenbf%
-\let\sc=\tensc\let\sf=\tensf}
-\def\chapfonts{\let\rm=\chaprm\let\it=\chapit\let\sl=\chapsl\let\bf=\chapbf\let\tt=\chaptt\let\sf=\chapsf}
-\def\secfonts{\let\rm=\secrm\let\it=\secit\let\sl=\secsl\let\bf=\secbf\let\tt=\sectt\let\sf=\secsf}
-\def\subsecfonts{\let\rm=\ssecrm\let\it=\ssecit\let\sl=\ssecsl\let\bf=\ssecbf\let\tt=\ssectt\let\sf=\ssecsf}
 % Count depth in font-changes, for error checks
 \newcount\fontdepth \fontdepth=0
 
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}
+\setfont\shortcontbf\bfshape{10}{\magstep1}  % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
+
 %% Add scribe-like font environments, plus @l for inline lisp (usually sans
 %% serif) and @ii for TeX italic
 
-\def\i#1{{\sl #1}}
-\let\var=\i
-\let\dfn=\i
-\let\emph=\i
-\let\cite=\i
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+                    \ptexslash\fi\fi\fi}
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
 
+% like \smartslanted except unconditionally uses \ttsl.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally use \sl.  We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\var=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% @b, explicit bold.
 \def\b#1{{\bf #1}}
 \let\strong=\b
 
-\def\t#1{{\tt \rawbackslash \frenchspacing #1}\null}
-\let\ttfont = \t
-\let\kbd=\t
-\let\code=\t
-\def\samp #1{`{\tt \rawbackslash \frenchspacing #1}'\null}
-\def\key #1{{\tt \uppercase{#1}}\null}
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph.  Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dotChar   = `\.
+\chardef\exclamChar= `\!
+\chardef\questChar = `\?
+\chardef\semiChar  = `\;
+%
+\catcode`@=11
+  \def\plainfrenchspacing{%
+    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+    \def\endofsentencespacefactor{1000}% for @. and friends
+  }
+  \def\plainnonfrenchspacing{%
+    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+    \def\endofsentencespacefactor{3000}% for @. and friends
+  }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+\def\t#1{%
+  {\tt \rawbackslash \plainfrenchspacing #1}%
+  \null
+}
+\def\samp#1{`\tclose{#1}'\null}
+\setfont\keyrm\rmshape{8}{1000}
+\font\keysy=cmsy9
+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+    \vbox{\hrule\kern-0.4pt
+     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+    \kern-0.4pt\hrule}%
+  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+% The old definition, with no lozenge:
+%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
 \def\ctrl #1{{\tt \rawbackslash \hat}#1}
 
+% @file, @option are the same as @samp.
 \let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+  {%
+    % Change normal interword space to be same as for the current font.
+    \spaceskip = \fontdimen2\font
+    %
+    % Switch to typewriter.
+    \tt
+    %
+    % But `\ ' produces the large typewriter interword space.
+    \def\ {{\spaceskip = 0pt{} }}%
+    %
+    % Turn off hyphenation.
+    \nohyphenation
+    %
+    \rawbackslash
+    \plainfrenchspacing
+    #1%
+  }%
+  \null
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+%  -- rms.
+{
+  \catcode`\-=\active
+  \catcode`\_=\active
+  %
+  \global\def\code{\begingroup
+    \catcode`\-=\active  \catcode`\_=\active
+    \ifallowcodebreaks
+     \let-\codedash
+     \let_\codeunder
+    \else
+     \let-\realdash
+     \let_\realunder
+    \fi
+    \codex
+  }
+}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
+  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+  % will therefore expand the active definition of _, which is us
+  % (inside @code that is), therefore an endless loop.
+  \ifusingtt{\ifmmode
+               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+             \else\normalunderscore \fi
+             \discretionary{}{}{}}%
+            {\_}%
+}
+\def\codex #1{\tclose{#1}\endgroup}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__.  This is undesirable in
+% some manuals, especially if they don't have long identifiers in
+% general.  @allowcodebreaks provides a way to control this.
+% 
+\newif\ifallowcodebreaks  \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\keywordtrue
+    \allowcodebreakstrue
+  \else\ifx\txiarg\keywordfalse
+    \allowcodebreaksfalse
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
+  \fi\fi
+}
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+%   `example' (@kbd uses ttsl only inside of @example and friends),
+%   or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\worddistinct
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+  \else\ifx\txiarg\wordexample
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+  \else\ifx\txiarg\wordcode
+    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
+  \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct.'
+\kbdinputstyle distinct
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\look}}\fi
+\else{\tclose{\kbdfont\look}}\fi}
+
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+\let\indicateurl=\code
+\let\env=\code
+\let\command=\code
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+  \unsepspaces
+  \pdfurl{#1}%
+  \setbox0 = \hbox{\ignorespaces #3}%
+  \ifdim\wd0 > 0pt
+    \unhbox0 % third arg given, show only that
+  \else
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0 > 0pt
+      \ifpdf
+        \unhbox0             % PDF: 2nd arg given, show only it
+      \else
+        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+      \fi
+    \else
+      \code{#1}% only url given, so show it
+    \fi
+  \fi
+  \endlink
+\endgroup}
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+  \def\email#1{\doemail#1,,\finish}
+  \def\doemail#1,#2,#3\finish{\begingroup
+    \unsepspaces
+    \pdfurl{mailto:#1}%
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+    \endlink
+  \endgroup}
+\else
+  \let\email=\uref
+\fi
 
-\def\l#1{{\li #1}\null}
+% Check if we are currently using a typewriter font.  Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
 
-\def\r#1{{\rm #1}}
-\def\s#1{{\sc #1}}
-\def\ii#1{{\it #1}}
+% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find.  We need it for
+% Polish suppressed-l.  --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}}              % roman font
+\def\sc#1{{\smallcaps#1}}       % smallcaps font
+\def\ii#1{{\it #1}}             % italic font
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+% 
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+  {\selectfonts\lsize #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
 
-\def\titlefont#1{{\titlerm #1}}
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+% 
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+  {\plainfrenchspacing #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
 
-\def\titlepage{\begingroup \parindent=0pt \hbox{}%
-\let\oldpage=\page
-\def\page{\oldpage \hbox{}}}
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+% 
+% Although only regular is the truly official Euro symbol, we ignore
+% that.  The Euro is designed to be slightly taller than the regular
+% font height.
+% 
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+% 
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+% 
+% Also doesn't work in math.  Do we need to do math with euro symbols?
+% Hope not.
+% 
+% 
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+  % We set the font at each command, rather than predefining it in
+  % \textfonts and the other font-switching commands, so that
+  % installations which never need the symbol don't have to have the
+  % font installed.
+  % 
+  % There is only one designed size (nominal 10pt), so we always scale
+  % that to the current nominal size.
+  % 
+  % By the way, simply using "at 1em" works for cmr10 and the like, but
+  % does not work for cmbx10 and other extended/shrunken fonts.
+  % 
+  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+  %
+  \ifx\curfontstyle\bfstylename 
+    % bold:
+    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+  \else 
+    % regular:
+    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+  \fi
+  \thiseurofont
+}
 
-\def\Etitlepage{\endgroup\page\HEADINGSon}
+% @registeredsymbol - R in a circle.  The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+               \hfil\crcr\Orb}}%
+    }$%
+}
 
-% Make altmode in file print out right
+% Laurent Siebenmann reports \Orb undefined with:
+%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
+% so we'll define it if necessary.
+% 
+\ifx\Orb\undefined
+\def\Orb{\mathhexbox20D}
+\fi
 
-\catcode `\^^[=\active \def^^[{$\diamondsuit$}
 
 \message{page headings,}
 
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page.  Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+        \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+  % Open one extra group, as we want to close it in the middle of \Etitlepage.
+  \begingroup
+    \parindent=0pt \textfonts
+    % Leave some space at the very top of the page.
+    \vglue\titlepagetopglue
+    % No rule at page bottom unless we print one at the top with @title.
+    \finishedtitlepagetrue
+    %
+    % Most title ``pages'' are actually two pages long, with space
+    % at the top of the second.  We don't want the ragged left on the second.
+    \let\oldpage = \page
+    \def\page{%
+      \iffinishedtitlepage\else
+        \finishtitlepage
+      \fi
+      \let\page = \oldpage
+      \page
+      \null
+    }%
+}
+
+\def\Etitlepage{%
+    \iffinishedtitlepage\else
+       \finishtitlepage
+    \fi
+    % It is important to do the page break before ending the group,
+    % because the headline and footline are only empty inside the group.
+    % If we use the new definition of \page, we always get a blank page
+    % after the title page, which we certainly don't want.
+    \oldpage
+  \endgroup
+  %
+  % Need this before the \...aftertitlepage checks so that if they are
+  % in effect the toc pages will come out with page numbers.
+  \HEADINGSon
+  %
+  % If they want short, they certainly want long too.
+  \ifsetshortcontentsaftertitlepage
+    \shortcontents
+    \contents
+    \global\let\shortcontents = \relax
+    \global\let\contents = \relax
+  \fi
+  %
+  \ifsetcontentsaftertitlepage
+    \contents
+    \global\let\contents = \relax
+    \global\let\shortcontents = \relax
+  \fi
+}
+
+\def\finishtitlepage{%
+  \vskip4pt \hrule height 2pt width \hsize
+  \vskip\titlepagebottomglue
+  \finishedtitlepagetrue
+}
+
+%%% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+               \let\tt=\authortt}
+
+\parseargdef\title{%
+  \checkenv\titlepage
+  \leftline{\titlefonts\rm #1}
+  % print a rule at the page bottom also.
+  \finishedtitlepagefalse
+  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+  \checkenv\titlepage
+  {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+  \def\temp{\quotation}%
+  \ifx\thisenv\temp
+    \def\quotationauthor{#1}% printed in \Equotation.
+  \else
+    \checkenv\titlepage
+    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+    {\authorfont \leftline{#1}}%
+  \fi
+}
+
+
 %%% Set up page headings and footings.
 
 \let\thispage=\folio
 
-\newtoks \evenheadline    % Token sequence for heading line of even pages
-\newtoks \oddheadline     % Token sequence for heading line of odd pages
-\newtoks \evenfootline    % Token sequence for footing line of even pages
-\newtoks \oddfootline     % Token sequence for footing line of odd pages
+\newtoks\evenheadline    % headline on even pages
+\newtoks\oddheadline     % headline on odd pages
+\newtoks\evenfootline    % footline on even pages
+\newtoks\oddfootline     % footline on odd pages
 
-% Now make Tex use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}}
+% Now make TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+                            \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+                            \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
 
 % Commands to set those variables.
 % For example, this is what  @headings on  does
 % @evenfooting @thisfile||
 % @oddfooting ||@thisfile
 
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
 
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
 \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
 \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish}
-\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
 
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
 \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
 
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+  %
+  % Leave some space for the footline.  Hopefully ok to assume
+  % @evenfooting will not be used by itself.
+  \global\advance\pageheight by -\baselineskip
+  \global\advance\vsize by -\baselineskip
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
 
-\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish}
-\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
-\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-%
-}% unbind the catcode of @.
 
-% @headings on   turns them on.
-% @headings off  turns them off.
-% By default, they are off.
+% @headings double      turns headings on for double-sided printing.
+% @headings single      turns headings on for single-sided printing.
+% @headings off         turns them off.
+% @headings on          same as @headings double, retained for compatibility.
+% @headings after       turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
 
 \def\headings #1 {\csname HEADINGS#1\endcsname}
 
-\def\HEADINGSoff{
+\def\HEADINGSoff{%
 \global\evenheadline={\hfil} \global\evenfootline={\hfil}
 \global\oddheadline={\hfil} \global\oddfootline={\hfil}}
 \HEADINGSoff
-% When we turn headings on, set the page number to 1,
-% Put current file name in lower left corner,
-% Put chapter name on inside top of right hand pages, document
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
 % title on inside top of left hand pages, and page numbers on outside top
 % edge of all pages.
-\def\HEADINGSon{
-\pagealignmacro
+\def\HEADINGSdouble{%
 \global\pageno=1
 \global\evenfootline={\hfil}
 \global\oddfootline={\hfil}
 \global\evenheadline={\line{\folio\hfil\thistitle}}
 \global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
 }
 
 % Subroutines used in generating headings
-% Produces Day Month Year style of output.
-\def\today{\number\day\space
-\ifcase\month\or
-January\or February\or March\or April\or May\or June\or
-July\or August\or September\or October\or November\or December\fi
-\space\number\year}
-
-% Use this if you want the Month Day, Year style of output.
-%\def\today{\ifcase\month\or
-%January\or February\or March\or April\or May\or June\or
-%July\or August\or September\or October\or November\or December\fi
-%\space\number\day, \number\year}
-
-% @settitle line...  specifies the title of the document, for headings
-% It generates no output of its own
-
-\def\thistitle{No Title}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\undefined
+\def\today{%
+  \number\day\space
+  \ifcase\month
+  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+  \fi
+  \space\number\year}
+\fi
 
-\message{tables,}
+% @settitle line...  specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
 
-% Tables -- @table, @ftable, @item(x), @kitem(x), @xitem(x).
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
 
 % default indentation of table text
 \newdimen\tableindent \tableindent=.8in
@@ -631,178 +2400,804 @@ July\or August\or September\or October\or November\or December\fi
 % used internally for \itemindent minus \itemmargin
 \newdimen\itemmax
 
-% Note @table and @ftable define @item, @itemx, etc., with these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+  \advance\hsize by -\rightskip
+  \advance\hsize by -\tableindent
+  \setbox0=\hbox{\itemindicate{#1}}%
+  \itemindex{#1}%
+  \nobreak % This prevents a break before @itemx.
+  %
+  % If the item text does not fit in the space we have, put it on a line
+  % by itself, and do not allow a page break either before or after that
+  % line.  We do not start a paragraph here because then if the next
+  % command is, e.g., @kindex, the whatsit would get put into the
+  % horizontal list on a line by itself, resulting in extra blank space.
+  \ifdim \wd0>\itemmax
+    %
+    % Make this a paragraph so we get the \parskip glue and wrapping,
+    % but leave it ragged-right.
+    \begingroup
+      \advance\leftskip by-\tableindent
+      \advance\hsize by\tableindent
+      \advance\rightskip by0pt plus1fil
+      \leavevmode\unhbox0\par
+    \endgroup
+    %
+    % We're going to be starting a paragraph, but we don't want the
+    % \parskip glue -- logically it's part of the @item we just started.
+    \nobreak \vskip-\parskip
+    %
+    % Stop a page break at the \parskip glue coming up.  However, if
+    % what follows is an environment such as @example, there will be no
+    % \parskip glue; then the negative vskip we just inserted would
+    % cause the example and the item to crash together.  So we use this
+    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+    % \parskip glue after all.  Section titles are handled this way also.
+    % 
+    \penalty 10001
+    \endgroup
+    \itemxneedsnegativevskipfalse
+  \else
+    % The item text fits into the space.  Start a paragraph, so that the
+    % following text (if any) will end up on the same line.
+    \noindent
+    % Do this with kerns and \unhbox so that if there is a footnote in
+    % the item text, it can migrate to the main vertical list and
+    % eventually be printed.
+    \nobreak\kern-\tableindent
+    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+    \unhbox0
+    \nobreak\kern\dimen0
+    \endgroup
+    \itemxneedsnegativevskiptrue
+  \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+  \let\itemindex\gobble
+  \tablecheck{table}%
+}
+\envdef\ftable{%
+  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+  \tablecheck{ftable}%
+}
+\envdef\vtable{%
+  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+  \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+  \ifnum \the\catcode`\^^M=\active
+    \endgroup
+    \errmessage{This command won't work in this context; perhaps the problem is
+      that we are \inenvironment\thisenv}%
+    \def\next{\doignore{#1}}%
+  \else
+    \let\next\tablex
+  \fi
+  \next
+}
+\def\tablex#1{%
+  \def\itemindicate{#1}%
+  \parsearg\tabley
+}
+\def\tabley#1{%
+  {%
+    \makevalueexpandable
+    \edef\temp{\noexpand\tablez #1\space\space\space}%
+    \expandafter
+  }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+  \aboveenvbreak
+  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+  \ifnum 0#2>0 \tableindent=#2\mil \fi
+  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+  \itemmax=\tableindent
+  \advance \itemmax by -\itemmargin
+  \advance \leftskip by \tableindent
+  \exdentamount=\tableindent
+  \parindent = 0pt
+  \parskip = \smallskipamount
+  \ifdim \parskip=0pt \parskip=2pt \fi
+  \let\item = \internalBitem
+  \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+  \aboveenvbreak
+  \itemmax=\itemindent
+  \advance\itemmax by -\itemmargin
+  \advance\leftskip by \itemindent
+  \exdentamount=\itemindent
+  \parindent=0pt
+  \parskip=\smallskipamount
+  \ifdim\parskip=0pt \parskip=2pt \fi
+  \def\itemcontents{#1}%
+  % @itemize with no arg is equivalent to @itemize @bullet.
+  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+  \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+  \advance\itemno by 1  % for enumerations
+  {\let\par=\endgraf \smallbreak}% reasonable place to break
+  {%
+   % If the document has an @itemize directly after a section title, a
+   % \nobreak will be last on the list, and \sectionheading will have
+   % done a \vskip-\parskip.  In that case, we don't want to zero
+   % parskip, or the item text will crash with the heading.  On the
+   % other hand, when there is normal text preceding the item (as there
+   % usually is), we do want to zero parskip, or there would be too much
+   % space.  In that case, we won't have a \nobreak before.  At least
+   % that's the theory.
+   \ifnum\lastpenalty<10000 \parskip=0in \fi
+   \noindent
+   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+   \vadjust{\penalty 1200}}% not good to break after first line of item.
+  \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list.  No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+  % If we were given no argument, pretend we were given `1'.
+  \def\thearg{#1}%
+  \ifx\thearg\empty \def\thearg{1}\fi
+  %
+  % Detect if the argument is a single token.  If so, it might be a
+  % letter.  Otherwise, the only valid thing it can be is a number.
+  % (We will always have one token, because of the test we just made.
+  % This is a good thing, since \splitoff doesn't work given nothing at
+  % all -- the first parameter is undelimited.)
+  \expandafter\splitoff\thearg\endmark
+  \ifx\rest\empty
+    % Only one token in the argument.  It could still be anything.
+    % A ``lowercase letter'' is one whose \lccode is nonzero.
+    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+    %   not equal to itself.
+    % Otherwise, we assume it's a number.
+    %
+    % We need the \relax at the end of the \ifnum lines to stop TeX from
+    % continuing to look for a <number>.
+    %
+    \ifnum\lccode\expandafter`\thearg=0\relax
+      \numericenumerate % a number (we hope)
+    \else
+      % It's a letter.
+      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+        \lowercaseenumerate % lowercase letter
+      \else
+        \uppercaseenumerate % uppercase letter
+      \fi
+    \fi
+  \else
+    % Multiple tokens in the argument.  We hope it's a number.
+    \numericenumerate
+  \fi
+}
+
+% An @enumerate whose labels are integers.  The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+  \itemno = \thearg
+  \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+  \itemno = \expandafter`\thearg
+  \startenumeration{%
+    % Be sure we're not beyond the end of the alphabet.
+    \ifnum\itemno=0
+      \errmessage{No more lowercase letters in @enumerate; get a bigger
+                  alphabet}%
+    \fi
+    \char\lccode\itemno
+  }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+  \itemno = \expandafter`\thearg
+  \startenumeration{%
+    % Be sure we're not beyond the end of the alphabet.
+    \ifnum\itemno=0
+      \errmessage{No more uppercase letters in @enumerate; get a bigger
+                  alphabet}
+    \fi
+    \char\uccode\itemno
+  }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments.  Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+  \advance\itemno by -1
+  \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble.  Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+%   @multitable @columnfractions .25 .3 .45
+%   @item ...
+%
+%   Numbers following @columnfractions are the percent of the total
+%   current hsize to be used for each column. You may use as many
+%   columns as desired.
+
+
+% Or use a template:
+%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+%   @item ...
+%   using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+%   @item first col stuff @tab second col stuff @tab third col
+%   @item
+%   first col stuff
+%   @tab
+%   second col stuff
+%   @tab
+%   third col
+%   @item first col stuff @tab second col stuff
+%   @tab Many paragraphs of text may be used in any column.
+%
+%         They will wrap at the width determined by the template.
+%   @item@tab@tab This will be in third column.
+%   @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+%                                                            to baseline.
+%   0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1.  We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+  \global\advance\colcount by 1
+  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+  \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+  \def\firstarg{#1}%
+  \ifx\firstarg\xendsetuptable
+    \let\go = \relax
+  \else
+    \ifx\firstarg\xcolumnfractions
+      \global\setpercenttrue
+    \else
+      \ifsetpercent
+         \let\go\pickupwholefraction
+      \else
+         \global\advance\colcount by 1
+         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+                   % separator; typically that is always in the input, anyway.
+         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+      \fi
+    \fi
+    \ifx\go\pickupwholefraction
+      % Put the argument back for the \pickupwholefraction call, so
+      % we'll always have a period there to be parsed.
+      \def\go{\pickupwholefraction#1}%
+    \else
+      \let\go = \setuptable
+    \fi%
+  \fi
+  \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry.  Note that \everycr resets \everytab.
+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
+%
+% A \tab used to include \hskip1sp.  But then the space in a template
+% line is not enough.  That is bad.  So let's go back to just `&' until
+% we encounter the problem it was intended to solve again.
+%                                      --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab  % insert after every tab.
+%
+\envdef\multitable{%
+  \vskip\parskip
+  \startsavinginserts
+  %
+  % @item within a multitable starts a normal row.
+  % We use \def instead of \let so that if one of the multitable entries
+  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+  % \endtemplate) expanding \doitemize.
+  \def\item{\crcr}%
+  %
+  \tolerance=9500
+  \hbadness=9500
+  \setmultitablespacing
+  \parskip=\multitableparskip
+  \parindent=\multitableparindent
+  \overfullrule=0pt
+  \global\colcount=0
+  %
+  \everycr = {%
+    \noalign{%
+      \global\everytab={}%
+      \global\colcount=0 % Reset the column counter.
+      % Check for saved footnotes, etc.
+      \checkinserts
+      % Keeps underfull box messages off when table breaks over pages.
+      %\filbreak
+       % Maybe so, but it also creates really weird page breaks when the
+       % table breaks over pages. Wouldn't \vfil be better?  Wait until the
+       % problem manifests itself, so it can be fixed for real --karl.
+    }%
+  }%
+  %
+  \parsearg\domultitable
+}
+\def\domultitable#1{%
+  % To parse everything between @multitable and @item:
+  \setuptable#1 \endsetuptable
+  %
+  % This preamble sets up a generic column definition, which will
+  % be used as many times as user calls for columns.
+  % \vtop will set a single line and will also let text wrap and
+  % continue for many paragraphs if desired.
+  \halign\bgroup &%
+    \global\advance\colcount by 1
+    \multistrut
+    \vtop{%
+      % Use the current \colcount to find the correct column width:
+      \hsize=\expandafter\csname col\the\colcount\endcsname
+      %
+      % In order to keep entries from bumping into each other
+      % we will add a \leftskip of \multitablecolspace to all columns after
+      % the first one.
+      %
+      % If a template has been used, we will add \multitablecolspace
+      % to the width of each template entry.
+      %
+      % If the user has set preamble in terms of percent of \hsize we will
+      % use that dimension as the width of the column, and the \leftskip
+      % will keep entries from bumping into each other.  Table will start at
+      % left margin and final column will justify at right margin.
+      %
+      % Make sure we don't inherit \rightskip from the outer environment.
+      \rightskip=0pt
+      \ifnum\colcount=1
+       % The first column will be indented with the surrounding text.
+       \advance\hsize by\leftskip
+      \else
+       \ifsetpercent \else
+         % If user has not set preamble in terms of percent of \hsize
+         % we will advance \hsize by \multitablecolspace.
+         \advance\hsize by \multitablecolspace
+       \fi
+       % In either case we will make \leftskip=\multitablecolspace:
+      \leftskip=\multitablecolspace
+      \fi
+      % Ignoring space at the beginning and end avoids an occasional spurious
+      % blank line, when TeX decides to break the line at the space before the
+      % box from the multistrut, so the strut ends up on a line by itself.
+      % For example:
+      % @multitable @columnfractions .11 .89
+      % @item @code{#}
+      % @tab Legal holiday which is valid in major parts of the whole country.
+      % Is automatically provided with highlighting sequences respectively
+      % marking characters.
+      \noindent\ignorespaces##\unskip\multistrut
+    }\cr
+}
+\def\Emultitable{%
+  \crcr
+  \egroup % end the \halign
+  \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+  \def\multistrut{\strut}% just use the standard line spacing
+  %
+  % Compute \multitablelinespace (if not defined by user) for use in
+  % \multitableparskip calculation.  We used define \multistrut based on
+  % this, but (ironically) that caused the spacing to be off.
+  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+%% Test to see if parskip is larger than space between lines of
+%% table. If not, do nothing.
+%%        If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+                                      %% than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+                                      %% than skip between lines in the table.
+\fi}
+
 
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\par \parsearg\itemzzz}
+\message{conditionals,}
 
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \par \parsearg\xitemzzz}
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed.  They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested.  But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+  \expandafter\let\csname #1\endcsname = \relax
+  \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+  % Scan in ``verbatim'' mode:
+  \obeylines
+  \catcode`\@ = \other
+  \catcode`\{ = \other
+  \catcode`\} = \other
+  %
+  % Make sure that spaces turn into tokens that match what \doignoretext wants.
+  \spaceisspace
+  %
+  % Count number of #1's that we've seen.
+  \doignorecount = 0
+  %
+  % Swallow text until we reach the matching `@end #1'.
+  \dodoignore{#1}%
+}
 
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\par \parsearg\kitemzzz}
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+  \obeylines %
+  %
+  \gdef\dodoignore#1{%
+    % #1 contains the command name as a string, e.g., `ifinfo'.
+    %
+    % Define a command to find the next `@end #1'.
+    \long\def\doignoretext##1^^M@end #1{%
+      \doignoretextyyy##1^^M@#1\_STOP_}%
+    %
+    % And this command to find another #1 command, at the beginning of a
+    % line.  (Otherwise, we would consider a line `@c @ifset', for
+    % example, to count as an @ifset for nesting.)
+    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+    %
+    % And now expand that command.
+    \doignoretext ^^M%
+  }%
+}
 
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}\itemzzz {#1}}
+\def\doignoreyyy#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty                      % Nothing found.
+    \let\next\doignoretextzzz
+  \else                                        % Found a nested condition, ...
+    \advance\doignorecount by 1
+    \let\next\doignoretextyyy          % ..., look for another.
+    % If we're here, #1 ends with ^^M\ifinfo (for example).
+  \fi
+  \next #1% the token \_STOP_ is present just after this macro.
+}
 
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}\itemzzz {#1}}
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+  \ifnum\doignorecount = 0     % We have just found the outermost @end.
+    \let\next\enddoignore
+  \else                                % Still inside a nested condition.
+    \advance\doignorecount by -1
+    \let\next\doignoretext      % Look for the next @end.
+  \fi
+  \next
+}
 
-\def\itemzzz #1{\begingroup %
-\advance \hsize by -\rightskip %
-\advance \hsize by -\leftskip %
-\setbox0=\hbox{\itemfont{#1}}%
-\itemindex{#1}%
-\parskip=0in %
-\noindent %
-\ifdim \wd0>\itemmax %
-\vadjust{\penalty 10000}%
-\hbox to \hsize{\hskip -\tableindent\box0\hss}\ %
-\else %
-\hbox to 0pt{\hskip -\tableindent\box0\hss}%
-\fi %
-\endgroup %
-}
-
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-%% Contains a kludge to get @end[description] to work
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1        \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1        \endtabley}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Neccessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\endgroup\afterenvbreak}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
+% Finish off ignored text.
+{ \obeylines%
+  % Ignore anything after the last `@end #1'; this matters in verbatim
+  % environments, where otherwise the newline after an ignored conditional
+  % would result in a blank line in the output.
+  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
 }
 
-% This is the counter used by @enumerate, which is really @itemize
 
-\newcount \itemno
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+  {%
+    \makevalueexpandable
+    \def\temp{#2}%
+    \edef\next{\gdef\makecsname{SET#1}}%
+    \ifx\temp\empty
+      \next{}%
+    \else
+      \setzzz#2\endsetzzz
+    \fi
+  }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
 
-\def\itemize{\parsearg\itemizezzz}
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+  {%
+    \makevalueexpandable
+    \global\expandafter\let\csname SET#1\endcsname=\relax
+  }%
+}
 
-\def\itemizezzz #1{\itemizey {#1}{\Eitemize}}
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+  \catcode`\- = \active \catcode`\_ = \active
+  %
+  \gdef\makevalueexpandable{%
+    \let\value = \expandablevalue
+    % We don't want these characters active, ...
+    \catcode`\-=\other \catcode`\_=\other
+    % ..., but we might end up with active ones in the argument if
+    % we're called from @code, as @code{@value{foo-bar_}}, though.
+    % So \let them to their normal equivalents.
+    \let-\realdash \let_\normalunderscore
+  }
+}
 
-\def\itemizey #1#2{%
-\aboveenvbreak %
-\begingroup %
-\itemno = 0 %
-\itemmax=\itemindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \itemindent %
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def#2{\endgraf\endgroup\afterenvbreak}%
-\def\itemcontents{#1}%
-\let\item=\itemizeitem}
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file.  This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    {[No value for ``#1'']}%
+    \message{Variable `#1', used in @value, is not set.}%
+  \else
+    \csname SET#1\endcsname
+  \fi
+}
 
-\def\bullet{$\ptexbullet$}
-\def\minus{$-$}
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+  {%
+    \makevalueexpandable
+    \let\next=\empty
+    \expandafter\ifx\csname SET#2\endcsname\relax
+      #1% If not set, redefine \next.
+    \fi
+    \expandafter
+  }\next
+}
+\def\ifsetfail{\doignore{ifset}}
 
-\def\enumerate{\itemizey{\the\itemno.}\Eenumerate\flushcr}
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
 
-% Definition of @item while inside @itemize.
+% @dircategory CATEGORY  -- specify a category of the dir file
+% which this file should belong to.  Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
 
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{\in hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 300}}%
-\flushcr}
 
 \message{indexing,}
 % Index generation facilities
 
 % Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
 
 % \newindex {foo} defines an index named foo.
 % It automatically defines \fooindex such that
 % \fooindex ...rest of line... puts an entry in the index foo.
 % It also defines \fooindfile to be the number of the output channel for
-% the file that        accumulates this index.  The file's extension is foo.
+% the file that accumulates this index.  The file's extension is foo.
 % The name of an index should be no more than 2 characters long
 % for the sake of vms.
-
-\def\newindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1        % Open the file
-\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
-\noexpand\doindex {#1}}
+%
+\def\newindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
+    \noexpand\doindex{#1}}
 }
 
 % @defindex foo  ==  \newindex{foo}
-
+%
 \def\defindex{\parsearg\newindex}
 
 % Define @defcodeindex, like @defindex except put all entries in @code.
-
-\def\newcodeindex #1{
-\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file
-\openout \csname#1indfile\endcsname \jobname.#1        % Open the file
-\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
-\noexpand\docodeindex {#1}}
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%
+    \noexpand\docodeindex{#1}}%
 }
 
-\def\defcodeindex{\parsearg\newcodeindex}
 
 % @synindex foo bar    makes index foo feed into index bar.
 % Do this instead of @defindex foo if you don't want it as a separate index.
-\def\synindex #1 #2 {%
-\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
-\noexpand\doindex {#2}}%
-}
-
+%
 % @syncodeindex foo bar   similar, but put all entries made for index foo
 % inside @code.
-\def\syncodeindex #1 #2 {%
-\expandafter\xdef\csname#1index\endcsname{%    % Define \xxxindex
-\noexpand\docodeindex {#2}}%
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+  % Only do \closeout if we haven't already done it, else we'll end up
+  % closing the target index.
+  \expandafter \ifx\csname donesynindex#2\endcsname \undefined
+    % The \closeout helps reduce unnecessary open files; the limit on the
+    % Acorn RISC OS is a mere 16 files.
+    \expandafter\closeout\csname#2indfile\endcsname
+    \expandafter\let\csname\donesynindex#2\endcsname = 1
+  \fi
+  % redefine \fooindfile:
+  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+  \expandafter\let\csname#2indfile\endcsname=\temp
+  % redefine \fooindex:
+  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
 }
 
 % Define \doindex, the driver for all \fooindex macros.
@@ -822,74 +3217,394 @@ July\or August\or September\or October\or November\or December\fi
 \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
 \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
 
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
 \def\indexdummies{%
-\def\bf{\realbackslash bf }%
-\def\rm{\realbackslash rm }%
-\def\sl{\realbackslash sl }%
-\def\dots{\realbackslash dots }%
-\def\copyright{\realbackslash copyright }%
+  \escapechar = `\\     % use backslash in output files.
+  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+  \def\ {\realbackslash\space }%
+  % Need these in case \tex is in effect and \{ is a \delimiter again.
+  % But can't use \lbracecmd and \rbracecmd because texindex assumes
+  % braces and backslashes are used only as delimiters.
+  \let\{ = \mylbrace
+  \let\} = \myrbrace
+  %
+  % Do the redefinitions.
+  \commondummies
 }
 
-% \indexnofonts no-ops all font-change commands.
-% This is used when outputting the strings to sort the index by.
-\def\indexdummyfont#1{#1}
-\def\indexnofonts{%
-\let\code=\indexdummyfont
-\let\samp=\indexdummyfont
-\let\kbd=\indexdummyfont
-\let\key=\indexdummyfont
-\let\var=\indexdummyfont
+% For the aux and toc files, @ is the escape character.  So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files).  When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+  \def\@{@@}%
+  \def\ {@ }%
+  \let\{ = \lbraceatcmd
+  \let\} = \rbraceatcmd
+  %
+  % Do the redefinitions.
+  \commondummies
+  \otherbackslash
+}
+
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+  %
+  % \definedummyword defines \#1 as \string\#1\space, thus effectively
+  % preventing its expansion.  This is used only for control% words,
+  % not control letters, because the \space would be incorrect for
+  % control characters, but is needed to separate the control word
+  % from whatever follows.
+  %
+  % For control letters, we have \definedummyletter, which omits the
+  % space.
+  %
+  % These can be used both for control words that take an argument and
+  % those that do not.  If it is followed by {arg} in the input, then
+  % that will dutifully get written to the index (or wherever).
+  %
+  \def\definedummyword  ##1{\def##1{\string##1\space}}%
+  \def\definedummyletter##1{\def##1{\string##1}}%
+  \let\definedummyaccent\definedummyletter
+  %
+  \commondummiesnofonts
+  %
+  \definedummyletter\_%
+  %
+  % Non-English letters.
+  \definedummyword\AA
+  \definedummyword\AE
+  \definedummyword\L
+  \definedummyword\OE
+  \definedummyword\O
+  \definedummyword\aa
+  \definedummyword\ae
+  \definedummyword\l
+  \definedummyword\oe
+  \definedummyword\o
+  \definedummyword\ss
+  \definedummyword\exclamdown
+  \definedummyword\questiondown
+  \definedummyword\ordf
+  \definedummyword\ordm
+  %
+  % Although these internal commands shouldn't show up, sometimes they do.
+  \definedummyword\bf
+  \definedummyword\gtr
+  \definedummyword\hat
+  \definedummyword\less
+  \definedummyword\sf
+  \definedummyword\sl
+  \definedummyword\tclose
+  \definedummyword\tt
+  %
+  \definedummyword\LaTeX
+  \definedummyword\TeX
+  %
+  % Assorted special characters.
+  \definedummyword\bullet
+  \definedummyword\comma
+  \definedummyword\copyright
+  \definedummyword\registeredsymbol
+  \definedummyword\dots
+  \definedummyword\enddots
+  \definedummyword\equiv
+  \definedummyword\error
+  \definedummyword\euro
+  \definedummyword\expansion
+  \definedummyword\minus
+  \definedummyword\pounds
+  \definedummyword\point
+  \definedummyword\print
+  \definedummyword\result
+  %
+  % We want to disable all macros so that they are not expanded by \write.
+  \macrolist
+  %
+  \normalturnoffactive
+  %
+  % Handle some cases of @value -- where it does not contain any
+  % (non-fully-expandable) commands.
+  \makevalueexpandable
 }
 
-% To define \realbackslash, we must make \ not be an escape.
-% We must first make another character (@) an escape
-% so we do not become unable to do a definition.
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+\def\commondummiesnofonts{%
+  % Control letters and accents.
+  \definedummyletter\!%
+  \definedummyaccent\"%
+  \definedummyaccent\'%
+  \definedummyletter\*%
+  \definedummyaccent\,%
+  \definedummyletter\.%
+  \definedummyletter\/%
+  \definedummyletter\:%
+  \definedummyaccent\=%
+  \definedummyletter\?%
+  \definedummyaccent\^%
+  \definedummyaccent\`%
+  \definedummyaccent\~%
+  \definedummyword\u
+  \definedummyword\v
+  \definedummyword\H
+  \definedummyword\dotaccent
+  \definedummyword\ringaccent
+  \definedummyword\tieaccent
+  \definedummyword\ubaraccent
+  \definedummyword\udotaccent
+  \definedummyword\dotless
+  %
+  % Texinfo font commands.
+  \definedummyword\b
+  \definedummyword\i
+  \definedummyword\r
+  \definedummyword\sc
+  \definedummyword\t
+  %
+  % Commands that take arguments.
+  \definedummyword\acronym
+  \definedummyword\cite
+  \definedummyword\code
+  \definedummyword\command
+  \definedummyword\dfn
+  \definedummyword\emph
+  \definedummyword\env
+  \definedummyword\file
+  \definedummyword\kbd
+  \definedummyword\key
+  \definedummyword\math
+  \definedummyword\option
+  \definedummyword\pxref
+  \definedummyword\ref
+  \definedummyword\samp
+  \definedummyword\strong
+  \definedummyword\tie
+  \definedummyword\uref
+  \definedummyword\url
+  \definedummyword\var
+  \definedummyword\verb
+  \definedummyword\w
+  \definedummyword\xref
+}
 
-{\catcode`\@=0 \catcode`\\=\other
-@gdef@realbackslash{\}}
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names.  It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+  % Accent commands should become @asis.
+  \def\definedummyaccent##1{\let##1\asis}%
+  % We can just ignore other control letters.
+  \def\definedummyletter##1{\let##1\empty}%
+  % Hopefully, all control words can become @asis.
+  \let\definedummyword\definedummyaccent
+  %
+  \commondummiesnofonts
+  %
+  % Don't no-op \tt, since it isn't a user-level command
+  % and is used in the definitions of the active chars like <, >, |, etc.
+  % Likewise with the other plain tex font commands.
+  %\let\tt=\asis
+  %
+  \def\ { }%
+  \def\@{@}%
+  % how to handle braces?
+  \def\_{\normalunderscore}%
+  %
+  % Non-English letters.
+  \def\AA{AA}%
+  \def\AE{AE}%
+  \def\L{L}%
+  \def\OE{OE}%
+  \def\O{O}%
+  \def\aa{aa}%
+  \def\ae{ae}%
+  \def\l{l}%
+  \def\oe{oe}%
+  \def\o{o}%
+  \def\ss{ss}%
+  \def\exclamdown{!}%
+  \def\questiondown{?}%
+  \def\ordf{a}%
+  \def\ordm{o}%
+  %
+  \def\LaTeX{LaTeX}%
+  \def\TeX{TeX}%
+  %
+  % Assorted special characters.
+  % (The following {} will end up in the sort string, but that's ok.)
+  \def\bullet{bullet}%
+  \def\comma{,}%
+  \def\copyright{copyright}%
+  \def\registeredsymbol{R}%
+  \def\dots{...}%
+  \def\enddots{...}%
+  \def\equiv{==}%
+  \def\error{error}%
+  \def\euro{euro}%
+  \def\expansion{==>}%
+  \def\minus{-}%
+  \def\pounds{pounds}%
+  \def\point{.}%
+  \def\print{-|}%
+  \def\result{=>}%
+  %
+  % We need to get rid of all macros, leaving only the arguments (if present).
+  % Of course this is not nearly correct, but it is the best we can do for now.
+  % makeinfo does not expand macros in the argument to @deffn, which ends up
+  % writing an index entry, and texindex isn't prepared for an index sort entry
+  % that starts with \.
+  % 
+  % Since macro invocations are followed by braces, we can just redefine them
+  % to take a single TeX argument.  The case of a macro invocation that
+  % goes to end-of-line is not handled.
+  % 
+  \macrolist
+}
 
 \let\indexbackslash=0  %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
 
-\def\doind #1#2{%
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\count10=\lastpenalty %
-\escapechar=`\\%
-{\let\folio=0% Expand all macros now EXCEPT \folio
-\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
-% so it will be output as is; and it will print as backslash in the indx.
-%
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2}%
-}%
-% Now produce the complete index entry.  We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}}}%
-\temp }%
-\penalty\count10}}
-
-\def\dosubind #1#2#3{%
-{\indexdummies % Must do this here, since \bf, etc expand at this stage
-\count10=\lastpenalty %
-\escapechar=`\\%
-{\let\folio=0%
-\def\rawbackslashxx{\indexbackslash}%
-%
-% Now process the index-string once, with all font commands turned off,
-% to get the string to sort the index by.
-{\indexnofonts
-\xdef\temp1{#2 #3}%
-}%
-% Now produce the complete index entry.  We process the index-string again,
-% this time with font commands expanded, to get what to print in the index.
-\edef\temp{%
-\write \csname#1indfile\endcsname{%
-\realbackslash entry {\temp1}{\folio}{#2}{#3}}}%
-\temp }%
-\penalty\count10}}
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+  \iflinks
+  {%
+    % Store the main index entry text (including the third arg).
+    \toks0 = {#2}%
+    % If third arg is present, precede it with a space.
+    \def\thirdarg{#3}%
+    \ifx\thirdarg\empty \else
+      \toks0 = \expandafter{\the\toks0 \space #3}%
+    \fi
+    %
+    \edef\writeto{\csname#1indfile\endcsname}%
+    %
+    \ifvmode
+      \dosubindsanitize
+    \else
+      \dosubindwrite
+    \fi
+  }%
+  \fi
+}
+
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
+  % Put the index entry in the margin if desired.
+  \ifx\SETmarginindex\relax\else
+    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+  \fi
+  %
+  % Remember, we are within a group.
+  \indexdummies % Must do this here, since \bf, etc expand at this stage
+  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+      % so it will be output as is; and it will print as backslash.
+  %
+  % Process the index entry with all font commands turned off, to
+  % get the string to sort by.
+  {\indexnofonts
+   \edef\temp{\the\toks0}% need full expansion
+   \xdef\indexsorttmp{\temp}%
+  }%
+  %
+  % Set up the complete index entry, with both the sort key and
+  % the original text, including any font commands.  We write
+  % three arguments to \entry to the .?? file (four in the
+  % subentry case), texindex reduces to two when writing the .??s
+  % sorted result.
+  \edef\temp{%
+    \write\writeto{%
+      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+  }%
+  \temp
+}
+
+% Take care of unwanted page breaks:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again.  Otherwise, the whatsit generated by the
+% \write will make \lastskip zero.  The result is that sequences
+% like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode.  We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip.  \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip.  The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+% ..., ready, GO:
+%
+\def\dosubindsanitize{%
+  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+  \skip0 = \lastskip
+  \edef\lastskipmacro{\the\lastskip}%
+  \count255 = \lastpenalty
+  %
+  % If \lastskip is nonzero, that means the last item was a
+  % skip.  And since a skip is discardable, that means this
+  % -\skip0 glue we're inserting is preceded by a
+  % non-discardable item, therefore it is not a potential
+  % breakpoint, therefore no \nobreak needed.
+  \ifx\lastskipmacro\zeroskipmacro
+  \else
+    \vskip-\skip0
+  \fi
+  %
+  \dosubindwrite
+  %
+  \ifx\lastskipmacro\zeroskipmacro
+    % If \lastskip was zero, perhaps the last item was a penalty, and
+    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
+    % to re-insert the same penalty (values >10000 are used for various
+    % signals); since we just inserted a non-discardable item, any
+    % following glue (such as a \parskip) would be a breakpoint.  For example:
+    % 
+    %   @deffn deffn-whatever
+    %   @vindex index-whatever
+    %   Description.
+    % would allow a break between the index-whatever whatsit
+    % and the "Description." paragraph.
+    \ifnum\count255>9999 \penalty\count255 \fi
+  \else
+    % On the other hand, if we had a nonzero \lastskip,
+    % this make-up glue would be preceded by a non-discardable item
+    % (the whatsit from the \write), so we must insert a \nobreak.
+    \nobreak\vskip\skip0
+  \fi
+}
 
 % The index entry written in the file actually looks like
 %  \entry {sortstring}{page}{topic}
@@ -906,7 +3621,7 @@ July\or August\or September\or October\or November\or December\fi
 %  \secondary {subtopic}{pagelist}
 %     for each subtopic.
 
-% Define the user-accessible indexing commands 
+% Define the user-accessible indexing commands
 % @findex, @vindex, @kindex, @cindex.
 
 \def\findex {\fnindex}
@@ -923,284 +3638,682 @@ July\or August\or September\or October\or November\or December\fi
 
 % Define the macros used in formatting output of the sorted index material.
 
-% This is what you call to cause a particular index to get printed.
-% Write
-% @unnumbered Function Index
-% @printindex fn
-
-\def\printindex{\parsearg\doprintindex}
-
-\def\doprintindex#1{\tex %
-\catcode`\%=\other\catcode`\&=\other\catcode`\#=\other
-\catcode`\$=\other\catcode`\_=\other
-\catcode`\~=\other
-\def\indexbackslash{\rawbackslashxx}
-\indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt
-\begindoublecolumns
-\openin 1 \jobname.#1s
-\ifeof 1 \else \closein 1 \input \jobname.#1s
-\fi
-\enddoublecolumns
-\Etex}
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+  \dobreak \chapheadingskip{10000}%
+  %
+  \smallfonts \rm
+  \tolerance = 9500
+  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+  %
+  % See if the index file exists and is nonempty.
+  % Change catcode of @ here so that if the index file contains
+  % \initial {@}
+  % as its first line, TeX doesn't complain about mismatched braces
+  % (because it thinks @} is a control sequence).
+  \catcode`\@ = 11
+  \openin 1 \jobname.#1s
+  \ifeof 1
+    % \enddoublecolumns gets confused if there is no text in the index,
+    % and it loses the chapter title and the aux file entries for the
+    % index.  The easiest way to prevent this problem is to make sure
+    % there is some text.
+    \putwordIndexNonexistent
+  \else
+    %
+    % If the index file exists but is empty, then \openin leaves \ifeof
+    % false.  We have to make TeX try to read something from the file, so
+    % it can discover if there is anything in it.
+    \read 1 to \temp
+    \ifeof 1
+      \putwordIndexIsEmpty
+    \else
+      % Index files are almost Texinfo source, but we use \ as the escape
+      % character.  It would be better to use @, but that's too big a change
+      % to make right now.
+      \def\indexbackslash{\backslashcurfont}%
+      \catcode`\\ = 0
+      \escapechar = `\\
+      \begindoublecolumns
+      \input \jobname.#1s
+      \enddoublecolumns
+    \fi
+  \fi
+  \closein 1
+\endgroup}
 
 % These macros are used by the sorted index file itself.
 % Change them to control the appearance of the index.
 
-% Same as \bigskipamount except no shrink.
-% \balancecolumns gets confused if there is any shrink.
-\newskip\initialskipamount \initialskipamount 12pt plus4pt
+\def\initial#1{{%
+  % Some minor font changes for the special characters.
+  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+  %
+  % Remove any glue we may have, we'll be inserting our own.
+  \removelastskip
+  %
+  % We like breaks before the index initials, so insert a bonus.
+  \nobreak
+  \vskip 0pt plus 3\baselineskip
+  \penalty 0
+  \vskip 0pt plus -3\baselineskip
+  %
+  % Typeset the initial.  Making this add up to a whole number of
+  % baselineskips increases the chance of the dots lining up from column
+  % to column.  It still won't often be perfect, because of the stretch
+  % we need before each entry, but it's better.
+  %
+  % No shrink because it confuses \balancecolumns.
+  \vskip 1.67\baselineskip plus .5\baselineskip
+  \leftline{\secbf #1}%
+  % Do our best not to break after the initial.
+  \nobreak
+  \vskip .33\baselineskip plus .1\baselineskip
+}}
 
-\outer\def\initial #1{%
-{\let\tentt=\sectt \let\sf=\sectt
-\ifdim\lastskip<\initialskipamount
-\removelastskip \penalty-200 \vskip \initialskipamount\fi
-\line{\secbf#1\hfill}\kern 2pt\penalty3000}}
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin.  It is used for index
+% and table of contents entries.  The paragraph is indented by \leftskip.
+%
+% A straightforward implementation would start like this:
+%      \def\entry#1#2{...
+% But this frozes the catcodes in the argument, and can cause problems to
+% @code, which sets - active.  This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+%
+% The right solution is to prevent \entry from swallowing the whole text.
+%                                 --kasal, 21nov03
+\def\entry{%
+  \begingroup
+    %
+    % Start a new paragraph if necessary, so our assignments below can't
+    % affect previous text.
+    \par
+    %
+    % Do not fill out the last line with white space.
+    \parfillskip = 0in
+    %
+    % No extra space above this paragraph.
+    \parskip = 0in
+    %
+    % Do not prefer a separate line ending with a hyphen to fewer lines.
+    \finalhyphendemerits = 0
+    %
+    % \hangindent is only relevant when the entry text and page number
+    % don't both fit on one line.  In that case, bob suggests starting the
+    % dots pretty far over on the line.  Unfortunately, a large
+    % indentation looks wrong when the entry text itself is broken across
+    % lines.  So we use a small indentation and put up with long leaders.
+    %
+    % \hangafter is reset to 1 (which is the value we want) at the start
+    % of each paragraph, so we need not do anything with that.
+    \hangindent = 2em
+    %
+    % When the entry text needs to be broken, just fill out the first line
+    % with blank space.
+    \rightskip = 0pt plus1fil
+    %
+    % A bit of stretch before each entry for the benefit of balancing
+    % columns.
+    \vskip 0pt plus1pt
+    %
+    % Swallow the left brace of the text (first parameter):
+    \afterassignment\doentry
+    \let\temp =
+}
+\def\doentry{%
+    \bgroup % Instead of the swallowed brace.
+      \noindent
+      \aftergroup\finishentry
+      % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+    % #1 is the page number.
+    %
+    % The following is kludged to not output a line of dots in the index if
+    % there are no page numbers.  The next person who breaks this will be
+    % cursed by a Unix daemon.
+    \def\tempa{{\rm }}%
+    \def\tempb{#1}%
+    \edef\tempc{\tempa}%
+    \edef\tempd{\tempb}%
+    \ifx\tempc\tempd
+      \ %
+    \else
+      %
+      % If we must, put the page number on a line of its own, and fill out
+      % this line with blank space.  (The \hfil is overwhelmed with the
+      % fill leaders glue in \indexdotfill if the page number does fit.)
+      \hfil\penalty50
+      \null\nobreak\indexdotfill % Have leaders before the page number.
+      %
+      % The `\ ' here is removed by the implicit \unskip that TeX does as
+      % part of (the primitive) \par.  Without it, a spurious underfull
+      % \hbox ensues.
+      \ifpdf
+       \pdfgettoks#1.%
+       \ \the\toksA
+      \else
+       \ #1%
+      \fi
+    \fi
+    \par
+  \endgroup
+}
 
-\outer\def\entry #1#2{
-{\parfillskip=0in \parskip=0in \parindent=0in
-\hangindent=1in \hangafter=1%
-\noindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll #2\par
-}}
+% Like \dotfill except takes at least 1 em.
+\def\indexdotfill{\cleaders
+  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
 
 \def\primary #1{\line{#1\hfil}}
 
 \newskip\secondaryindent \secondaryindent=0.5cm
-
-\def\secondary #1#2{
-{\parfillskip=0in \parskip=0in
-\hangindent =1in \hangafter=1
-\noindent\hskip\secondaryindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll#2\par
+\def\secondary#1#2{{%
+  \parfillskip=0in
+  \parskip=0in
+  \hangindent=1in
+  \hangafter=1
+  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+  \ifpdf
+    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+  \else
+    #2
+  \fi
+  \par
 }}
 
-%% Define two-column mode, which is used in indexes.
-%% Adapted from the TeXBook, page 416
-\catcode `\@=11
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
 
 \newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+  % Grab any single-column material above us.
+  \output = {%
+    %
+    % Here is a possibility not foreseen in manmac: if we accumulate a
+    % whole lot of material, we might end up calling this \output
+    % routine twice in a row (see the doublecol-lose test, which is
+    % essentially a couple of indexes with @setchapternewpage off).  In
+    % that case we just ship out what is in \partialpage with the normal
+    % output routine.  Generally, \partialpage will be empty when this
+    % runs and this will be a no-op.  See the indexspread.tex test case.
+    \ifvoid\partialpage \else
+      \onepageout{\pagecontents\partialpage}%
+    \fi
+    %
+    \global\setbox\partialpage = \vbox{%
+      % Unvbox the main output page.
+      \unvbox\PAGE
+      \kern-\topskip \kern\baselineskip
+    }%
+  }%
+  \eject % run that output routine to set \partialpage
+  %
+  % Use the double-column output routine for subsequent pages.
+  \output = {\doublecolumnout}%
+  %
+  % Change the page size parameters.  We could do this once outside this
+  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+  % format, but then we repeat the same computation.  Repeating a couple
+  % of assignments once per index is clearly meaningless for the
+  % execution time, so we may as well do it in one place.
+  %
+  % First we halve the line length, less a little for the gutter between
+  % the columns.  We compute the gutter based on the line length, so it
+  % changes automatically with the paper format.  The magic constant
+  % below is chosen so that the gutter has the same value (well, +-<1pt)
+  % as it did when we hard-coded it.
+  %
+  % We put the result in a separate register, \doublecolumhsize, so we
+  % can restore it in \pagesofar, after \hsize itself has (potentially)
+  % been clobbered.
+  %
+  \doublecolumnhsize = \hsize
+    \advance\doublecolumnhsize by -.04154\hsize
+    \divide\doublecolumnhsize by 2
+  \hsize = \doublecolumnhsize
+  %
+  % Double the \vsize as well.  (We don't need a separate register here,
+  % since nobody clobbers \vsize.)
+  \vsize = 2\vsize
+}
 
-\newdimen\doublecolumnhsize  \doublecolumnhsize = 3.11in
-\newdimen\doublecolumnvsize  \doublecolumnvsize = 19.1in
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+  \splittopskip=\topskip \splitmaxdepth=\maxdepth
+  % Get the available space for the double columns -- the normal
+  % (undoubled) page height minus any material left over from the
+  % previous page.
+  \dimen@ = \vsize
+  \divide\dimen@ by 2
+  \advance\dimen@ by -\ht\partialpage
+  %
+  % box0 will be the left-hand column, box2 the right.
+  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+  \onepageout\pagesofar
+  \unvbox255
+  \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+  \unvbox\partialpage
+  %
+  \hsize = \doublecolumnhsize
+  \wd0=\hsize \wd2=\hsize
+  \hbox to\pagewidth{\box0\hfil\box2}%
+}
+%
+% All done with double columns.
+\def\enddoublecolumns{%
+  \output = {%
+    % Split the last of the double-column material.  Leave it on the
+    % current page, no automatic page break.
+    \balancecolumns
+    %
+    % If we end up splitting too much material for the current page,
+    % though, there will be another page break right after this \output
+    % invocation ends.  Having called \balancecolumns once, we do not
+    % want to call it again.  Therefore, reset \output to its normal
+    % definition right away.  (We hope \balancecolumns will never be
+    % called on to balance too much material, but if it is, this makes
+    % the output somewhat more palatable.)
+    \global\output = {\onepageout{\pagecontents\PAGE}}%
+  }%
+  \eject
+  \endgroup % started in \begindoublecolumns
+  %
+  % \pagegoal was set to the doubled \vsize above, since we restarted
+  % the current page.  We're now back to normal single-column
+  % typesetting, so reset \pagegoal to the normal \vsize (after the
+  % \endgroup where \vsize got restored).
+  \pagegoal = \vsize
+}
+%
+% Called at the end of the double column material.
+\def\balancecolumns{%
+  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+  \dimen@ = \ht0
+  \advance\dimen@ by \topskip
+  \advance\dimen@ by-\baselineskip
+  \divide\dimen@ by 2 % target to split to
+  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+  \splittopskip = \topskip
+  % Loop until we get a decent breakpoint.
+  {%
+    \vbadness = 10000
+    \loop
+      \global\setbox3 = \copy0
+      \global\setbox1 = \vsplit3 to \dimen@
+    \ifdim\ht3>\dimen@
+      \global\advance\dimen@ by 1pt
+    \repeat
+  }%
+  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+  \setbox0=\vbox to\dimen@{\unvbox1}%
+  \setbox2=\vbox to\dimen@{\unvbox3}%
+  %
+  \pagesofar
+}
+\catcode`\@ = \other
 
-\def\begindoublecolumns{\begingroup
-  \output={\global\setbox\partialpage=\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}\eject
-  \output={\doublecolumnout} \hsize=\doublecolumnhsize \vsize=\doublecolumnvsize}
-\def\enddoublecolumns{\output={\balancecolumns}\eject
-  \endgroup \pagegoal=\vsize}
 
-\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
-  \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage
-  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-  \onepageout\pagesofar \unvbox255 \penalty\outputpenalty}
-\def\pagesofar{\unvbox\partialpage %
-  \hsize=\doublecolumnhsize % have to restore this since output routine
-%            changes it to set cropmarks (P. A. MacKay, 12 Nov. 1986)
-  \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
-\def\balancecolumns{\setbox0=\vbox{\unvbox255} \dimen@=\ht0
-  \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by2 \splittopskip=\topskip
-  {\vbadness=10000 \loop \global\setbox3=\copy0
-    \global\setbox1=\vsplit3 to\dimen@
-    \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}
-  \setbox0=\vbox to\dimen@{\unvbox1}  \setbox2=\vbox to\dimen@{\unvbox3}
-  \pagesofar}
-
-\catcode `\@=\other
 \message{sectioning,}
-% Define chapters, sections, etc.
-
-\newcount \chapno
-\newcount \secno
-\newcount \subsecno
-\newcount \subsubsecno
+% Chapters, sections, etc.
+
+% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number".  We avoid collisions with chapter
+% numbers by starting them at 10000.  (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno        \secno=0
+\newcount\subsecno     \subsecno=0
+\newcount\subsubsecno  \subsubsecno=0
 
 % This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount \appendixno  \appendixno = `\@
-\def\appendixletter{\char\the\appendixno}
-
-\newwrite \contentsfile
-\openout \contentsfile = \jobname.toc
+\newcount\appendixno  \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+  \ifnum\appendixno=`A A%
+  \else\ifnum\appendixno=`B B%
+  \else\ifnum\appendixno=`C C%
+  \else\ifnum\appendixno=`D D%
+  \else\ifnum\appendixno=`E E%
+  \else\ifnum\appendixno=`F F%
+  \else\ifnum\appendixno=`G G%
+  \else\ifnum\appendixno=`H H%
+  \else\ifnum\appendixno=`I I%
+  \else\ifnum\appendixno=`J J%
+  \else\ifnum\appendixno=`K K%
+  \else\ifnum\appendixno=`L L%
+  \else\ifnum\appendixno=`M M%
+  \else\ifnum\appendixno=`N N%
+  \else\ifnum\appendixno=`O O%
+  \else\ifnum\appendixno=`P P%
+  \else\ifnum\appendixno=`Q Q%
+  \else\ifnum\appendixno=`R R%
+  \else\ifnum\appendixno=`S S%
+  \else\ifnum\appendixno=`T T%
+  \else\ifnum\appendixno=`U U%
+  \else\ifnum\appendixno=`V V%
+  \else\ifnum\appendixno=`W W%
+  \else\ifnum\appendixno=`X X%
+  \else\ifnum\appendixno=`Y Y%
+  \else\ifnum\appendixno=`Z Z%
+  % The \the is necessary, despite appearances, because \appendixletter is
+  % expanded while writing the .toc file.  \char\appendixno is not
+  % expandable, thus it is written literally, thus all appendixes come out
+  % with the same letter (or @) in the toc without it.
+  \else\char\the\appendixno
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
 
 % Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it.  @section does likewise
-
-\def\thischapter{} \def\thissection{}
-\def\seccheck#1{\if \pageno<0 %
-\errmessage{@#1 not allowed after generating table of contents}\fi
-%
-}
-
-\outer\def\chapter{\parsearg\chapterzzz}
-\def\chapterzzz #1{\seccheck{chapter}%
-\secno=0 \subsecno=0 \subsubsecno=0 \global\advance \chapno by 1 \message{Chapter \the\chapno}%
-\chapmacro {#1}{\the\chapno}%
-\gdef\thissection{#1}\gdef\thischapter{#1}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\donoderef %
-}
-
-\outer\def\appendix{\parsearg\appendixzzz}
-\def\appendixzzz #1{\seccheck{appendix}%
-\secno=0 \subsecno=0 \subsubsecno=0 \global\advance \appendixno by 1 \message{Appendix \appendixletter}%
-\chapmacro {#1}{Appendix \appendixletter}%
-\gdef\thischapter{#1}\gdef\thissection{#1}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash chapentry {#1}{Appendix \appendixletter}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\unnumbnoderef %
-}
-
-\outer\def\unnumbered{\parsearg\unnumberedzzz}
-\def\unnumberedzzz #1{\seccheck{unnumbered}%
-\secno=0 \subsecno=0 \subsubsecno=0 \message{(#1)}
-\unnumbchapmacro {#1}%
-\gdef\thischapter{#1}\gdef\thissection{#1}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp  %
-\unnumbnoderef %
-}
-
-\outer\def\section{\parsearg\sectionzzz}
-\def\sectionzzz #1{\seccheck{section}%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash secentry %
-{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}
-
-\outer\def\appendixsection{\parsearg\appendixsectionzzz}
-\outer\def\appendixsec{\parsearg\appendixsectionzzz}
-\def\appendixsectionzzz #1{\seccheck{appendixsection}%
-\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash secentry %
-{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}
-
-\outer\def\unnumberedsec{\parsearg\unnumberedseczzz}
-\def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
-\plainsecheading {#1}\gdef\thissection{#1}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}
-
-\outer\def\subsection{\parsearg\subsectionzzz}
-\def\subsectionzzz #1{\seccheck{subsection}%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash subsecentry %
-{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}
-
-\outer\def\appendixsubsec{\parsearg\appendixsubseczzz}
-\def\appendixsubseczzz #1{\seccheck{appendixsubsec}%
-\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash subsecentry %
-{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}
-
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
-\plainsecheading {#1}\gdef\thissection{#1}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}
-
-\outer\def\subsubsection{\parsearg\subsubsectionzzz}
-\def\subsubsectionzzz #1{\seccheck{subsubsection}%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash subsubsecentry %
-{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%\
-\escapechar=`\\%
-\write \contentsfile \temp %
-\donoderef %
-\penalty 10000 %
-}
-
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubseczzz}
-\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}%
-\gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-\subsubsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash subsubsecentry{#1}%
-{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%\
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
-}
-
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
-\plainsecheading {#1}\gdef\thissection{#1}%
-\let\rawbackslash=\relax%
-\let\frenchspacing=\relax%
-\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
-\escapechar=`\\%
-\write \contentsfile \temp %
-\unnumbnoderef %
-\penalty 10000 %
+% page headings and footings can use it.  @section does likewise.
+% However, they are not reliable, because we don't use marks.
+\def\thischapter{}
+\def\thissection{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achive this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unmlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+  % Compute the abs. sec. level:
+  \absseclevel=#2
+  \advance\absseclevel by \secbase
+  % Make sure \absseclevel doesn't fall outside the range:
+  \ifnum \absseclevel < 0
+    \absseclevel = 0
+  \else
+    \ifnum \absseclevel > 3
+      \absseclevel = 3
+    \fi
+  \fi
+  % The heading type:
+  \def\headtype{#1}%
+  \if \headtype U%
+    \ifnum \absseclevel < \unmlevel
+      \chardef\unmlevel = \absseclevel
+    \fi
+  \else
+    % Check for appendix sections:
+    \ifnum \absseclevel = 0
+      \edef\chapheadtype{\headtype}%
+    \else
+      \if \headtype A\if \chapheadtype N%
+       \errmessage{@appendix... within a non-appendix chapter}%
+      \fi\fi
+    \fi
+    % Check for numbered within unnumbered:
+    \ifnum \absseclevel > \unmlevel
+      \def\headtype{U}%
+    \else
+      \chardef\unmlevel = 3
+    \fi
+  \fi
+  % Now print the heading:
+  \if \headtype U%
+    \ifcase\absseclevel
+       \unnumberedzzz{#3}%
+    \or \unnumberedseczzz{#3}%
+    \or \unnumberedsubseczzz{#3}%
+    \or \unnumberedsubsubseczzz{#3}%
+    \fi
+  \else
+    \if \headtype A%
+      \ifcase\absseclevel
+         \appendixzzz{#3}%
+      \or \appendixsectionzzz{#3}%
+      \or \appendixsubseczzz{#3}%
+      \or \appendixsubsubseczzz{#3}%
+      \fi
+    \else
+      \ifcase\absseclevel
+         \chapterzzz{#3}%
+      \or \seczzz{#3}%
+      \or \numberedsubseczzz{#3}%
+      \or \numberedsubsubseczzz{#3}%
+      \fi
+    \fi
+  \fi
+  \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v.  By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+  % section resetting is \global in case the chapter is in a group, such
+  % as an @include file.
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\chapno by 1
+  %
+  % Used for \float.
+  \gdef\chaplevelprefix{\the\chapno.}%
+  \resetallfloatnos
+  %
+  \message{\putwordChapter\space \the\chapno}%
+  %
+  % Write the actual heading.
+  \chapmacro{#1}{Ynumbered}{\the\chapno}%
+  %
+  % So @section and the like are numbered underneath this chapter.
+  \global\let\section = \numberedsec
+  \global\let\subsection = \numberedsubsec
+  \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\def\appendixzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\appendixno by 1
+  \gdef\chaplevelprefix{\appendixletter.}%
+  \resetallfloatnos
+  %
+  \def\appendixnum{\putwordAppendix\space \appendixletter}%
+  \message{\appendixnum}%
+  %
+  \chapmacro{#1}{Yappendix}{\appendixletter}%
+  %
+  \global\let\section = \appendixsec
+  \global\let\subsection = \appendixsubsec
+  \global\let\subsubsection = \appendixsubsubsec
+}
+
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\unnumberedno by 1
+  %
+  % Since an unnumbered has no number, no prefix for figures.
+  \global\let\chaplevelprefix = \empty
+  \resetallfloatnos
+  %
+  % This used to be simply \message{#1}, but TeX fully expands the
+  % argument to \message.  Therefore, if #1 contained @-commands, TeX
+  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
+  % expanded @cite (which turns out to cause errors because \cite is meant
+  % to be executed, not expanded).
+  %
+  % Anyway, we don't want the fully-expanded definition of @cite to appear
+  % as a result of the \message, we just want `@cite' itself.  We use
+  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+  % simply yielding the contents of <toks register>.  (We also do this for
+  % the toc entries.)
+  \toks0 = {#1}%
+  \message{(\the\toks0)}%
+  %
+  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+  %
+  \global\let\section = \unnumberedsec
+  \global\let\subsection = \unnumberedsubsec
+  \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+  % Well, we could do the following in a group, but that would break
+  % an assumption that \chapmacro is called at the outermost level.
+  % Thus we are safer this way:                --kasal, 24feb04
+  \let\centerparametersmaybe = \centerparameters
+  \unnmhead0{#1}%
+  \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynumbered}%
+                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
 }
 
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
 % Define @majorheading, @heading and @subheading
 
-\outer\def\majorheading #1{%
-{\advance\chapheadingskip by 10pt \chapbreak }%
-{\chapfonts \line{\chaprm #1\hfill}}\bigskip \par\penalty 200}
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+%       1) We use \vbox rather than the earlier \line to permit
+%          overlong headings to fold.
+%       2) \hyphenpenalty is set to 10000 because hyphenation in a
+%          heading is obnoxious; this forbids it.
+%       3) Likewise, headings look best if no \parindent is used, and
+%          if justification is not attempted.  Hence \raggedright.
+
+
+\def\majorheading{%
+  {\advance\chapheadingskip by 10pt \chapbreak }%
+  \parsearg\chapheadingzzz
+}
 
-\outer\def\chapheading #1{\chapbreak %
-{\chapfonts \line{\chaprm #1\hfill}}\bigskip \par\penalty 200}
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                    \parindent=0pt\raggedright
+                    \rm #1\hfill}}%
+  \bigskip \par\penalty 200\relax
+  \suppressfirstparagraphindent
+}
 
-\let\heading=\secheadingi
-\let\subheading=\subsecheadingi
-\let\subsubheading=\subsubsecheadingi
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
 
 % These macros generate a chapter, section, etc. heading only
 % (including whitespace, linebreaking, etc. around it),
@@ -1209,12 +4322,10 @@ July\or August\or September\or October\or November\or December\fi
 %%% Args are the skip and penalty (usually negative)
 \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
 
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
 %%% Define plain chapter starts, and page on/off switching for it
 % Parameter controlling skip before chapter headings (if needed)
 
-\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt
+\newskip\chapheadingskip
 
 \def\chapbreak{\dobreak \chapheadingskip {-4000}}
 \def\chappager{\par\vfill\supereject}
@@ -1222,856 +4333,2894 @@ July\or August\or September\or October\or November\or December\fi
 
 \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
 
-\def\CHAPPAGoff{
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chapbreak
 \global\let\pagealignmacro=\chappager}
 
-\def\CHAPPAGon{
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
 \global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager}
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
 
-\def\CHAPPAGodd{
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
 \global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage}
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+  \pchapsepmacro
+  {%
+    \chapfonts \rm
+    %
+    % Have to define \thissection before calling \donoderef, because the
+    % xref code eventually uses it.  On the other hand, it has to be called
+    % after \pchapsepmacro, or the headline will change too soon.
+    \gdef\thissection{#1}%
+    \gdef\thischaptername{#1}%
+    %
+    % Only insert the separating space if we have a chapter/appendix
+    % number, and don't print the unnumbered ``number''.
+    \def\temptype{#2}%
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unnchap}%
+      \gdef\thischapter{#1}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+      \def\toctype{omit}%
+      \gdef\thischapter{}%
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+      \def\toctype{app}%
+      % We don't substitute the actual chapter name into \thischapter
+      % because we don't want its macros evaluated now.  And we don't
+      % use \thissection because that changes with each section.
+      %
+      \xdef\thischapter{\putwordAppendix{} \appendixletter:
+                        \noexpand\thischaptername}%
+    \else
+      \setbox0 = \hbox{#3\enspace}%
+      \def\toctype{numchap}%
+      \xdef\thischapter{\putwordChapter{} \the\chapno:
+                        \noexpand\thischaptername}%
+    \fi\fi\fi
+    %
+    % Write the toc entry for this chapter.  Must come before the
+    % \donoderef, because we include the current node name in the toc
+    % entry, and \donoderef resets it to empty.
+    \writetocentry{\toctype}{#1}{#3}%
+    %
+    % For pdftex, we have to write out the node definition (aka, make
+    % the pdfdest) after any page break, but before the actual text has
+    % been typeset.  If the destination for the pdf outline is after the
+    % text, then jumping from the outline may wind up with the text not
+    % being visible, for instance under high magnification.
+    \donoderef{#2}%
+    %
+    % Typeset the actual heading.
+    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+          \hangindent=\wd0 \centerparametersmaybe
+          \unhbox0 #1\par}%
+  }%
+  \nobreak\bigskip % no page break after a chapter title
+  \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+  \advance\rightskip by 3\rightskip
+  \leftskip = \rightskip
+  \parfillskip = 0pt
+}
+
+
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                       \parindent=0pt\raggedright
+                       \rm #1\hfill}}\bigskip \par\nobreak
+}
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                       \parindent=0pt
+                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+}
+\def\CHAPFopen{%
+  \global\let\chapmacro=\chfopen
+  \global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles.  These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\sectionheading#1#2#3#4{%
+  {%
+    % Switch to the right set of fonts.
+    \csname #2fonts\endcsname \rm
+    %
+    % Insert space above the heading.
+    \csname #2headingbreak\endcsname
+    %
+    % Only insert the space after the number if we have a section number.
+    \def\sectionlevel{#2}%
+    \def\temptype{#3}%
+    %
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unn}%
+      \gdef\thissection{#1}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      % for @headings -- no section number, don't include in toc,
+      % and don't redefine \thissection.
+      \setbox0 = \hbox{}%
+      \def\toctype{omit}%
+      \let\sectionlevel=\empty
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{app}%
+      \gdef\thissection{#1}%
+    \else
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{num}%
+      \gdef\thissection{#1}%
+    \fi\fi\fi
+    %
+    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
+    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+    %
+    % Write the node reference (= pdf destination for pdftex).
+    % Again, see comments in \chapmacro.
+    \donoderef{#3}%
+    %
+    % Interline glue will be inserted when the vbox is completed.
+    % That glue will be a valid breakpoint for the page, since it'll be
+    % preceded by a whatsit (usually from the \donoderef, or from the
+    % \writetocentry if there was no node).  We don't want to allow that
+    % break, since then the whatsits could end up on page n while the
+    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
+    \nobreak
+    %
+    % Output the actual section heading.
+    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+          \hangindent=\wd0  % zero if no section number
+          \unhbox0 #1}%
+  }%
+  % Add extra space after the heading -- half of whatever came above it.
+  % Don't allow stretch, though.
+  \kern .5 \csname #2headingskip\endcsname
+  %
+  % Do not let the kern be a potential breakpoint, as it would be if it
+  % was followed by glue.
+  \nobreak
+  %
+  % We'll almost certainly start a paragraph next, so don't let that
+  % glue accumulate.  (Not a breakpoint because it's preceded by a
+  % discardable item.)
+  \vskip-\parskip
+  % 
+  % This is purely so the last item on the list is a known \penalty >
+  % 10000.  This is so \startdefun can avoid allowing breakpoints after
+  % section headings.  Otherwise, it would insert a valid breakpoint between:
+  % 
+  %   @section sec-whatever
+  %   @deffn def-whatever
+  \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this.  The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything.  This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+  \edef\writetoctype{#1}%
+  \ifx\writetoctype\omitkeyword \else
+    \iftocfileopened\else
+      \immediate\openout\tocfile = \jobname.toc
+      \global\tocfileopenedtrue
+    \fi
+    %
+    \iflinks
+      {\atdummies
+       \edef\temp{%
+         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+       \temp
+      }%
+    \fi
+  \fi
+  %
+  % Tell \shipout to create a pdf destination on each page, if we're
+  % writing pdf.  These are used in the table of contents.  We can't
+  % just write one on every page because the title pages are numbered
+  % 1 and 2 (the page numbers aren't printed), and so are the first
+  % two pages of the document.  Thus, we'd have two destinations named
+  % `1', and two named `2'.
+  \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care.  This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+% 
+\def\activecatcodes{%
+  \catcode`\"=\active
+  \catcode`\$=\active
+  \catcode`\<=\active
+  \catcode`\>=\active
+  \catcode`\\=\active
+  \catcode`\^=\active
+  \catcode`\_=\active
+  \catcode`\|=\active
+  \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+  \setupdatafile
+  \activecatcodes
+  \input \jobname.toc
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+  % If @setchapternewpage on, and @headings double, the contents should
+  % start on an odd page, unlike chapters.  Thus, we maintain
+  % \contentsalignmacro in parallel with \pagealignmacro.
+  % From: Torbjorn Granlund <tege@matematik.su.se>
+  \contentsalignmacro
+  \immediate\closeout\tocfile
+  %
+  % Don't need to put `Contents' or `Short Contents' in the headline.
+  % It is abundantly clear what they are.
+  \def\thischapter{}%
+  \chapmacro{#1}{Yomitfromtoc}{}%
+  %
+  \savepageno = \pageno
+  \begingroup                  % Set up to handle contents files properly.
+    \raggedbottom              % Worry more about breakpoints than the bottom.
+    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+    %
+    % Roman numerals for page numbers.
+    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+
+% Normal (long) toc.
+\def\contents{%
+  \startcontents{\putwordTOC}%
+    \openin 1 \jobname.toc
+    \ifeof 1 \else
+      \readtocfile
+    \fi
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+    \ifeof 1 \else
+      \pdfmakeoutlines
+    \fi
+    \closein 1
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+  \startcontents{\putwordShortTOC}%
+    %
+    \let\numchapentry = \shortchapentry
+    \let\appentry = \shortchapentry
+    \let\unnchapentry = \shortunnchapentry
+    % We want a true roman here for the page numbers.
+    \secfonts
+    \let\rm=\shortcontrm \let\bf=\shortcontbf
+    \let\sl=\shortcontsl \let\tt=\shortconttt
+    \rm
+    \hyphenpenalty = 10000
+    \advance\baselineskip by 1pt % Open it up a little.
+    \def\numsecentry##1##2##3##4{}
+    \let\appsecentry = \numsecentry
+    \let\unnsecentry = \numsecentry
+    \let\numsubsecentry = \numsecentry
+    \let\appsubsecentry = \numsecentry
+    \let\unnsubsecentry = \numsecentry
+    \let\numsubsubsecentry = \numsecentry
+    \let\appsubsubsecentry = \numsecentry
+    \let\unnsubsubsecentry = \numsecentry
+    \openin 1 \jobname.toc
+    \ifeof 1 \else
+      \readtocfile
+    \fi
+    \closein 1
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+  % This space should be enough, since a single number is .5em, and the
+  % widest letter (M) is 1em, at least in the Computer Modern fonts.
+  % But use \hss just in case.
+  % (This space doesn't include the extra space that gets added after
+  % the label; that gets put in by \shortchapentry above.)
+  %
+  % We'd like to right-justify chapter numbers, but that looks strange
+  % with appendix letters.  And right-justifying numbers and
+  % left-justifying letters looks strange when there is less than 10
+  % chapters.  Have to read the whole toc once to know how many chapters
+  % there are before deciding ...
+  \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+  % We use M since it's probably the widest letter.
+  \setbox0 = \hbox{\putwordAppendix{} M}%
+  \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+   \begingroup
+     \chapentryfonts
+     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+   \endgroup
+   \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+  \secentryfonts \leftskip=\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+  \subsecentryfonts \leftskip=2\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+  \subsubsecentryfonts \leftskip=3\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+   \advance\hsize by -2\dimen2 % Rules.
+   \vbox{%
+      \hrule height\dimen2
+      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
+         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+         \kern3pt\vrule width\dimen2}% Space to right.
+      \hrule height\dimen2}
+    \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @tex ... @end tex    escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\envdef\tex{%
+  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+  \catcode `\%=14
+  \catcode `\+=\other
+  \catcode `\"=\other
+  \catcode `\|=\other
+  \catcode `\<=\other
+  \catcode `\>=\other
+  \escapechar=`\\
+  %
+  \let\b=\ptexb
+  \let\bullet=\ptexbullet
+  \let\c=\ptexc
+  \let\,=\ptexcomma
+  \let\.=\ptexdot
+  \let\dots=\ptexdots
+  \let\equiv=\ptexequiv
+  \let\!=\ptexexclam
+  \let\i=\ptexi
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
+  \let\{=\ptexlbrace
+  \let\+=\tabalign
+  \let\}=\ptexrbrace
+  \let\/=\ptexslash
+  \let\*=\ptexstar
+  \let\t=\ptext
+  \let\frenchspacing=\plainfrenchspacing
+  %
+  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+  \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments.  \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical.  We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+  % =10000 instead of <10000 because of a special case in \itemzzz and
+  % \sectionheading, q.v.
+  \ifnum \lastpenalty=10000 \else
+    \advance\envskipamount by \parskip
+    \endgraf
+    \ifdim\lastskip<\envskipamount
+      \removelastskip
+      % it's not a good place to break if the last penalty was \nobreak
+      % or better ...
+      \ifnum\lastpenalty<10000 \penalty-50 \fi
+      \vskip\envskipamount
+    \fi
+  \fi
+}}
 
-\CHAPPAGon
+\let\afterenvbreak = \aboveenvbreak
 
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain}
+% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
 
-\def\chfplain #1#2{%
-\pchapsepmacro %
-{\chapfonts \line{\chaprm #2.\enspace #1\hfill}}\bigskip \par\penalty 5000 %
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+        \ctl\leaders\hrule height\circthick\hfil\ctr
+        \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+        \cbl\leaders\hrule height\circthick\hfil\cbr
+        \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+  \ifhmode\par\fi  % can't be in the midst of a paragraph.
+  \startsavinginserts
+  \lskip=\leftskip \rskip=\rightskip
+  \leftskip=0pt\rightskip=0pt % we want these *outside*.
+  \cartinner=\hsize \advance\cartinner by-\lskip
+  \advance\cartinner by-\rskip
+  \cartouter=\hsize
+  \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+                               % side, and for 6pt waste from
+                               % each corner char, and rule thickness
+  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+  % Flag to tell @lisp, etc., not to narrow margin.
+  \let\nonarrowing = t%
+  \vbox\bgroup
+      \baselineskip=0pt\parskip=0pt\lineskip=0pt
+      \carttop
+      \hbox\bgroup
+         \hskip\lskip
+         \vrule\kern3pt
+         \vbox\bgroup
+             \kern3pt
+             \hsize=\cartinner
+             \baselineskip=\normbskip
+             \lineskip=\normlskip
+             \parskip=\normpskip
+             \vskip -\parskip
+             \comment % For explanation, see the end of \def\group.
+}
+\def\Ecartouche{%
+              \ifhmode\par\fi
+             \kern3pt
+         \egroup
+         \kern3pt\vrule
+         \hskip\rskip
+      \egroup
+      \cartbot
+  \egroup
+  \checkinserts
 }
 
-\def\unnchfplain #1{%
-\pchapsepmacro %
-{\chapfonts \line{\chaprm #1\hfill}}\bigskip \par\penalty 10000 %
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\def\nonfillstart{%
+  \aboveenvbreak
+  \hfuzz = 12pt % Don't be fussy
+  \sepspaces % Make spaces be word-separators rather than space tokens.
+  \let\par = \lisppar % don't ignore blank lines
+  \obeylines % each line of input is a line of output
+  \parskip = 0pt
+  \parindent = 0pt
+  \emergencystretch = 0pt % don't try to avoid overfull boxes
+  \ifx\nonarrowing\relax
+    \advance \leftskip by \lispnarrowing
+    \exdentamount=\lispnarrowing
+  \else
+    \let\nonarrowing = \relax
+  \fi
+  \let\exdent=\nofillexdent
 }
-\CHAPFplain % The default
 
-\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \line{\chaprm #1\hfill}}\bigskip \par\penalty 10000 %
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+%    @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+  \ifx\SETdispenvsize\smallword
+    \smallexamplefonts \rm
+  \fi
+}
+\def\setsmalldispenv{%
+  \ifx\SETdispenvsize\nosmallword
+  \else
+    \smallexamplefonts \rm
+  \fi
 }
 
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
+% We often define two environments, @foo and @smallfoo.
+% Let's do it by one command:
+\def\makedispenv #1#2{
+  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
+  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
+  \expandafter\let\csname E#1\endcsname \afterenvbreak
+  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
 }
 
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen}
+% Define two synonyms:
+\def\maketwodispenvs #1#2#3{
+  \makedispenv{#1}{#3}
+  \makedispenv{#2}{#3}
+}
 
-% Parameter controlling skip before section headings.
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvs {lisp}{example}{%
+  \nonfillstart
+  \tt
+  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+  \gobble       % eat return
+}
 
-\newskip \subsecheadingskip  \subsecheadingskip = 17pt plus 8pt minus 4pt
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenv {display}{%
+  \nonfillstart
+  \gobble
+}
 
-\newskip \secheadingskip  \secheadingskip = 21pt plus 8pt minus 4pt
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenv{format}{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \gobble
+}
 
-\def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}}
-\def\plainsecheading #1{\secheadingi {#1}}
-\def\secheadingi #1{{\advance \secheadingskip by \parskip %
-\secheadingbreak}%
-{\secfonts \line{\secrm #1\hfill}}%
-\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \gobble
+}
+\let\Eflushleft = \afterenvbreak
 
-\def\subsecheading #1#2#3#4{{\advance \subsecheadingskip by \parskip %
-\subsecheadingbreak}%
-{\secfonts \line{\secrm#2.#3.#4\enspace #1\hfill}}%
-\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 }
+% @flushright.
+%
+\envdef\flushright{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \advance\leftskip by 0pt plus 1fill
+  \gobble
+}
+\let\Eflushright = \afterenvbreak
 
-\def\subsubsecfonts{\subsecfonts} % Maybe this should change
 
-\def\subsubsecheading #1#2#3#4#5{{\advance \subsecheadingskip by \parskip %
-\subsecheadingbreak}%
-{\secfonts \line{\secrm#2.#3.#4.#5\enspace #1\hfill}}%
-\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000}
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins.  We keep \parskip nonzero in general, since
+% we're doing normal filling.  So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\envdef\quotation{%
+  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+  \parindent=0pt
+  %
+  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+  \ifx\nonarrowing\relax
+    \advance\leftskip by \lispnarrowing
+    \advance\rightskip by \lispnarrowing
+    \exdentamount = \lispnarrowing
+  \else
+    \let\nonarrowing = \relax
+  \fi
+  \parsearg\quotationlabel
+}
 
-\message{toc printing,}
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+  \par
+  \ifx\quotationauthor\undefined\else
+    % indent a bit.
+    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+  \fi
+  {\parskip=0pt \afterenvbreak}%
+}
 
-\def\Dotsbox{\hbox to 1em{\hss.\hss}} % Used by index macros
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty \else
+    {\bf #1: }%
+  \fi
+}
 
-\def\finishcontents{%
-\ifnum\pageno>0 %
-\pagealignmacro %
-\immediate\closeout \contentsfile%
-\pageno=-1             % Request roman numbered pages
-\fi}
 
-\outer\def\contents{%
-\finishcontents %
-\unnumbchapmacro{Table of Contents}
-\def\thischapter{Table of Contents}
-{\catcode`\\=0
-\catcode`\{=1          % Set up to handle contents files properly
-\catcode`\}=2
-\catcode`\@=11
-\input \jobname.toc
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too.  Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+  \do\ \do\\\do\{\do\}\do\$\do\&%
+  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+  \do\<\do\>\do\|\do\@\do+\do\"%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+  \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% [Knuth] pp. 380,381,391
+% Disable Spanish ligatures ?` and !` of \tt font
+\begingroup
+  \catcode`\`=\active\gdef`{\relax\lq}
+\endgroup
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+  \tt  % easiest (and conventionally used) font for verbatim
+  \def\par{\leavevmode\endgraf}%
+  \catcode`\`=\active
+  \tabeightspaces
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \sepspaces
 }
-\vfill \eject}
 
-\outer\def\summarycontents{%
-\finishcontents %
-\unnumbchapmacro{Summary Table of Contents}
-\def\thischapter{Summary Table of Contents}
-{\catcode`\\=0
-\catcode`\{=1          % Set up to handle contents files properly
-\catcode`\}=2
-\catcode`\@=11
-\def\smallbreak{}
-\def\secentry ##1##2##3##4{}
-\def\subsecentry ##1##2##3##4##5{}
-\def\subsubsecentry ##1##2##3##4##5##6{}
-\def\unnumbsecentry ##1##2{}
-\def\unnumbsubsecentry ##1##2{}
-\def\unnumbsubsubsecentry ##1##2{}
-\let\medbreak=\smallbreak
-\input \jobname.toc
-}
-\vfill \eject}
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabexpand{%
+    \catcode`\^^I=\active
+    \def^^I{\leavevmode\egroup
+      \dimen0=\wd0 % the width so far, or since the previous tab
+      \divide\dimen0 by\tabw
+      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
+      \wd0=\dimen0 \box0 \starttabbox
+    }%
+  }
+\endgroup
+\def\setupverbatim{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  % Easiest (and conventionally used) font for verbatim
+  \tt
+  \def\par{\leavevmode\egroup\box0\endgraf}%
+  \catcode`\`=\active
+  \tabexpand
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \sepspaces
+  \everypar{\starttabbox}%
+}
 
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters.  Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+%    \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+%     \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+  \catcode`\ =\active
+  \obeylines %
+  % ignore everything up to the first ^^M, that's the newline at the end
+  % of the @verbatim input line itself.  Otherwise we get an extra blank
+  % line in the output.
+  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+  % We really want {...\end verbatim} in the body of the macro, but
+  % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+    \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
 
-% These macros generate individual entries in the table of contents
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
 
-\def\chapentry #1#2#3{%
-\medbreak
-\line{#2.\space#1\leaders\hbox to 1em{\hss.\hss}\hfill #3}
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+  {%
+    \makevalueexpandable
+    \setupverbatim
+    \input #1
+    \afterenvbreak
+  }%
 }
 
-\def\unnumbchapentry #1#2{%
-\medbreak
-\line{#1\leaders\Dotsbox\hfill #2}
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+  \begingroup
+    \parindent = 0pt  % paragraph indentation looks wrong on title page
+    \scanexp\copyingtext
+  \endgroup
 }
 
-\def\secentry #1#2#3#4{%
-\line{\enspace\enspace#2.#3\space#1\leaders\Dotsbox\hfill#4}
-}
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
 
-\def\unnumbsecentry #1#2{%
-\line{\enspace\enspace#1\leaders\Dotsbox\hfill #2}
+% Start the processing of @deffn:
+\def\startdefun{%
+  \ifnum\lastpenalty<10000
+    \medbreak
+  \else
+    % If there are two @def commands in a row, we'll have a \nobreak,
+    % which is there to keep the function description together with its
+    % header.  But if there's nothing but headers, we need to allow a
+    % break somewhere.  Check specifically for penalty 10002, inserted
+    % by \defargscommonending, instead of 10000, since the sectioning
+    % commands also insert a nobreak penalty, and we don't want to allow
+    % a break between a section heading and a defun.
+    % 
+    \ifnum\lastpenalty=10002 \penalty2000 \fi
+    %
+    % Similarly, after a section heading, do not allow a break.
+    % But do insert the glue.
+    \medskip  % preceded by discardable penalty, so not a breakpoint
+  \fi
+  %
+  \parindent=0in
+  \advance\leftskip by \defbodyindent
+  \exdentamount=\defbodyindent
 }
 
-\def\subsecentry #1#2#3#4#5{%
-\line{\enspace\enspace\enspace\enspace
-#2.#3.#4\space#1\leaders\Dotsbox\hfill #5}
+\def\dodefunx#1{%
+  % First, check whether we are in the right environment:
+  \checkenv#1%
+  %
+  % As above, allow line break if we have multiple x headers in a row.
+  % It's not a great place, though.
+  \ifnum\lastpenalty=10002 \penalty3000 \fi
+  %
+  % And now, it's time to reuse the body of the original defun:
+  \expandafter\gobbledefun#1%
 }
+\def\gobbledefun#1\startdefun{}
 
-\def\unnumbsubsecentry #1#2{%
-\line{\enspace\enspace\enspace\enspace#1\leaders\Dotsbox\hfill #2}
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+  \begingroup
+    % call \deffnheader:
+    #1#2 \endheader
+    % common ending:
+    \interlinepenalty = 10000
+    \advance\rightskip by 0pt plus 1fil
+    \endgraf
+    \nobreak\vskip -\parskip
+    \penalty 10002  % signal to \startdefun and \dodefunx
+    % Some of the @defun-type tags do not enable magic parentheses,
+    % rendering the following check redundant.  But we don't optimize.
+    \checkparencounts
+  \endgroup
 }
 
-\def\subsubsecentry #1#2#3#4#5#6{%
-\line{\enspace\enspace\enspace\enspace\enspace\enspace
-#2.#3.#4.#5\space#1\leaders\Dotsbox\hfill #6}
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remainnig is to define \deffnheader.
+%
+\def\makedefun#1{%
+  \expandafter\let\csname E#1\endcsname = \Edefun
+  \edef\temp{\noexpand\domakedefun
+    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+  \temp
 }
 
-\def\unnumbsubsubsecentry #1#2{%
-\line{\enspace\enspace\enspace\enspace\enspace\enspace#1\leaders\Dotsbox\hfill #2}
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+  \envdef#1{%
+    \startdefun
+    \parseargusing\activeparens{\printdefunline#3}%
+  }%
+  \def#2{\dodefunx#1}%
+  \def#3%
 }
 
-\message{environments,}
+%%% Untyped functions:
 
-% @tex ... @end tex    escapes into raw Tex temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
 
-\def\tex{\begingroup
-\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
-\catcode `\%=14
-\catcode`\"=12
-\catcode`\|=12
-\catcode`\<=12
-\catcode`\>=12
-\escapechar=`\\
-%
-\let\{=\ptexlbrace
-\let\}=\ptexrbrace
-\let\.=\ptexdot
-\let\*=\ptexstar
-\def\@={@}%
-\let\bullet=\ptexbullet
-\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
-\let\L=\ptexL
-%
-\let\Etex=\endgroup}
-
-% Define @lisp ... @endlisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @endlisp (which normally is erroneous).
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
 
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
 
-% This is the definition that ^M gets inside @lisp
-% phr: changed space to \null, to avoid overfull hbox problems.
-{\obeyspaces%
-\gdef\lisppar{\null\endgraf}}
-
-% Cause \obeyspaces to make each Space cause a word-separation
-% rather than the default which is that it acts punctuation.
-% This is because space in tt font looks funny.
-{\obeyspaces %
-\gdef\sepspaces{\def {\ }}}
-
-\newskip\aboveenvskipamount \aboveenvskipamount= 0pt
-\def\aboveenvbreak{{\advance\aboveenvskipamount by \parskip
-\endgraf \ifdim\lastskip<\aboveenvskipamount
-\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}}
-
-\def\afterenvbreak{\endgraf \ifdim\lastskip<\aboveenvskipamount
-\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}
-
-\def\lisp{\aboveenvbreak\begingroup\inENV %This group ends at the end of the @lisp body
-\hfuzz=12truept % Don't be fussy
-% Make spaces be word-separators rather than space tokens.
-\sepspaces %
-% Single space lines
-\singlespace %
-% The following causes blank lines not to be ignored
-% by adding a space to the end of each line.
-\let\par=\lisppar
-\def\Elisp{\endgroup\afterenvbreak}%
-\parskip=0pt \advance \rightskip by \lispnarrowing 
-\advance \leftskip by \lispnarrowing
-\parindent=0pt
-\let\exdent=\internalexdent
-\obeyspaces \obeylines \tt \rawbackslash
-\def\next##1{}\next}
-
-
-\let\example=\lisp
-\def\Eexample{\Elisp}
-
-\let\smallexample=\lisp
-\def\Esmallexample{\Elisp}
-
-% Macro for 9 pt. examples, necessary to print with 5" lines.
-% From Pavel@xerox.  This is not really used unless the
-% @smallbook command is given.
-
-\def\smalllispx{\aboveenvbreak\begingroup\inENV
-%                      This group ends at the end of the @lisp body
-\hfuzz=12truept % Don't be fussy
-% Make spaces be word-separators rather than space tokens.
-\sepspaces %
-% Single space lines
-\singlespace %
-% The following causes blank lines not to be ignored
-% by adding a space to the end of each line.
-\let\par=\lisppar
-\def\Esmalllisp{\endgroup\afterenvbreak}%
-\parskip=0pt \advance \rightskip by \lispnarrowing 
-\advance \leftskip by \lispnarrowing
-\parindent=0pt
-\let\exdent=\internalexdent
-\obeyspaces \obeylines \ninett \rawbackslash
-\def\next##1{}\next}
-
-% This is @display; same as @lisp except use roman font.
-
-\def\display{\begingroup\inENV %This group ends at the end of the @display body
-\aboveenvbreak
-% Make spaces be word-separators rather than space tokens.
-\sepspaces %
-% Single space lines
-\singlespace %
-% The following causes blank lines not to be ignored
-% by adding a space to the end of each line.
-\let\par=\lisppar
-\def\Edisplay{\endgroup\afterenvbreak}%
-\parskip=0pt \advance \rightskip by \lispnarrowing 
-\advance \leftskip by \lispnarrowing
-\parindent=0pt
-\let\exdent=\internalexdent
-\obeyspaces \obeylines
-\def\next##1{}\next}
-
-% This is @format; same as @lisp except use roman font and don't narrow margins
-
-\def\format{\begingroup\inENV %This group ends at the end of the @format body
-\aboveenvbreak
-% Make spaces be word-separators rather than space tokens.
-\sepspaces %
-\singlespace %
-% The following causes blank lines not to be ignored
-% by adding a space to the end of each line.
-\let\par=\lisppar
-\def\Eformat{\endgroup\afterenvbreak}
-\parskip=0pt \parindent=0pt
-\obeyspaces \obeylines
-\def\next##1{}\next}
-
-% @flushleft and @flushright
-
-\def\flushleft{\begingroup\inENV %This group ends at the end of the @format body
-\aboveenvbreak
-% Make spaces be word-separators rather than space tokens.
-\sepspaces %
-% The following causes blank lines not to be ignored
-% by adding a space to the end of each line.
-% This also causes @ to work when the directive name
-% is terminated by end of line.
-\let\par=\lisppar
-\def\Eflushleft{\endgroup\afterenvbreak}%
-\parskip=0pt \parindent=0pt
-\obeyspaces \obeylines
-\def\next##1{}\next}
-
-\def\flushright{\begingroup\inENV %This group ends at the end of the @format body
-\aboveenvbreak
-% Make spaces be word-separators rather than space tokens.
-\sepspaces %
-% The following causes blank lines not to be ignored
-% by adding a space to the end of each line.
-% This also causes @ to work when the directive name
-% is terminated by end of line.
-\let\par=\lisppar
-\def\Eflushright{\endgroup\afterenvbreak}%
-\parskip=0pt \parindent=0pt
-\advance \leftskip by 0pt plus 1fill
-\obeyspaces \obeylines
-\def\next##1{}\next}
-
-% @quotation - narrow the margins.
-
-\def\quotation{\begingroup\inENV %This group ends at the end of the @quotation body
-{\parskip=0pt  % because we will skip by \parskip too, later
-\aboveenvbreak}%
-\singlespace
-\parindent=0pt
-\def\Equotation{\par\endgroup\afterenvbreak}%
-\advance \rightskip by \lispnarrowing 
-\advance \leftskip by \lispnarrowing}
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+  \dosubind{fn}{\code{#3}}{#1}%
+  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
 
-\message{defuns,}
-% Define formatter for defuns
-% First, allow user to change definition object font (\df) internally
-\def\setdeffont #1 {\csname DEF#1\endcsname}
+%%% Typed functions:
 
-\newskip\defbodyindent \defbodyindent=36pt
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deftypemargin \deftypemargin=12pt
-\newskip\deflastargmargin \deflastargmargin=18pt
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
 
-\newcount\parencount
-% define \functionparens, which makes ( and ) and & do special things.
-% \functionparens affects the group it is contained in.
-\def\activeparens{%
-\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
-\catcode`\[=\active \catcode`\]=\active}
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested %
-\global\advance\parencount by 1 }
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
-% also in that case restore the outer-level definition of (.
-\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
-\global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text.  This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
-\def\lbrb{{\tt\char`\[}} \def\rbrb{{\tt\char`\]}}
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
 
-% First, defname, which formats the header line itself.
-% #1 should be the function name.
-% #2 should be the type of definition, such as "Function".
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
 
-\def\defname #1#2{%
-\leftskip = 0in  %
-\noindent        %
-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1     %
-% Now output arg 2 ("Function" or some such)
-% ending at \deftypemargin from the right margin,
-% but stuck inside a box of width 0 so it does not interfere with linebreaking
-\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}%
-\tolerance=10000 \hbadness=10000    % Make all lines underfull and no complaints
-{\df #1}\enskip        % Generate function name
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{fn}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
 }
 
-% Actually process the body of a definition
-% #1 should be the terminating control sequence, such as \Edefun.
-% #2 should be the "another name" control sequence, such as \defunx.
-% #3 should be the control sequence that actually processes the header,
-%    such as \defunheader.
+%%% Typed variables:
 
-\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2{\begingroup\obeylines\activeparens\spacesplit#3}%
-\parindent=0in \leftskip=\defbodyindent %
-\begingroup\obeylines\activeparens\spacesplit#3}
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
 
-\def\defmethparsebody #1#2#3#4 {\begingroup\inENV %
-\medbreak %
-% Define the end token that this defining construct specifies
-% so that it will exit this group.
-\def#1{\endgraf\endgroup\medbreak}%
-\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}%
-\parindent=0in \leftskip=\defbodyindent %
-\begingroup\obeylines\activeparens\spacesplit{#3{#4}}}
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
 
-% Split up #2 at the first space token.
-% call #1 with two arguments:
-%  the first is all of #2 before the space token,
-%  the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
 
-{\obeylines
-\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}%
-\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{%
-\ifx\relax #3%
-#1{#2}{}\else #1{#2}{#3#4}\fi}}
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{vr}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
 
-% So much for the things common to all kinds of definitions.
+%%% Untyped variables:
 
-% Define @defun.
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
 
-% First, define the processing that is wanted for arguments of \defun
-% Use this to expand the args and terminate the paragraph they make up
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
 
-\def\defunargs #1{\functionparens \sl #1%
-\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
-\interlinepenalty=10000
-\endgraf\vskip -\parskip \penalty 10000}
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
 
-% Do complete processing of one @defun or @defunx line already parsed.
+%%% Type:
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+  \doind{tp}{\code{#2}}%
+  \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
 
-% @deffn Command forward-char nchars
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+  % Get the values of \leftskip and \rightskip as they were outside the @def...
+  \advance\leftskip by -\defbodyindent
+  %
+  % How we'll format the type name.  Putting it in brackets helps
+  % distinguish it from the body text that may end up on the next line
+  % just below it.
+  \def\temp{#1}%
+  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+  %
+  % Figure out line sizes for the paragraph shape.
+  % The first line needs space for \box0; but if \rightskip is nonzero,
+  % we need only space for the part of \box0 which exceeds it:
+  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
+  % The continuations:
+  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
+  % (plain.tex says that \dimen1 should be used only as global.)
+  \parshape 2 0in \dimen0 \defargsindent \dimen2
+  %
+  % Put the type name to the right margin.
+  \noindent
+  \hbox to 0pt{%
+    \hfil\box0 \kern-\hsize
+    % \hsize has to be shortened this way:
+    \kern\leftskip
+    % Intentionally do not respect \rightskip, since we need the space.
+  }%
+  %
+  % Allow all lines to be underfull without complaint:
+  \tolerance=10000 \hbadness=10000
+  \exdentamount=\defbodyindent
+  {%
+    % defun fonts. We use typewriter by default (used to be bold) because:
+    % . we're printing identifiers, they should be in tt in principle.
+    % . in languages with many accents, such as Czech or French, it's
+    %   common to leave accents off identifiers.  The result looks ok in
+    %   tt, but exceedingly strange in rm.
+    % . we don't want -- and --- to be treated as ligatures.
+    % . this still does not fix the ?` and !` ligatures, but so far no
+    %   one has made identifiers using them :).
+    \df \tt
+    \def\temp{#2}% return value type
+    \ifx\temp\empty\else \tclose{\temp} \fi
+    #3% output function name
+  }%
+  {\rm\enskip}% hskip 0.5 em of \tenrm
+  %
+  \boldbrax
+  % arguments will be output next, if any.
+}
 
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name.  This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable.  Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+  % use sl by default (not ttsl),
+  % tt for the names.
+  \df \sl \hyphenchar\font=0
+  %
+  % On the other hand, if an argument has two dashes (for instance), we
+  % want a way to get ttsl.  Let's try @var for that.
+  \let\var=\ttslanted
+  #1%
+  \sl\hyphenchar\font=45
+}
 
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup}
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+  \catcode`\(=\active \catcode`\)=\active
+  \catcode`\[=\active \catcode`\]=\active
+  \catcode`\&=\active
+}
 
-% @defun == @deffn Function
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
 
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
+% Be sure that we always have a definition for `(', etc.  For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+  \activeparens
+  \global\let(=\lparen \global\let)=\rparen
+  \global\let[=\lbrack \global\let]=\rbrack
+  \global\let& = \&
 
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Function}%
-\defunargs {#2}\endgroup %
+  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+  \gdef\magicamp{\let&=\amprm}
 }
 
-% @defmac == @deffn Macro
-
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+\newcount\parencount
 
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Macro}%
-\defunargs {#2}\endgroup %
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+  \ifampseen
+    % At the first level, print parens in roman,
+    % otherwise use the default font.
+    \ifnum \parencount=1 \rm \fi
+  \else
+    % The \sf parens (in \boldbrax) actually are a little bolder than
+    % the contained text.  This is especially needed for [ and ] .
+    \sf
+  \fi
+}
+\def\infirstlevel#1{%
+  \ifampseen
+    \ifnum\parencount=1
+      #1%
+    \fi
+  \fi
 }
+\def\bfafterword#1 {#1 \bf}
 
-% @defspec == @deffn Special Form
+\def\opnr{%
+  \global\advance\parencount by 1
+  {\parenfont(}%
+  \infirstlevel \bfafterword
+}
+\def\clnr{%
+  {\parenfont)}%
+  \infirstlevel \sl
+  \global\advance\parencount by -1
+}
 
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+\newcount\brackcount
+\def\lbrb{%
+  \global\advance\brackcount by 1
+  {\bf[}%
+}
+\def\rbrb{%
+  {\bf]}%
+  \global\advance\brackcount by -1
+}
 
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{Special form}%
-\defunargs {#2}\endgroup %
+\def\checkparencounts{%
+  \ifnum\parencount=0 \else \badparencount \fi
+  \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+\def\badparencount{%
+  \errmessage{Unbalanced parentheses in @def}%
+  \global\parencount=0
+}
+\def\badbrackcount{%
+  \errmessage{Unbalanced square braces in @def}%
+  \global\brackcount=0
 }
 
-% This definition is run if you use @defunx
-% anywhere other than immediately after a @defun or @defunx.
 
-\def\deffnx #1 {\errmessage{@deffnx in invalid context}}
-\def\defunx #1 {\errmessage{@defunx in invalid context}}
-\def\defmacx #1 {\errmessage{@defmacx in invalid context}}
-\def\defspecx #1 {\errmessage{@defspecx in invalid context}}
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+  \newwrite\macscribble
+  \def\scantokens#1{%
+    \toks0={#1}%
+    \immediate\openout\macscribble=\jobname.tmp
+    \immediate\write\macscribble{\the\toks0}%
+    \immediate\closeout\macscribble
+    \input \jobname.tmp
+  }
+\fi
 
-% @defmethod, and so on
+\def\scanmacro#1{%
+  \begingroup
+    \newlinechar`\^^M
+    \let\xeatspaces\eatspaces
+    % Undo catcode changes of \startcontents and \doprintindex
+    % When called from @insertcopying or (short)caption, we need active
+    % backslash to get it printed correctly.  Previously, we had
+    % \catcode`\\=\other instead.  We'll see whether a problem appears
+    % with macro expansion.                            --kasal, 19aug04
+    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+    % ... and \example
+    \spaceisspace
+    %
+    % Append \endinput to make sure that TeX does not see the ending newline.
+    %
+    % I've verified that it is necessary both for e-TeX and for ordinary TeX
+    %                                                  --kasal, 29nov03
+    \scantokens{#1\endinput}%
+  \endgroup
+}
 
-% @defop {Funny Method} foo-class frobnicate argument
+\def\scanexp#1{%
+  \edef\temp{\noexpand\scanmacro{#1}}%
+  \temp
+}
 
-\def\defop #1 {\def\defoptype{#1}%
-\defmethparsebody\Edefop\defopx\defopheader}
+\newcount\paramno   % Count of parameters
+\newtoks\macname    % Macro name
+\newif\ifrecursive  % Is it recursive?
+
+% List of all defined macros in the form
+%    \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+     \toks0 = \expandafter{\macrolist\definedummyword#1}%
+     \xdef\macrolist{\the\toks0}%
+}
 
-\def\defopheader #1#2#3{\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index
-\begingroup\defname {#2}{\defoptype{} on #1}%
-\defunargs {#3}\endgroup %
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+%   \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+% 
+\def\cslet#1#2{%
+  \expandafter\let
+  \csname#1\expandafter\endcsname
+  \csname#2\endcsname
 }
 
-% @defmethod == @defop Method
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
 
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
 
-\def\defmethodheader #1#2#3{\dosubind {fn}{\code{#2}}{on #1}% entry in function index
-\begingroup\defname {#2}{Operation on #1}%
-\defunargs {#3}\endgroup %
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by  making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\scanctxt{%
+  \catcode`\"=\other
+  \catcode`\+=\other
+  \catcode`\<=\other
+  \catcode`\>=\other
+  \catcode`\@=\other
+  \catcode`\^=\other
+  \catcode`\_=\other
+  \catcode`\|=\other
+  \catcode`\~=\other
 }
 
-% @defcv {Class Option} foo-class foo-flag
+\def\scanargctxt{%
+  \scanctxt
+  \catcode`\\=\other
+  \catcode`\^^M=\other
+}
 
-\def\defcv #1 {\def\defcvtype{#1}%
-\defmethparsebody\Edefcv\defcvx\defcvheader}
+\def\macrobodyctxt{%
+  \scanctxt
+  \catcode`\{=\other
+  \catcode`\}=\other
+  \catcode`\^^M=\other
+  \usembodybackslash
+}
 
-\def\defcvarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{\defcvtype of #1}%
-\defvarargs {#3}\endgroup %
+\def\macroargctxt{%
+  \scanctxt
+  \catcode`\\=\other
 }
 
-% @defivar == @defcv {Instance Variable}
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+  \getargs{#1}%           now \macname is the macname and \argl the arglist
+  \ifx\argl\empty       % no arguments
+     \paramno=0%
+  \else
+     \expandafter\parsemargdef \argl;%
+  \fi
+  \if1\csname ismacro.\the\macname\endcsname
+     \message{Warning: redefining \the\macname}%
+  \else
+     \expandafter\ifx\csname \the\macname\endcsname \relax
+     \else \errmessage{Macro name \the\macname\space already defined}\fi
+     \global\cslet{macsave.\the\macname}{\the\macname}%
+     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+     \addtomacrolist{\the\macname}%
+  \fi
+  \begingroup \macrobodyctxt
+  \ifrecursive \expandafter\parsermacbody
+  \else \expandafter\parsemacbody
+  \fi}
+
+\parseargdef\unmacro{%
+  \if1\csname ismacro.#1\endcsname
+    \global\cslet{#1}{macsave.#1}%
+    \global\expandafter\let \csname ismacro.#1\endcsname=0%
+    % Remove the macro name from \macrolist:
+    \begingroup
+      \expandafter\let\csname#1\endcsname \relax
+      \let\definedummyword\unmacrodo
+      \xdef\macrolist{\macrolist}%
+    \endgroup
+  \else
+    \errmessage{Macro #1 not defined}%
+  \fi
+}
 
-\def\defivar{\defmethparsebody\Edefivar\defivarx\defivarheader}
+% Called by \do from \dounmacro on each macro.  The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+  \ifx #1\relax
+    % remove this
+  \else
+    \noexpand\definedummyword \noexpand#1%
+  \fi
+}
 
-\def\defivarheader #1#2#3{%
-\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index
-\begingroup\defname {#2}{Instance variable of #1}%
-\defvarargs {#3}\endgroup %
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list.  Set up \paramno and \paramlist
+% so \defmacro knows what to do.  Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX:  let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+  \if#1;\let\next=\relax
+  \else \let\next=\parsemargdefxxx
+    \advance\paramno by 1%
+    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+        {\xeatspaces{\hash\the\paramno}}%
+    \edef\paramlist{\paramlist\hash\the\paramno,}%
+  \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+  \let\hash=##% convert placeholders to macro parameter chars
+  \ifrecursive
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\scanmacro{\temp}}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+         \egroup\noexpand\scanmacro{\temp}}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+        \csname\the\macname xxx\endcsname
+          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+    \fi
+  \else
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+        \egroup
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \expandafter\noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+      \csname\the\macname xxx\endcsname
+      \paramlist{%
+          \egroup
+          \noexpand\norecurse{\the\macname}%
+          \noexpand\scanmacro{\temp}\egroup}%
+    \fi
+  \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {.  If so it reads up to the closing }, if not, it reads the whole
+% line.  Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+  \ifx\nchar\bgroup\else
+    \expandafter\parsearg
+  \fi \next}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign.  Just make them active and then expand them all to nothing.
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+  {%
+    \expandafter\let\obeyedspace=\empty
+    \addtomacrolist{#1}%
+    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+  }%
+  \next
 }
 
-% These definitions are run if you use @defmethodx, etc.,
-% anywhere other than immediately after a @defmethod, etc.
 
-\def\defopx #1 {\errmessage{@defopx in invalid context}}
-\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}}
-\def\defcvx #1 {\errmessage{@defcvx in invalid context}}
-\def\defivarx #1 {\errmessage{@defivarx in invalid context}}
+\message{cross references,}
+
+\newwrite\auxfile
 
-% Now @defvar
+\newif\ifhavexrefs    % True if xref values are known.
+\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
 
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-\interlinepenalty=10000
-\endgraf\vskip -\parskip \penalty 10000}
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+  node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references.  The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross,  ,  , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
 
-% @defvr Counter foo-count
+\let\nwnode=\node
+\let\lastnode=\empty
 
-\def\defvr{\defmethparsebody\Edefvr\defvrx\defvrheader}
+% Write a cross-reference definition for the current node.  #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+  \ifx\lastnode\empty\else
+    \setref{\lastnode}{#1}%
+    \global\let\lastnode=\empty
+  \fi
+}
 
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \thissection,
+%                 or the anchor name.
+% 2) NAME-snt   - section number and type, passed as the SNT arg, or
+%                 empty for anchors.
+% 3) NAME-pg    - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat.  In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof   - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+  \pdfmkdest{#1}%
+  \iflinks
+    {%
+      \atdummies  % preserve commands, but don't expand them
+      \edef\writexrdef##1##2{%
+       \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+         ##1}{##2}}% these are parameters of \writexrdef
+      }%
+      \toks0 = \expandafter{\thissection}%
+      \immediate \writexrdef{title}{\the\toks0 }%
+      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+      \writexrdef{pg}{\folio}% will be written later, during \shipout
+    }%
+  \fi
+}
 
-% @defvar == @defvr Variable
+% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual.  All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+  \unsepspaces
+  \def\printedmanual{\ignorespaces #5}%
+  \def\printedrefname{\ignorespaces #3}%
+  \setbox1=\hbox{\printedmanual\unskip}%
+  \setbox0=\hbox{\printedrefname\unskip}%
+  \ifdim \wd0 = 0pt
+    % No printed node name was explicitly given.
+    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+      % Use the node name inside the square brackets.
+      \def\printedrefname{\ignorespaces #1}%
+    \else
+      % Use the actual chapter/section title appear inside
+      % the square brackets.  Use the real section title if we have it.
+      \ifdim \wd1 > 0pt
+        % It is in another manual, so we don't have it.
+        \def\printedrefname{\ignorespaces #1}%
+      \else
+        \ifhavexrefs
+          % We know the real title if we have the xref values.
+          \def\printedrefname{\refx{#1-title}{}}%
+        \else
+          % Otherwise just copy the Info node name.
+          \def\printedrefname{\ignorespaces #1}%
+        \fi%
+      \fi
+    \fi
+  \fi
+  %
+  % Make link in pdf output.
+  \ifpdf
+    \leavevmode
+    \getfilename{#4}%
+    {\turnoffactive
+     % See comments at \activebackslashdouble.
+     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
+      \backslashparens\pdfxrefdest}%
+     %
+     \ifnum\filenamelength>0
+       \startlink attr{/Border [0 0 0]}%
+         goto file{\the\filename.pdf} name{\pdfxrefdest}%
+     \else
+       \startlink attr{/Border [0 0 0]}%
+         goto name{\pdfmkpgn{\pdfxrefdest}}%
+     \fi
+    }%
+    \linkcolor
+  \fi
+  %
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  We distinguish them by the
+  % LABEL-title being set to a magic string.
+  {%
+    % Have to otherify everything special to allow the \csname to
+    % include an _ in the xref name, etc.
+    \indexnofonts
+    \turnoffactive
+    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+      \csname XR#1-title\endcsname
+  }%
+  \iffloat\Xthisreftitle
+    % If the user specified the print name (third arg) to the ref,
+    % print it instead of our usual "Figure 1.2".
+    \ifdim\wd0 = 0pt
+      \refx{#1-snt}{}%
+    \else
+      \printedrefname
+    \fi
+    %
+    % if the user also gave the printed manual name (fifth arg), append
+    % "in MANUALNAME".
+    \ifdim \wd1 > 0pt
+      \space \putwordin{} \cite{\printedmanual}%
+    \fi
+  \else
+    % node/anchor (non-float) references.
+    %
+    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+    % insert empty discretionaries after hyphens, which means that it will
+    % not find a line break at a hyphen in a node names.  Since some manuals
+    % are best written with fairly long node names, containing hyphens, this
+    % is a loss.  Therefore, we give the text of the node name again, so it
+    % is as if TeX is seeing it for the first time.
+    \ifdim \wd1 > 0pt
+      \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+    \else
+      % _ (for example) has to be the character _ for the purposes of the
+      % control sequence corresponding to the node, but it has to expand
+      % into the usual \leavevmode...\vrule stuff for purposes of
+      % printing. So we \turnoffactive for the \refx-snt, back on for the
+      % printing, back off for the \refx-pg.
+      {\turnoffactive
+       % Only output a following space if the -snt ref is nonempty; for
+       % @unnumbered and @anchor, it won't be.
+       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+      }%
+      % output the `[mynode]' via a macro so it can be overridden.
+      \xrefprintnodename\printedrefname
+      %
+      % But we always want a comma and a space:
+      ,\space
+      %
+      % output the `page 3'.
+      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+    \fi
+  \fi
+  \endlink
+\endgroup}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output.  It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents.  Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
 
-\def\defvar{\defparsebody\Edefvar\defvarx\defvarheader}
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+  \ifnum\secno=0
+    \putwordChapter@tie \the\chapno
+  \else \ifnum\subsecno=0
+    \putwordSection@tie \the\chapno.\the\secno
+  \else \ifnum\subsubsecno=0
+    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+  \else
+    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+  \fi\fi\fi
+}
+\def\Yappendix{%
+  \ifnum\secno=0
+     \putwordAppendix@tie @char\the\appendixno{}%
+  \else \ifnum\subsecno=0
+     \putwordSection@tie @char\the\appendixno.\the\secno
+  \else \ifnum\subsubsecno=0
+    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+  \else
+    \putwordSection@tie
+      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+  \fi\fi\fi
+}
 
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{Variable}%
-\defvarargs {#2}\endgroup %
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+  {%
+    \indexnofonts
+    \otherbackslash
+    \expandafter\global\expandafter\let\expandafter\thisrefX
+      \csname XR#1\endcsname
+  }%
+  \ifx\thisrefX\relax
+    % If not defined, say something at least.
+    \angleleft un\-de\-fined\angleright
+    \iflinks
+      \ifhavexrefs
+        \message{\linenumber Undefined cross reference `#1'.}%
+      \else
+        \ifwarnedxrefs\else
+          \global\warnedxrefstrue
+          \message{Cross reference values unknown; you must run TeX again.}%
+        \fi
+      \fi
+    \fi
+  \else
+    % It's defined, so just use it.
+    \thisrefX
+  \fi
+  #2% Output the suffix in any case.
 }
 
-% @defopt == @defvr {User Option}
+% This is the macro invoked by entries in the aux file.  Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions).  But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+  \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
+  %
+  % Was that xref control sequence that we just defined for a float?
+  \expandafter\iffloat\csname XR#1\endcsname
+    % it was a float, and we have the (safe) float type in \iffloattype.
+    \expandafter\let\expandafter\floatlist
+      \csname floatlist\iffloattype\endcsname
+    %
+    % Is this the first time we've seen this float type?
+    \expandafter\ifx\floatlist\relax
+      \toks0 = {\do}% yes, so just \do
+    \else
+      % had it before, so preserve previous elements in list.
+      \toks0 = \expandafter{\floatlist\do}%
+    \fi
+    %
+    % Remember this xref in the control sequence \floatlistFLOATTYPE,
+    % for later use in \listoffloats.
+    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
+  \fi
+}
 
-\def\defopt{\defparsebody\Edefopt\defoptx\defoptheader}
+% Read the last existing aux file, if any.  No error if none exists.
+%
+\def\tryauxfile{%
+  \openin 1 \jobname.aux
+  \ifeof 1 \else
+    \readdatafile{aux}%
+    \global\havexrefstrue
+  \fi
+  \closein 1
+}
 
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{User Option}%
-\defvarargs {#2}\endgroup %
+\def\setupdatafile{%
+  \catcode`\^^@=\other
+  \catcode`\^^A=\other
+  \catcode`\^^B=\other
+  \catcode`\^^C=\other
+  \catcode`\^^D=\other
+  \catcode`\^^E=\other
+  \catcode`\^^F=\other
+  \catcode`\^^G=\other
+  \catcode`\^^H=\other
+  \catcode`\^^K=\other
+  \catcode`\^^L=\other
+  \catcode`\^^N=\other
+  \catcode`\^^P=\other
+  \catcode`\^^Q=\other
+  \catcode`\^^R=\other
+  \catcode`\^^S=\other
+  \catcode`\^^T=\other
+  \catcode`\^^U=\other
+  \catcode`\^^V=\other
+  \catcode`\^^W=\other
+  \catcode`\^^X=\other
+  \catcode`\^^Z=\other
+  \catcode`\^^[=\other
+  \catcode`\^^\=\other
+  \catcode`\^^]=\other
+  \catcode`\^^^=\other
+  \catcode`\^^_=\other
+  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
+  % supported in the main text, it doesn't seem desirable.  Furthermore,
+  % that is not enough: for node names that actually contain a ^
+  % character, we would end up writing a line like this: 'xrdef {'hat
+  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+  % argument, and \hat is not an expandable control sequence.  It could
+  % all be worked out, but why?  Either we support ^^ or we don't.
+  %
+  % The other change necessary for this was to define \auxhat:
+  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+  % and then to call \auxhat in \setq.
+  %
+  \catcode`\^=\other
+  %
+  % Special characters.  Should be turned off anyway, but...
+  \catcode`\~=\other
+  \catcode`\[=\other
+  \catcode`\]=\other
+  \catcode`\"=\other
+  \catcode`\_=\other
+  \catcode`\|=\other
+  \catcode`\<=\other
+  \catcode`\>=\other
+  \catcode`\$=\other
+  \catcode`\#=\other
+  \catcode`\&=\other
+  \catcode`\%=\other
+  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+  %
+  % This is to support \ in node names and titles, since the \
+  % characters end up in a \csname.  It's easier than
+  % leaving it active and making its active definition an actual \
+  % character.  What I don't understand is why it works in the *value*
+  % of the xrdef.  Seems like it should be a catcode12 \, and that
+  % should not typeset properly.  But it works, so I'm moving on for
+  % now.  --karl, 15jan04.
+  \catcode`\\=\other
+  %
+  % Make the characters 128-255 be printing characters.
+  {%
+    \count1=128
+    \def\loop{%
+      \catcode\count1=\other
+      \advance\count1 by 1
+      \ifnum \count1<256 \loop \fi
+    }%
+  }%
+  %
+  % @ is our escape character in .aux files, and we need braces.
+  \catcode`\{=1
+  \catcode`\}=2
+  \catcode`\@=0
 }
 
-% This definition is run if you use @defvarx
-% anywhere other than immediately after a @defvar or @defvarx.
+\def\readdatafile#1{%
+\begingroup
+  \setupdatafile
+  \input\jobname.#1
+\endgroup}
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only.
+\let\footnotestyle=\comment
 
-\def\defvrx #1 {\errmessage{@defvrx in invalid context}}
-\def\defvarx #1 {\errmessage{@defvarx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
+{\catcode `\@=11
+%
+% Auto-number footnotes.  Otherwise like plain.
+\gdef\footnote{%
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
+  \global\advance\footnoteno by \@ne
+  \edef\thisfootno{$^{\the\footnoteno}$}%
+  %
+  % In case the footnote comes at the end of a sentence, preserve the
+  % extra spacing after we do the footnote number.
+  \let\@sf\empty
+  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+  %
+  % Remove inadvertent blank space before typesetting the footnote number.
+  \unskip
+  \thisfootno\@sf
+  \dofootnote
+}%
 
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter.  Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read.  --karl, 16nov96.
+%
+\gdef\dofootnote{%
+  \insert\footins\bgroup
+  % We want to typeset this text as a normal paragraph, even if the
+  % footnote reference occurs in (for example) a display environment.
+  % So reset some parameters.
+  \hsize=\pagewidth
+  \interlinepenalty\interfootnotelinepenalty
+  \splittopskip\ht\strutbox % top baseline for broken footnotes
+  \splitmaxdepth\dp\strutbox
+  \floatingpenalty\@MM
+  \leftskip\z@skip
+  \rightskip\z@skip
+  \spaceskip\z@skip
+  \xspaceskip\z@skip
+  \parindent\defaultparindent
+  %
+  \smallfonts \rm
+  %
+  % Because we use hanging indentation in footnotes, a @noindent appears
+  % to exdent this text, so make it be a no-op.  makeinfo does not use
+  % hanging indentation so @noindent can still be needed within footnote
+  % text after an @example or the like (not that this is good style).
+  \let\noindent = \relax
+  %
+  % Hang the footnote text off the number.  Use \everypar in case the
+  % footnote extends for more than one paragraph.
+  \everypar = {\hang}%
+  \textindent{\thisfootno}%
+  %
+  % Don't crash into the line above the footnote text.  Since this
+  % expands into a box, it must come within the paragraph, lest it
+  % provide a place where TeX can split the footnote.
+  \footstrut
+  \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
 
-\def\deftpargs #1{\bf \defvarargs{#1}}
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished.  Otherwise, the insertion
+% would be lost.
+% Similarily, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes.  --kasal, 16nov03.
 
-% @deftp Class window height width ...
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+  \ifx \insert\ptexinsert
+    \let\insert\saveinsert
+  \else
+    \let\checkinserts\relax
+  \fi
+}
 
-\def\deftp{\defmethparsebody\Edeftp\deftpx\deftpheader}
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+  \afterassignment\next
+  % swallow the left brace
+  \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
 
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
 
-% This definition is run if you use @deftpx, etc
-% anywhere other than immediately after a @deftp, etc.
+\def\placesaveins#1{%
+  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+    {\box#1}%
+}
 
-\def\deftpx #1 {\errmessage{@deftpx in invalid context}}
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
+  \gdef\gobblesave @SAVE{}
+}
 
-\message{cross reference,}
-% Define cross-reference macros
-\newwrite \auxfile
+% initialization:
+\def\newsaveins #1{%
+  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+  \next
+}
+\def\newsaveinsX #1{%
+  \csname newbox\endcsname #1%
+  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+    \checksaveins #1}%
+}
 
-% \setref{foo} defines a cross-reference point named foo.
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
 
-\def\setref#1{%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ysectionnumberandtype}}
 
-\def\unnumbsetref#1{%
-\dosetq{#1-pg}{Ypagenumber}%
-\dosetq{#1-snt}{Ynothing}}
+% @image.  We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front.  If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+  % Do not bother showing banner with epsf.tex v2.7k (available in
+  % doc/epsf.tex and on ctan).
+  \def\epsfannounce{\toks0 = }%
+  \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+  work.  It is also included in the Texinfo distribution, or you can get
+  it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+  \ifx\epsfbox\undefined
+    \ifwarnednoepsf \else
+      \errhelp = \noepsfhelp
+      \errmessage{epsf.tex not found, images will be ignored}%
+      \global\warnednoepsftrue
+    \fi
+  \else
+    \imagexxx #1,,,,,\finish
+  \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing this stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+  \catcode`\^^M = 5     % in case we're inside an example
+  \normalturnoffactive  % allow _ et al. in names
+  % If the image is by itself, center it.
+  \ifvmode
+    \imagevmodetrue
+    \nobreak\bigskip
+    % Usually we'll have text after the image which will insert
+    % \parskip glue, so insert it here too to equalize the space
+    % above and below.
+    \nobreak\vskip\parskip
+    \nobreak
+    \line\bgroup
+  \fi
+  %
+  % Output the image.
+  \ifpdf
+    \dopdfimage{#1}{#2}{#3}%
+  \else
+    % \epsfbox itself resets \epsf?size at each figure.
+    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+    \epsfbox{#1.eps}%
+  \fi
+  %
+  \ifimagevmode \egroup \bigbreak \fi  % space after the image
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc.  We don't actually implement floating yet, we always include the
+% float "here".  But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
 
-% \xref and \pxref generate cross references to specified points.
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
 
-\def\pxref #1{see \xrefX [#1,,,,,,,]}
-\def\xref #1{See \xrefX [#1,,,,,,,]}
-\def\xrefX [#1,#2,#3,#4,#5,#6]{%
-\setbox1=\hbox{\i{\losespace#5{}}}%
-\setbox0=\hbox{\losespace#3{}}%
-\ifdim \wd0 =0pt \setbox0=\hbox{\losespace#1{}}\fi%
-\ifdim \wd1 >0pt%
-section \unhbox0{} in \unhbox1%
-\else%
-\refx{#1-snt} [\unhbox0], page\tie \refx{#1-pg}%
-\fi }
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label.  Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored.  It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+  \let\thiscaption=\empty
+  \let\thisshortcaption=\empty
+  %
+  % don't lose footnotes inside @float.
+  %
+  % BEWARE: when the floats start float, we have to issue warning whenever an
+  % insert appears inside a float which could possibly float. --kasal, 26may04
+  %
+  \startsavinginserts
+  %
+  % We can't be used inside a paragraph.
+  \par
+  %
+  \vtop\bgroup
+    \def\floattype{#1}%
+    \def\floatlabel{#2}%
+    \def\floatloc{#3}% we do nothing with this yet.
+    %
+    \ifx\floattype\empty
+      \let\safefloattype=\empty
+    \else
+      {%
+        % the floattype might have accents or other special characters,
+        % but we need to use it in a control sequence name.
+        \indexnofonts
+        \turnoffactive
+        \xdef\safefloattype{\floattype}%
+      }%
+    \fi
+    %
+    % If label is given but no type, we handle that as the empty type.
+    \ifx\floatlabel\empty \else
+      % We want each FLOATTYPE to be numbered separately (Figure 1,
+      % Table 1, Figure 2, ...).  (And if no label, no number.)
+      %
+      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+      \global\advance\floatno by 1
+      %
+      {%
+        % This magic value for \thissection is output by \setref as the
+        % XREFLABEL-title value.  \xrefX uses it to distinguish float
+        % labels (which have a completely different output format) from
+        % node and anchor labels.  And \xrdef uses it to construct the
+        % lists of floats.
+        %
+        \edef\thissection{\floatmagic=\safefloattype}%
+        \setref{\floatlabel}{Yfloat}%
+      }%
+    \fi
+    %
+    % start with \parskip glue, I guess.
+    \vskip\parskip
+    %
+    % Don't suppress indentation if a float happens to start a section.
+    \restorefirstparagraphindent
+}
 
-% \dosetq is the interface for calls from other macros
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption:    Foo 1.1
+% @float Foo & @caption{Cap}:     Foo: Cap
+% @float Foo & no caption:        Foo
+% @float ,lbl & Caption{Cap}:     1.1: Cap
+% @float ,lbl & no caption:       1.1
+% @float & @caption{Cap}:         Cap
+% @float & no caption:
+%
+\def\Efloat{%
+    \let\floatident = \empty
+    %
+    % In all cases, if we have a float type, it comes first.
+    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+    %
+    % If we have an xref label, the number comes next.
+    \ifx\floatlabel\empty \else
+      \ifx\floattype\empty \else % if also had float type, need tie first.
+        \appendtomacro\floatident{\tie}%
+      \fi
+      % the number.
+      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+    \fi
+    %
+    % Start the printed caption with what we've constructed in
+    % \floatident, but keep it separate; we need \floatident again.
+    \let\captionline = \floatident
+    %
+    \ifx\thiscaption\empty \else
+      \ifx\floatident\empty \else
+       \appendtomacro\captionline{: }% had ident, so need a colon between
+      \fi
+      %
+      % caption text.
+      \appendtomacro\captionline{\scanexp\thiscaption}%
+    \fi
+    %
+    % If we have anything to print, print it, with space before.
+    % Eventually this needs to become an \insert.
+    \ifx\captionline\empty \else
+      \vskip.5\parskip
+      \captionline
+      %
+      % Space below caption.
+      \vskip\parskip
+    \fi
+    %
+    % If have an xref label, write the list of floats info.  Do this
+    % after the caption, to avoid chance of it being a breakpoint.
+    \ifx\floatlabel\empty \else
+      % Write the text that goes in the lof to the aux file as
+      % \floatlabel-lof.  Besides \floatident, we include the short
+      % caption if specified, else the full caption if specified, else nothing.
+      {%
+        \atdummies
+        %
+        % since we read the caption text in the macro world, where ^^M
+        % is turned into a normal character, we have to scan it back, so
+        % we don't write the literal three characters "^^M" into the aux file.
+       \scanexp{%
+         \xdef\noexpand\gtemp{%
+           \ifx\thisshortcaption\empty
+             \thiscaption
+           \else
+             \thisshortcaption
+           \fi
+         }%
+       }%
+        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+         \ifx\gtemp\empty \else : \gtemp \fi}}%
+      }%
+    \fi
+  \egroup  % end of \vtop
+  %
+  % place the captured inserts
+  %
+  % BEWARE: when the floats start floating, we have to issue warning
+  % whenever an insert appears inside a float which could possibly
+  % float. --kasal, 26may04
+  %
+  \checkinserts
+}
 
-\def\dosetq #1#2{{\let\folio=0%
-\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}%
-\next}}
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+  \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
 
-% \internalsetq {foo}{page} expands into CHARACTERS 'xrdef {foo}{...expansion of \Ypage...}
-% When the aux file is read, ' is the escape character
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use.  Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+  \ifx#1\relax
+      % Haven't seen this figure type before.
+      \csname newcount\endcsname #1%
+      %
+      % Remember to reset this floatno at the next chap.
+      \expandafter\gdef\expandafter\resetallfloatnos
+        \expandafter{\resetallfloatnos #1=0 }%
+  \fi
+  \let\floatno#1%
+}
 
-\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}}
+% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
 
-% Things to be expanded by \internalsetq
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
 
-\def\Ypagenumber{\folio}
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref.  That is, the magic
+% \thissection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
+% (safe) float type for this float.  We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+  \def\temp{#1}%
+  \def\iffloattype{#2}%
+  \ifx\temp\floatmagic
+}
 
-\def\Ynothing{}
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+  \def\floattype{#1}% floattype
+  {%
+    % the floattype might have accents or other special characters,
+    % but we need to use it in a control sequence name.
+    \indexnofonts
+    \turnoffactive
+    \xdef\safefloattype{\floattype}%
+  }%
+  %
+  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+    \ifhavexrefs
+      % if the user said @listoffloats foo but never @float foo.
+      \message{\linenumber No `\safefloattype' floats to list.}%
+    \fi
+  \else
+    \begingroup
+      \leftskip=\tocindent  % indent these entries like a toc
+      \let\do=\listoffloatsdo
+      \csname floatlist\safefloattype\endcsname
+    \endgroup
+  \fi
+}
 
-\def\Ysectionnumberandtype{%
-\ifnum\secno=0 chapter\xreftie\the\chapno %
-\else \ifnum \subsecno=0 section\xreftie\the\chapno.\the\secno %
-\else \ifnum \subsubsecno=0 %
-section\xreftie\the\chapno.\the\secno.\the\subsecno %
-\else %
-section\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno %
-\fi \fi \fi }
-
-\gdef\xreftie{'tie}
-
-% Define @refx to reference a specific cross-reference string.
-
-\def\refx#1{%
-{%
-\expandafter\ifx\csname X#1\endcsname\relax
-% If not defined, say something at least.
-\expandafter\gdef\csname X#1\endcsname {$<$undefined$>$}%
-\message {WARNING: Cross-reference "#1" used but not yet defined}%
-\message {}%
-\fi %
-\csname X#1\endcsname %It's defined, so just use it.
+% This is called on each entry in a list of floats.  We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file.  We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+  % Can't fully expand XR#1-lof because it can contain anything.  Just
+  % pass the control sequence.  On the other hand, XR#1-pg is just the
+  % page number, and we want to fully expand that so we can get a link
+  % in pdf output.
+  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+  %
+  % use the same \entry macro we use to generate the TOC and index.
+  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+  \writeentry
 }}
 
-% Read the last existing aux file, if any.  No error if none exists.
+\message{localization,}
+% and i18n.
 
-% This is the macro invoked by entries in the aux file.
-\def\xrdef #1#2{
-{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}}
+% @documentlanguage is usually given very early, just after
+% @setfilename.  If done too late, it may not override everything
+% properly.  Single argument is the language abbreviation.
+% It would be nice if we could set up a hyphenation file here.
+%
+\parseargdef\documentlanguage{%
+  \tex % read txi-??.tex file in plain TeX.
+    % Read the file if it exists.
+    \openin 1 txi-#1.tex
+    \ifeof 1
+      \errhelp = \nolanghelp
+      \errmessage{Cannot read language file txi-#1.tex}%
+    \else
+      \input txi-#1.tex
+    \fi
+    \closein 1
+  \endgroup
+}
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty.  Maybe you need to install it?  In the current directory
+should work if nowhere else does.}
 
-{
-\catcode `\^^@=\other
-\catcode `\\ 1=\other
-\catcode `\\ 2=\other
-\catcode `\^^C=\other
-\catcode `\^^D=\other
-\catcode `\^^E=\other
-\catcode `\^^F=\other
-\catcode `\^^G=\other
-\catcode `\^^H=\other
-\catcode `\\v=\other
-\catcode `\^^L=\other
-\catcode `\\ e=\other
-\catcode `\\ f=\other
-\catcode `\\10=\other
-\catcode `\\11=\other
-\catcode `\\12=\other
-\catcode `\\13=\other
-\catcode `\\14=\other
-\catcode `\\15=\other
-\catcode `\\16=\other
-\catcode `\\17=\other
-\catcode `\\18=\other
-\catcode `\\19=\other
-\catcode `\\1a=\other
-\catcode `\^^[=\other
-\catcode `\^^\=\other
-\catcode `\^^]=\other
-\catcode `\^^^=\other
-\catcode `\^^_=\other
-\catcode `\@=\other
-\catcode `\^=\other
-\catcode `\~=\other
-\catcode `\[=\other
-\catcode `\]=\other
-\catcode`\"=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode `\$=\other
-\catcode `\#=\other
-\catcode `\&=\other
 
-% the aux file uses ' as the escape.
-% Turn off \ as an escape so we do not lose on
-% entries which were dumped with control sequences in their names.
-% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^
-% Reference to such entries still does not work the way one would wish,
-% but at least they do not bomb out when the aux file is read in.
+% @documentencoding should change something in TeX eventually, most
+% likely, but for now just recognize it.
+\let\documentencoding = \comment
+
+
+% Page size parameters.
+%
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
 
-\catcode `\{=1 \catcode `\}=2
-\catcode `\%=\other
-\catcode `\'=0
-\catcode `\\=\other
+% Following George Bush, just get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
 
-'openin 1 'jobname.aux
-'ifeof 1 'else 'closein 1 'input 'jobname.aux
-'fi
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything.  We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize.  We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+  \ifx\emergencystretch\thisisundefined
+    % Allow us to assign to \emergencystretch anyway.
+    \def\emergencystretch{\dimen0}%
+  \else
+    \emergencystretch = .15\hsize
+  \fi
 }
 
-% Open the new aux file.  Tex will close it automatically at exit.
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading.  The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+  \voffset = #3\relax
+  \topskip = #6\relax
+  \splittopskip = \topskip
+  %
+  \vsize = #1\relax
+  \advance\vsize by \topskip
+  \outervsize = \vsize
+  \advance\outervsize by 2\topandbottommargin
+  \pageheight = \vsize
+  %
+  \hsize = #2\relax
+  \outerhsize = \hsize
+  \advance\outerhsize by 0.5in
+  \pagewidth = \hsize
+  %
+  \normaloffset = #4\relax
+  \bindingoffset = #5\relax
+  %
+  \ifpdf
+    \pdfpageheight #7\relax
+    \pdfpagewidth #8\relax
+  \fi
+  %
+  \setleading{\textleading}
+  %
+  \parindent = \defaultparindent
+  \setemergencystretch
+}
 
-\openout \auxfile=\jobname.aux
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \textleading = 13.2pt
+  %
+  % If page is nothing but text, make it come out even.
+  \internalpagesizes{46\baselineskip}{6in}%
+                    {\voffset}{.25in}%
+                    {\bindingoffset}{36pt}%
+                    {11in}{8.5in}%
+}}
 
-% Footnotes.
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+  \parskip = 2pt plus 1pt
+  \textleading = 12pt
+  %
+  \internalpagesizes{7.5in}{5in}%
+                    {\voffset}{.25in}%
+                    {\bindingoffset}{16pt}%
+                    {9.25in}{7in}%
+  %
+  \lispnarrowing = 0.3in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = .5cm
+}}
 
-\newcount \footnoteno
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+  \parskip = 1.5pt plus 1pt
+  \textleading = 12pt
+  %
+  \internalpagesizes{7.4in}{4.8in}%
+                    {-.2in}{-.4in}%
+                    {0pt}{14pt}%
+                    {9in}{6in}%
+  %
+  \lispnarrowing = 0.25in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = .4cm
+}}
 
-\def\supereject{\par\penalty -20000\footnoteno =0 }
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \textleading = 13.2pt
+  %
+  % Double-side printing via postscript on Laserjet 4050
+  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+  % To change the settings for a different printer or situation, adjust
+  % \normaloffset until the front-side and back-side texts align.  Then
+  % do the same for \bindingoffset.  You can set these for testing in
+  % your texinfo source file like this:
+  % @tex
+  % \global\normaloffset = -6mm
+  % \global\bindingoffset = 10mm
+  % @end tex
+  \internalpagesizes{51\baselineskip}{160mm}
+                    {\voffset}{\hoffset}%
+                    {\bindingoffset}{44pt}%
+                    {297mm}{210mm}%
+  %
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = 5mm
+}}
 
-\let\ptexfootnote=\footnote
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+  \parskip = 2pt plus 1pt minus 0.1pt
+  \textleading = 12.5pt
+  %
+  \internalpagesizes{160mm}{120mm}%
+                    {\voffset}{\hoffset}%
+                    {\bindingoffset}{8pt}%
+                    {210mm}{148mm}%
+  %
+  \lispnarrowing = 0.2in
+  \tolerance = 800
+  \hfuzz = 1.2pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = 2mm
+  \tableindent = 12mm
+}}
 
-{\catcode `\@=11
-\gdef\footnote{\global\advance \footnoteno by \@ne
-\edef\thisfootno{$^{\the\footnoteno}$}%
-\let\@sf\empty
-\ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
-\thisfootno\@sf\parsearg\footnotezzz}
-
-\gdef\footnotezzz #1{\insert\footins{
-\interlinepenalty\interfootnotelinepenalty
-\splittopskip\ht\strutbox % top baseline for broken footnotes
-\splitmaxdepth\dp\strutbox \floatingpenalty\@MM
-\leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
-\footstrut\hang\textindent{\thisfootno}#1\strut}}
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+  \afourpaper
+  \internalpagesizes{237mm}{150mm}%
+                    {\voffset}{4.6mm}%
+                    {\bindingoffset}{7mm}%
+                    {297mm}{210mm}%
+  %
+  % Must explicitly reset to 0 because we call \afourpaper.
+  \globaldefs = 0
+}}
 
-}%end \catcode `\@=11
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+  \afourpaper
+  \internalpagesizes{241mm}{165mm}%
+                    {\voffset}{-2.95mm}%
+                    {\bindingoffset}{7mm}%
+                    {297mm}{210mm}%
+  \globaldefs = 0
+}}
 
-% End of control word definitions.
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+  \globaldefs = 1
+  %
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{\textleading}%
+  %
+  \dimen0 = #1
+  \advance\dimen0 by \voffset
+  %
+  \dimen2 = \hsize
+  \advance\dimen2 by \normaloffset
+  %
+  \internalpagesizes{#1}{\hsize}%
+                    {\voffset}{\normaloffset}%
+                    {\bindingoffset}{44pt}%
+                    {\dimen0}{\dimen2}%
+}}
 
-\message{and turning on texinfo input format.}
+% Set default to letter.
+%
+\letterpaper
 
-\newindex{cp}
-\newcodeindex{fn}
-\newcodeindex{vr}
-\newcodeindex{tp}
-\newcodeindex{ky}
-\newcodeindex{pg}
 
-% Set some numeric style parameters, for 8.5 x 11 format.
+\message{and turning on texinfo input format.}
 
-\hsize = 6.5in
-\parindent 15pt
-\parskip 18pt plus 1pt
-\baselineskip 15pt
-\advance\topskip by 1.2cm
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\catcode`\$=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+\def\normaldollar{$}%$ font-lock fix
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise.  Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
 
-% Prevent underfull vbox error messages.
-\vbadness=10000
-
-% Use @smallbook to reset parameters for 7x9.5 format
-\def\smallbook{
-\global\lispnarrowing = 0.3in
-\global\baselineskip 12pt
-\global\parskip 3pt plus 1pt
-\global\hsize = 5in
-\global\doublecolumnhsize=2.4in \global\doublecolumnvsize=15.0in
-\global\vsize=7.5in
-\global\tolerance=700
-\global\hfuzz=1pt
-
-\global\pagewidth=\hsize
-\global\pageheight=\vsize
-\global\font\ninett=cmtt9
-
-\global\let\smalllisp=\smalllispx
-\global\let\smallexample=\smalllispx
-\global\def\Esmallexample{\Esmalllisp}
-}
-
-%% For a final copy, take out the rectangles
-%% that mark overfull boxes (in case you have decided
-%% that the text looks ok even though it passes the margin).
-\def\finalout{\overfullrule=0pt}
+% Same as above, but check for italic font.  Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts.  But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
 
 % Turn off all special characters except @
-% (and those which the user can use as if they were ordinary)
-% Define certain chars to be always in tt font.
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
 
 \catcode`\"=\active
-\def\activedoublequote{{\tt \char '042}}
+\def\activedoublequote{{\tt\char34}}
 \let"=\activedoublequote
 \catcode`\~=\active
-\def~{{\tt \char '176}}
+\def~{{\tt\char126}}
 \chardef\hat=`\^
 \catcode`\^=\active
 \def^{{\tt \hat}}
+
 \catcode`\_=\active
-\def_{{\tt \char '137}}
+\def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
 \catcode`\|=\active
-\def|{{\tt \char '174}}
+\def|{{\tt\char124}}
 \chardef \less=`\<
 \catcode`\<=\active
 \def<{{\tt \less}}
 \chardef \gtr=`\>
 \catcode`\>=\active
 \def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+  \normalturnoffactive
+  \otherbackslash
+}
 
 \catcode`\@=0
 
-% \rawbackslashxx output one backslash character in current font
-{\catcode`\\=\other
-@gdef@rawbackslashxx{\}}
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active
+@def@normalbackslash{{@tt@backslashcurfont}}
+% On startup, @fixbackslash assigns:
+%  @let \ = @normalbackslash
+
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+% 
+@def@normalturnoffactive{%
+  @let\=@normalbackslash
+  @let"=@normaldoublequote
+  @let~=@normaltilde
+  @let^=@normalcaret
+  @let_=@normalunderscore
+  @let|=@normalverticalbar
+  @let<=@normalless
+  @let>=@normalgreater
+  @let+=@normalplus
+  @let$=@normaldollar %$ font-lock fix
+  @unsepspaces
+}
 
-% \rawbackslash redefines \ as input to do \rawbackslashxx.
-{\catcode`\\=\active
-@gdef@rawbackslash{@let\=@rawbackslashxx }}
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
 
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\' in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also turn back on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{%
+  @ifx\@eatinput @let\ = @normalbackslash @fi
+  @catcode`+=@active
+  @catcode`@_=@active
+}
 
 % Say @foo, not \foo, in error messages.
-\escapechar=`\@
+@escapechar = `@@
 
-%% These look ok in all fonts, so just make them not special.  The @rm below
-%% makes sure that the current font starts out as the newly loaded cmr10
-\catcode`\$=\other \catcode`\%=\other \catcode`\&=\other \catcode`\#=\other
+% These look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
 
-\catcode 17=0   @c Define control-q
-\catcode`\\=\active
-@let\=@normalbackslash
 
-@textfonts
-@rm
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@ignore
+   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore
index 0d9ac21..cc0fc7e 100644 (file)
@@ -79,6 +79,7 @@ OBJS= $(DEBUGFS_LIB_OBJS) $(RESIZE_LIB_OBJS) $(E2IMAGE_LIB_OBJS) \
        res_gdt.o \
        rw_bitmaps.o \
        swapfs.o \
+       symlink.o \
        tdb.o \
        undo_io.o \
        unix_io.o \
@@ -153,6 +154,7 @@ SRCS= ext2_err.c \
        $(srcdir)/res_gdt.c \
        $(srcdir)/rw_bitmaps.c \
        $(srcdir)/swapfs.c \
+       $(srcdir)/symlink.c \
        $(srcdir)/tdb.c \
        $(srcdir)/test_io.c \
        $(srcdir)/tst_badblocks.c \
@@ -180,7 +182,7 @@ ELF_SO_VERSION = 2
 ELF_IMAGE = libext2fs
 ELF_MYDIR = ext2fs
 ELF_INSTALL_DIR = $(root_libdir)
-ELF_OTHER_LIBS = -L../.. -lcom_err
+ELF_OTHER_LIBS = -lcom_err
 
 BSDLIB_VERSION = 2.1
 BSDLIB_IMAGE = libext2fs
@@ -219,45 +221,47 @@ ext2fs.pc: $(srcdir)/ext2fs.pc.in $(top_builddir)/config.status
        $(E) "  CONFIG.STATUS $@"
        $(Q) cd $(top_builddir); CONFIG_FILES=lib/ext2fs/ext2fs.pc ./config.status
 
-tst_badblocks: tst_badblocks.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_badblocks: tst_badblocks.o $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_badblocks tst_badblocks.o $(STATIC_LIBEXT2FS) \
-               $(LIBCOM_ERR)
+               $(STATIC_LIBCOM_ERR)
 
-tst_icount: $(srcdir)/icount.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_icount: $(srcdir)/icount.c $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_icount $(srcdir)/icount.c -DDEBUG $(ALL_CFLAGS) \
-               $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
+               $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
 
-tst_iscan: tst_iscan.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_iscan: tst_iscan.o $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
-       $(Q) $(CC) -o tst_iscan tst_iscan.o $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
+       $(Q) $(CC) -o tst_iscan tst_iscan.o $(STATIC_LIBEXT2FS) \
+               $(STATIC_LIBCOM_ERR)
 
-tst_getsize: tst_getsize.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_getsize: tst_getsize.o $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_getsize tst_getsize.o $(STATIC_LIBEXT2FS) \
-               $(LIBCOM_ERR)
+               $(STATIC_LIBCOM_ERR)
 
-tst_ismounted: $(srcdir)/ismounted.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_ismounted: $(srcdir)/ismounted.c $(STATIC_LIBEXT2FS) \
+               $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_ismounted $(srcdir)/ismounted.c \
                $(STATIC_LIBEXT2FS) -DDEBUG $(ALL_CFLAGS) \
-               $(LIBCOM_ERR) 
+               $(STATIC_LIBCOM_ERR)
 
-tst_byteswap: tst_byteswap.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_byteswap: tst_byteswap.o $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_byteswap tst_byteswap.o $(STATIC_LIBEXT2FS) \
-               $(LIBCOM_ERR)
+               $(STATIC_LIBCOM_ERR)
 
-tst_bitops: tst_bitops.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_bitops: tst_bitops.o $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_bitops tst_bitops.o $(ALL_CFLAGS) \
-               $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
+               $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
 
-tst_getsectsize: tst_getsectsize.o $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_getsectsize: tst_getsectsize.o $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_sectgetsize tst_getsectsize.o \
-               $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
+               $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
 
 tst_types.o: $(srcdir)/tst_types.c ext2_types.h 
 
@@ -292,17 +296,25 @@ extent_dbg.c: $(srcdir)/extent_dbg.ct
        $(Q) $(MK_CMDS) $(srcdir)/extent_dbg.ct
 
 debug_cmds.c debug_cmds.h: $(top_srcdir)/debugfs/debug_cmds.ct
-       $(E) "  MK_CMDS $<@"
+       $(E) "  MK_CMDS $<"
        $(Q) $(MK_CMDS) $(top_srcdir)/debugfs/debug_cmds.ct
 
+extent_cmds.c extent_cmds.h: $(top_srcdir)/debugfs/extent_cmds.ct
+       $(E) "  MK_CMDS $<"
+       $(Q) $(MK_CMDS) $(top_srcdir)/debugfs/extent_cmds.ct
+
 DEBUG_OBJS= debug_cmds.o debugfs.o util.o ncheck.o icheck.o ls.o \
        lsdel.o dump.o set_fields.o logdump.o htree.o unused.o \
-       e2freefrag.o filefrag.o
+       e2freefrag.o filefrag.o extent_inode.o extent_cmds.o
 
 debugfs.o: $(top_srcdir)/debugfs/debugfs.c
        $(E) "  CC $<"
        $(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
 
+extent_inode.o: $(top_srcdir)/debugfs/extent_inode.c
+       $(E) "  CC $<"
+       $(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
+
 util.o: $(top_srcdir)/debugfs/util.c
        $(E) "  CC $<"
        $(Q) $(CC) $(ALL_CFLAGS) -c $< -o $@
@@ -355,34 +367,35 @@ tst_bitmaps_cmd.c: tst_bitmaps_cmd.ct
        $(E) "  MK_CMDS $@"
        $(Q) DIR=$(srcdir) $(MK_CMDS) $(srcdir)/tst_bitmaps_cmd.ct
 
-tst_bitmaps: tst_bitmaps.o tst_bitmaps_cmd.o $(STATIC_LIBEXT2FS) $(DEPLIBSS) \
-               $(DEPLIBCOM_ERR)
+tst_bitmaps: tst_bitmaps.o tst_bitmaps_cmd.o $(STATIC_LIBEXT2FS) \
+               $(DEPSTATIC_LIBSS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o $@ tst_bitmaps.o tst_bitmaps_cmd.o $(ALL_CFLAGS) \
-               $(STATIC_LIBEXT2FS) $(LIBSS) $(LIBCOM_ERR)
+               $(STATIC_LIBEXT2FS) $(STATIC_LIBSS) $(STATIC_LIBCOM_ERR)
 
-tst_extents: $(srcdir)/extent.c extent_dbg.c $(DEBUG_OBJS) $(DEPLIBSS) \
-       $(LIBE2P) $(DEPLIBUUID) $(DEPLIBBLKID) $(DEPLIBCOM_ERR)
+tst_extents: $(srcdir)/extent.c $(DEBUG_OBJS) $(DEPSTATIC_LIBSS) \
+       $(STATIC_LIBE2P) $(DEPLIBUUID) $(DEPLIBBLKID) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
-       $(Q) $(CC) -o tst_extents $(srcdir)/extent.c extent_dbg.c \
-               $(ALL_CFLAGS) -DDEBUG $(DEBUG_OBJS) $(LIBSS) $(LIBE2P) \
-               $(STATIC_LIBEXT2FS) $(LIBBLKID) $(LIBUUID) $(LIBCOM_ERR) \
-               -I $(top_srcdir)/debugfs
+       $(Q) $(CC) -o tst_extents $(srcdir)/extent.c \
+               $(ALL_CFLAGS) -DDEBUG $(DEBUG_OBJS) $(STATIC_LIBSS) \
+               $(STATIC_LIBE2P) $(STATIC_LIBEXT2FS) $(LIBBLKID) $(LIBUUID) \
+               $(STATIC_LIBCOM_ERR) -I $(top_srcdir)/debugfs
 
-tst_inline: $(srcdir)/inline.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
+tst_inline: $(srcdir)/inline.c $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_inline $(srcdir)/inline.c $(ALL_CFLAGS) -DDEBUG \
-               $(STATIC_LIBEXT2FS) $(LIBCOM_ERR)
+               $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
 
-tst_csum: csum.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR) \
+tst_csum: csum.c $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR) $(STATIC_LIBE2P) \
                $(top_srcdir)/lib/e2p/e2p.h
        $(E) "  LD $@"
        $(Q) $(CC) -o tst_csum $(srcdir)/csum.c -DDEBUG \
-               $(ALL_CFLAGS) $(STATIC_LIBEXT2FS) $(LIBCOM_ERR) $(LIBE2P)
+               $(ALL_CFLAGS) $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR) \
+               $(STATIC_LIBE2P)
 
-tst_crc32c: $(srcdir)/crc32c.c
+tst_crc32c: $(srcdir)/crc32c.c $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBCOM_ERR)
        $(Q) $(CC) $(BUILD_LDFLAGS) $(ALL_CFLAGS) -o tst_crc32c $(srcdir)/crc32c.c \
-               -DUNITTEST
+               -DUNITTEST $(STATIC_LIBEXT2FS) $(STATIC_LIBCOM_ERR)
 
 mkjournal: mkjournal.c $(STATIC_LIBEXT2FS) $(DEPLIBCOM_ERR)
        $(E) "  LD $@"
@@ -445,8 +458,9 @@ clean::
                tst_badblocks tst_iscan ext2_err.et ext2_err.c ext2_err.h \
                tst_byteswap tst_ismounted tst_getsize tst_sectgetsize \
                tst_bitops tst_types tst_icount tst_super_size tst_csum \
-               tst_bitmaps tst_bitmaps_out tst_bitmaps_cmd.c \
-               ext2_tdbtool mkjournal debug_cmds.c \
+               tst_bitmaps tst_bitmaps_out tst_extents tst_inline \
+               tst_inline_data tst_inode_size tst_bitmaps_cmd.c \
+               ext2_tdbtool mkjournal debug_cmds.c extent_cmds.c \
                ../libext2fs.a ../libext2fs_p.a ../libext2fs_chk.a \
                crc32c_table.h gen_crc32ctable tst_crc32c
 
@@ -872,6 +886,12 @@ swapfs.o: $(srcdir)/swapfs.c $(top_builddir)/lib/config.h \
  $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
  $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
  $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
+symlink.o: $(srcdir)/symlink.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/ext2_fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \
+ $(srcdir)/ext2_fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(srcdir)/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(srcdir)/ext2_ext_attr.h $(srcdir)/bitops.h
 tdb.o: $(srcdir)/tdb.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/tdb.h
 test_io.o: $(srcdir)/test_io.c $(top_builddir)/lib/config.h \
index 775dfcc..0c829ed 100644 (file)
@@ -41,8 +41,7 @@ static void check_block_uninit(ext2_filsys fs, ext2fs_block_bitmap map,
            !(ext2fs_bg_flags_test(fs, group, EXT2_BG_BLOCK_UNINIT)))
                return;
 
-       blk = (group * fs->super->s_blocks_per_group) +
-               fs->super->s_first_data_block;
+       blk = ext2fs_group_first_block2(fs, group);
 
        ext2fs_super_and_bgd_loc2(fs, group, &super_blk,
                                  &old_desc_blk, &new_desc_blk, 0);
@@ -56,8 +55,7 @@ static void check_block_uninit(ext2_filsys fs, ext2fs_block_bitmap map,
        for (i=0; i < fs->super->s_blocks_per_group; i++, blk++)
                ext2fs_fast_unmark_block_bitmap2(map, blk);
 
-       blk = (group * fs->super->s_blocks_per_group) +
-               fs->super->s_first_data_block;
+       blk = ext2fs_group_first_block2(fs, group);
        for (i=0; i < fs->super->s_blocks_per_group; i++, blk++) {
                if ((blk == super_blk) ||
                    (old_desc_blk && old_desc_blocks &&
index 0d1c000..223ec51 100644 (file)
@@ -47,7 +47,7 @@ int ext2fs_reserve_super_and_bgd(ext2_filsys fs,
 {
        blk64_t super_blk, old_desc_blk, new_desc_blk;
        blk_t   used_blks;
-       int     j, old_desc_blocks, num_blocks;
+       int     old_desc_blocks, num_blocks;
 
        ext2fs_super_and_bgd_loc2(fs, group, &super_blk,
                                  &old_desc_blk, &new_desc_blk, &used_blks);
@@ -67,10 +67,11 @@ int ext2fs_reserve_super_and_bgd(ext2_filsys fs,
        if (old_desc_blk) {
                if (fs->super->s_reserved_gdt_blocks && fs->block_map == bmap)
                        ext2fs_bg_flags_clear(fs, group, EXT2_BG_BLOCK_UNINIT);
-               for (j=0; j < old_desc_blocks; j++)
-                       if (old_desc_blk + j < ext2fs_blocks_count(fs->super))
-                               ext2fs_mark_block_bitmap2(bmap,
-                                                        old_desc_blk + j);
+               num_blocks = old_desc_blocks;
+               if (old_desc_blk + num_blocks >= ext2fs_blocks_count(fs->super))
+                       num_blocks = ext2fs_blocks_count(fs->super) -
+                               old_desc_blk;
+               ext2fs_mark_block_bitmap_range2(bmap, old_desc_blk, num_blocks);
        }
        if (new_desc_blk)
                ext2fs_mark_block_bitmap2(bmap, new_desc_blk);
index 9322a35..8e4c05c 100644 (file)
@@ -116,3 +116,43 @@ int ext2fs_test_bit64(__u64 nr, const void * addr)
        return (mask & *ADDR);
 }
 
+static unsigned int popcount8(unsigned int w)
+{
+       unsigned int res = w - ((w >> 1) & 0x55);
+       res = (res & 0x33) + ((res >> 2) & 0x33);
+       return (res + (res >> 4)) & 0x0F;
+}
+
+static unsigned int popcount32(unsigned int w)
+{
+       unsigned int res = w - ((w >> 1) & 0x55555555);
+       res = (res & 0x33333333) + ((res >> 2) & 0x33333333);
+       res = (res + (res >> 4)) & 0x0F0F0F0F;
+       res = res + (res >> 8);
+       return (res + (res >> 16)) & 0x000000FF;
+}
+
+unsigned int ext2fs_bitcount(const void *addr, unsigned int nbytes)
+{
+       const unsigned char *cp = addr;
+       const __u32 *p;
+       unsigned int res = 0;
+
+       while (((((unsigned long) cp) & 3) != 0) && (nbytes > 0)) {
+               res += popcount8(*cp++);
+               nbytes--;
+       }
+       p = (const __u32 *) cp;
+
+       while (nbytes > 4) {
+               res += popcount32(*p++);
+               nbytes -= 4;
+       }
+       cp = (const unsigned char *) p;
+
+       while (nbytes > 0) {
+               res += popcount8(*cp++);
+               nbytes--;
+       }
+       return res;
+}
index ae2142c..edf82f2 100644 (file)
  * %End-Header%
  */
 
-extern int ext2fs_set_bit(unsigned int nr,void * addr);
-extern int ext2fs_clear_bit(unsigned int nr, void * addr);
-extern int ext2fs_test_bit(unsigned int nr, const void * addr);
-extern void ext2fs_fast_set_bit(unsigned int nr,void * addr);
-extern void ext2fs_fast_clear_bit(unsigned int nr, void * addr);
-extern int ext2fs_set_bit64(__u64 nr,void * addr);
-extern int ext2fs_clear_bit64(__u64 nr, void * addr);
-extern int ext2fs_test_bit64(__u64 nr, const void * addr);
-extern void ext2fs_fast_set_bit64(__u64 nr,void * addr);
-extern void ext2fs_fast_clear_bit64(__u64 nr, void * addr);
-extern __u16 ext2fs_swab16(__u16 val);
-extern __u32 ext2fs_swab32(__u32 val);
-extern __u64 ext2fs_swab64(__u64 val);
-
 #ifdef WORDS_BIGENDIAN
 #define ext2fs_cpu_to_le64(x) ext2fs_swab64((x))
 #define ext2fs_le64_to_cpu(x) ext2fs_swab64((x))
@@ -67,6 +53,15 @@ extern void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg,
 extern void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap,
                                int code, unsigned long arg);
 
+#ifdef NO_INLINE_FUNCS
+extern void ext2fs_fast_set_bit(unsigned int nr,void * addr);
+extern void ext2fs_fast_clear_bit(unsigned int nr, void * addr);
+extern void ext2fs_fast_set_bit64(__u64 nr,void * addr);
+extern void ext2fs_fast_clear_bit64(__u64 nr, void * addr);
+extern __u16 ext2fs_swab16(__u16 val);
+extern __u32 ext2fs_swab32(__u32 val);
+extern __u64 ext2fs_swab64(__u64 val);
+
 extern int ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
 extern int ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
                                       blk_t block);
@@ -95,6 +90,15 @@ extern ext2_ino_t ext2fs_get_inode_bitmap_start(ext2fs_inode_bitmap bitmap);
 extern blk_t ext2fs_get_block_bitmap_end(ext2fs_block_bitmap bitmap);
 extern ext2_ino_t ext2fs_get_inode_bitmap_end(ext2fs_inode_bitmap bitmap);
 
+extern void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
+                                               blk_t block, int num);
+extern void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
+                                                 blk_t block, int num);
+extern int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
+                                              blk_t block, int num);
+#endif
+
+/* These functions routines moved to gen_bitmap.c */
 extern void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
                                           blk_t block, int num);
 extern void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
@@ -103,15 +107,6 @@ extern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
                                          blk_t block, int num);
 extern int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap bitmap,
                                          ino_t inode, int num);
-extern void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
-                                               blk_t block, int num);
-extern void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
-                                                 blk_t block, int num);
-extern int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
-                                              blk_t block, int num);
-extern void ext2fs_set_bitmap_padding(ext2fs_generic_bitmap map);
-
-/* These routines moved to gen_bitmap.c (actually, some of the above, too) */
 extern int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
                                         __u32 bitno);
 extern int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap,
@@ -120,11 +115,13 @@ extern int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
                                      blk_t bitno);
 extern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
                                          blk_t block, int num);
+extern void ext2fs_set_bitmap_padding(ext2fs_generic_bitmap map);
 extern __u32 ext2fs_get_generic_bitmap_start(ext2fs_generic_bitmap bitmap);
 extern __u32 ext2fs_get_generic_bitmap_end(ext2fs_generic_bitmap bitmap);
 
 /* 64-bit versions */
 
+#ifdef NO_INLINE_FUNCS
 extern int ext2fs_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
                                     blk64_t block);
 extern int ext2fs_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
@@ -174,6 +171,8 @@ extern void ext2fs_fast_mark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
 extern void ext2fs_fast_unmark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
                                                   blk64_t block,
                                                   unsigned int num);
+#endif
+
 /* These routines moved to gen_bitmap64.c */
 extern void ext2fs_clear_generic_bmap(ext2fs_generic_bitmap bitmap);
 extern errcode_t ext2fs_compare_generic_bmap(errcode_t neq,
@@ -209,7 +208,7 @@ extern errcode_t ext2fs_find_first_zero_generic_bmap(ext2fs_generic_bitmap bitma
  */
 #ifdef NO_INLINE_FUNCS
 #if (defined(__GNUC__) && (defined(__i386__) || defined(__i486__) || \
-                          defined(__i586__) || defined(__mc68000__)))
+                          defined(__i586__)))
        /* This prevents bitops.c from trying to include the C */
        /* function version of these functions */
 #define _EXT2_HAVE_ASM_BITOPS_
@@ -218,14 +217,22 @@ extern errcode_t ext2fs_find_first_zero_generic_bmap(ext2fs_generic_bitmap bitma
 
 #if (defined(INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
 #ifdef INCLUDE_INLINE_FUNCS
-#define _INLINE_ extern
+#if (__STDC_VERSION__ >= 199901L)
+#define _INLINE_ extern inline
 #else
+#define _INLINE_ inline
+#endif
+#else /* !INCLUDE_INLINE FUNCS */
+#if (__STDC_VERSION__ >= 199901L)
+#define _INLINE_ inline
+#else /* not C99 */
 #ifdef __GNUC__
 #define _INLINE_ extern __inline__
 #else                          /* For Watcom C */
 #define _INLINE_ extern inline
-#endif
-#endif
+#endif /* __GNUC__ */
+#endif /* __STDC_VERSION__ >= 199901L */
+#endif /* INCLUDE_INLINE_FUNCS */
 
 /*
  * Fast bit set/clear functions that doesn't need to return the
@@ -346,43 +353,6 @@ _INLINE_ __u16 ext2fs_swab16(__u16 val)
 
 #endif /* i386 */
 
-#if ((defined __GNUC__) && !defined(_EXT2_USE_C_VERSIONS_) && \
-     (defined(__mc68000__)))
-
-#define _EXT2_HAVE_ASM_BITOPS_
-
-_INLINE_ int ext2fs_set_bit(unsigned int nr,void * addr)
-{
-       char retval;
-
-       __asm__ __volatile__ ("bfset %2@{%1:#1}; sne %0"
-            : "=d" (retval) : "d" (nr^7), "a" (addr));
-
-       return retval;
-}
-
-_INLINE_ int ext2fs_clear_bit(unsigned int nr, void * addr)
-{
-       char retval;
-
-       __asm__ __volatile__ ("bfclr %2@{%1:#1}; sne %0"
-            : "=d" (retval) : "d" (nr^7), "a" (addr));
-
-       return retval;
-}
-
-_INLINE_ int ext2fs_test_bit(unsigned int nr, const void * addr)
-{
-       char retval;
-
-       __asm__ __volatile__ ("bftst %2@{%1:#1}; sne %0"
-            : "=d" (retval) : "d" (nr^7), "a" (addr));
-
-       return retval;
-}
-
-#endif /* __mc68000__ */
-
 
 #if !defined(_EXT2_HAVE_ASM_SWAB_)
 
@@ -678,3 +648,13 @@ _INLINE_ void ext2fs_fast_unmark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
 #undef _INLINE_
 #endif
 
+#ifndef _EXT2_HAVE_ASM_BITOPS_
+extern int ext2fs_set_bit(unsigned int nr,void * addr);
+extern int ext2fs_clear_bit(unsigned int nr, void * addr);
+extern int ext2fs_test_bit(unsigned int nr, const void * addr);
+#endif
+
+extern int ext2fs_set_bit64(__u64 nr,void * addr);
+extern int ext2fs_clear_bit64(__u64 nr, void * addr);
+extern int ext2fs_test_bit64(__u64 nr, const void * addr);
+extern unsigned int ext2fs_bitcount(const void *addr, unsigned int nbytes);
index a83f8ac..a22682e 100644 (file)
@@ -38,14 +38,26 @@ struct bmap_rb_extent {
 
 struct ext2fs_rb_private {
        struct rb_root root;
-       struct bmap_rb_extent **wcursor;
-       struct bmap_rb_extent **rcursor;
+       struct bmap_rb_extent *wcursor;
+       struct bmap_rb_extent *rcursor;
+       struct bmap_rb_extent *rcursor_next;
 #ifdef BMAP_STATS_OPS
        __u64 mark_hit;
        __u64 test_hit;
 #endif
 };
 
+inline static struct bmap_rb_extent *node_to_extent(struct rb_node *node)
+{
+       /*
+        * This depends on the fact the struct rb_node is at the
+        * beginning of the bmap_rb_extent structure.  We use this
+        * instead of the ext2fs_rb_entry macro because it causes gcc
+        * -Wall to generate a huge amount of noise.
+        */
+       return (struct bmap_rb_extent *) node;
+}
+
 static int rb_insert_extent(__u64 start, __u64 count,
                            struct ext2fs_rb_private *);
 static void rb_get_new_extent(struct bmap_rb_extent **, __u64, __u64);
@@ -62,21 +74,21 @@ static void print_tree(struct rb_root *root)
        node = ext2fs_rb_first(root);
        for (node = ext2fs_rb_first(root); node != NULL; 
             node = ext2fs_rb_next(node)) {
-               ext = ext2fs_rb_entry(node, struct bmap_rb_extent, node);
+               ext = node_to_extent(node);
                printf("\t\t\t--> (%llu -> %llu)\n",
                        ext->start, ext->start + ext->count);
        }
        printf("\t\t\t=================================\n");
 }
 
-static int check_tree(struct rb_root *root, const char *msg)
+static void check_tree(struct rb_root *root, const char *msg)
 {
        struct rb_node *new_node, *node, *next;
        struct bmap_rb_extent *ext, *old = NULL;
 
        for (node = ext2fs_rb_first(root); node;
             node = ext2fs_rb_next(node)) {
-               ext = ext2fs_rb_entry(node, struct bmap_rb_extent, node);
+               ext = node_to_extent(node);
                if (ext->count <= 0) {
                        printf("Tree Error: count is crazy\n");
                        printf("extent: %llu -> %llu (%u)\n", ext->start,
@@ -114,7 +126,7 @@ static int check_tree(struct rb_root *root, const char *msg)
                }
                old = ext;
        }
-       return 0;
+       return;
 
 err_out:
        printf("%s\n", msg);
@@ -122,8 +134,8 @@ err_out:
        exit(1);
 }
 #else
-#define check_tree(root, msg) 0
-#define print_tree(root, msg) 0
+#define check_tree(root, msg) do {} while (0)
+#define print_tree(root, msg) do {} while (0)
 #endif
 
 static void rb_get_new_extent(struct bmap_rb_extent **ext, __u64 start,
@@ -148,10 +160,12 @@ inline
 static void rb_free_extent(struct ext2fs_rb_private *bp,
                           struct bmap_rb_extent *ext)
 {
-       if (*bp->wcursor == ext)
-               *bp->wcursor = NULL;
-       if (*bp->rcursor == ext)
-               *bp->rcursor = NULL;
+       if (bp->wcursor == ext)
+               bp->wcursor = NULL;
+       if (bp->rcursor == ext)
+               bp->rcursor = NULL;
+       if (bp->rcursor_next == ext)
+               bp->rcursor_next = NULL;
        ext2fs_free_mem(&ext);
 }
 
@@ -165,14 +179,9 @@ static errcode_t rb_alloc_private_data (ext2fs_generic_bitmap bitmap)
                return retval;
 
        bp->root = RB_ROOT;
-       retval = ext2fs_get_mem(sizeof(struct bmap_rb_extent *), &bp->rcursor);
-       if (retval)
-               return retval;
-       retval = ext2fs_get_mem(sizeof(struct bmap_rb_extent *), &bp->wcursor);
-       if (retval)
-               return retval;
-       *bp->rcursor = NULL;
-       *bp->wcursor = NULL;
+       bp->rcursor = NULL;
+       bp->rcursor_next = NULL;
+       bp->wcursor = NULL;
 
 #ifdef BMAP_STATS_OPS
        bp->test_hit = 0;
@@ -202,7 +211,7 @@ static void rb_free_tree(struct rb_root *root)
 
        for (node = ext2fs_rb_first(root); node; node = next) {
                next = ext2fs_rb_next(node);
-               ext = ext2fs_rb_entry(node, struct bmap_rb_extent, node);
+               ext = node_to_extent(node);
                ext2fs_rb_erase(node, root);
                ext2fs_free_mem(&ext);
        }
@@ -215,8 +224,6 @@ static void rb_free_bmap(ext2fs_generic_bitmap bitmap)
        bp = (struct ext2fs_rb_private *) bitmap->private;
 
        rb_free_tree(&bp->root);
-       ext2fs_free_mem(&bp->rcursor);
-       ext2fs_free_mem(&bp->wcursor);
        ext2fs_free_mem(&bp);
        bp = 0;
 }
@@ -235,12 +242,12 @@ static errcode_t rb_copy_bmap(ext2fs_generic_bitmap src,
 
        src_bp = (struct ext2fs_rb_private *) src->private;
        dest_bp = (struct ext2fs_rb_private *) dest->private;
-       *src_bp->rcursor = NULL;
-       *dest_bp->rcursor = NULL;
+       src_bp->rcursor = NULL;
+       dest_bp->rcursor = NULL;
 
        src_node = ext2fs_rb_first(&src_bp->root);
        while (src_node) {
-               src_ext = ext2fs_rb_entry(src_node, struct bmap_rb_extent, node);
+               src_ext = node_to_extent(src_node);
                retval = ext2fs_get_mem(sizeof (struct bmap_rb_extent),
                                        &dest_ext);
                if (retval)
@@ -273,7 +280,7 @@ static void rb_truncate(__u64 new_max, struct rb_root *root)
 
        node = ext2fs_rb_last(root);
        while (node) {
-               ext = ext2fs_rb_entry(node, struct bmap_rb_extent, node);
+               ext = node_to_extent(node);
 
                if ((ext->start + ext->count - 1) <= new_max)
                        break;
@@ -299,8 +306,8 @@ static errcode_t rb_resize_bmap(ext2fs_generic_bitmap bmap,
        }
 
        bp = (struct ext2fs_rb_private *) bmap->private;
-       *bp->rcursor = NULL;
-       *bp->wcursor = NULL;
+       bp->rcursor = NULL;
+       bp->wcursor = NULL;
 
        /* truncate tree to new_real_end size */
        rb_truncate(new_real_end, &bp->root);
@@ -314,12 +321,12 @@ static errcode_t rb_resize_bmap(ext2fs_generic_bitmap bmap,
 inline static int
 rb_test_bit(struct ext2fs_rb_private *bp, __u64 bit)
 {
-       struct bmap_rb_extent *rcursor;
-       struct rb_node *parent = NULL;
+       struct bmap_rb_extent *rcursor, *next_ext = NULL;
+       struct rb_node *parent = NULL, *next;
        struct rb_node **n = &bp->root.rb_node;
        struct bmap_rb_extent *ext;
 
-       rcursor = *bp->rcursor;
+       rcursor = bp->rcursor;
        if (!rcursor)
                goto search_tree;
 
@@ -330,7 +337,26 @@ rb_test_bit(struct ext2fs_rb_private *bp, __u64 bit)
                return 1;
        }
 
-       rcursor = *bp->wcursor;
+       next_ext = bp->rcursor_next;
+       if (!next_ext) {
+               next = ext2fs_rb_next(&rcursor->node);
+               if (next)
+                       next_ext = node_to_extent(next);
+               bp->rcursor_next = next_ext;
+       }
+       if (next_ext) {
+               if ((bit >= rcursor->start + rcursor->count) &&
+                   (bit < next_ext->start)) {
+#ifdef BMAP_STATS_OPS
+                       bp->test_hit++;
+#endif
+                       return 0;
+               }
+       }
+       bp->rcursor = NULL;
+       bp->rcursor_next = NULL;
+
+       rcursor = bp->wcursor;
        if (!rcursor)
                goto search_tree;
 
@@ -341,13 +367,14 @@ search_tree:
 
        while (*n) {
                parent = *n;
-               ext = ext2fs_rb_entry(parent, struct bmap_rb_extent, node);
+               ext = node_to_extent(parent);
                if (bit < ext->start)
                        n = &(*n)->rb_left;
                else if (bit >= (ext->start + ext->count))
                        n = &(*n)->rb_right;
                else {
-                       *bp->rcursor = ext;
+                       bp->rcursor = ext;
+                       bp->rcursor_next = NULL;
                        return 1;
                }
        }
@@ -364,7 +391,8 @@ static int rb_insert_extent(__u64 start, __u64 count,
        struct bmap_rb_extent *ext;
        int retval = 0;
 
-       ext = *bp->wcursor;
+       bp->rcursor_next = NULL;
+       ext = bp->wcursor;
        if (ext) {
                if (start >= ext->start &&
                    start <= (ext->start + ext->count)) {
@@ -377,7 +405,7 @@ static int rb_insert_extent(__u64 start, __u64 count,
 
        while (*n) {
                parent = *n;
-               ext = ext2fs_rb_entry(parent, struct bmap_rb_extent, node);
+               ext = node_to_extent(parent);
 
                if (start < ext->start) {
                        n = &(*n)->rb_left;
@@ -407,11 +435,11 @@ got_extent:
        new_node = &new_ext->node;
        ext2fs_rb_link_node(new_node, parent, n);
        ext2fs_rb_insert_color(new_node, root);
-       *bp->wcursor = new_ext;
+       bp->wcursor = new_ext;
 
        node = ext2fs_rb_prev(new_node);
        if (node) {
-               ext = ext2fs_rb_entry(node, struct bmap_rb_extent, node);
+               ext = node_to_extent(node);
                if ((ext->start + ext->count) == start) {
                        start = ext->start;
                        count += ext->count;
@@ -424,7 +452,7 @@ skip_insert:
        /* See if we can merge extent to the right */
        for (node = ext2fs_rb_next(new_node); node != NULL; node = next) {
                next = ext2fs_rb_next(node);
-               ext = ext2fs_rb_entry(node, struct bmap_rb_extent, node);
+               ext = node_to_extent(node);
 
                if ((ext->start + ext->count) <= start)
                        continue;
@@ -469,7 +497,7 @@ static int rb_remove_extent(__u64 start, __u64 count,
 
        while (*n) {
                parent = *n;
-               ext = ext2fs_rb_entry(parent, struct bmap_rb_extent, node);
+               ext = node_to_extent(parent);
                if (start < ext->start) {
                        n = &(*n)->rb_left;
                        continue;
@@ -512,7 +540,7 @@ static int rb_remove_extent(__u64 start, __u64 count,
        /* See if we should delete or truncate extent on the right */
        for (; parent != NULL; parent = node) {
                node = ext2fs_rb_next(parent);
-               ext = ext2fs_rb_entry(parent, struct bmap_rb_extent, node);
+               ext = node_to_extent(parent);
                if ((ext->start + ext->count) <= start)
                        continue;
 
@@ -619,7 +647,7 @@ static int rb_test_clear_bmap_extent(ext2fs_generic_bitmap bitmap,
         */
        while (*n) {
                parent = *n;
-               ext = ext2fs_rb_entry(parent, struct bmap_rb_extent, node);
+               ext = node_to_extent(parent);
                if (start < ext->start) {
                        n = &(*n)->rb_left;
                } else if (start >= (ext->start + ext->count)) {
@@ -636,7 +664,7 @@ static int rb_test_clear_bmap_extent(ext2fs_generic_bitmap bitmap,
        node = parent;
        while (node) {
                next = ext2fs_rb_next(node);
-               ext = ext2fs_rb_entry(node, struct bmap_rb_extent, node);
+               ext = node_to_extent(node);
                node = next;
 
                if ((ext->start + ext->count) <= start)
@@ -656,16 +684,41 @@ static errcode_t rb_set_bmap_range(ext2fs_generic_bitmap bitmap,
                                     __u64 start, size_t num, void *in)
 {
        struct ext2fs_rb_private *bp;
+       unsigned char *cp = in;
        size_t i;
-       int ret;
+       int first_set = -1;
 
        bp = (struct ext2fs_rb_private *) bitmap->private;
 
        for (i = 0; i < num; i++) {
-               ret = ext2fs_test_bit(i, in);
-               if (ret)
-                       rb_insert_extent(start + i - bitmap->start, 1, bp);
+               if ((i & 7) == 0) {
+                       unsigned char c = cp[i/8];
+                       if (c == 0xFF) {
+                               if (first_set == -1)
+                                       first_set = i;
+                               i += 7;
+                               continue;
+                       }
+                       if ((c == 0x00) && (first_set == -1)) {
+                               i += 7;
+                               continue;
+                       }
+               }
+               if (ext2fs_test_bit(i, in)) {
+                       if (first_set == -1)
+                               first_set = i;
+                       continue;
+               }
+               if (first_set == -1)
+                       continue;
+
+               rb_insert_extent(start + first_set - bitmap->start,
+                                i - first_set, bp);
+               first_set = -1;
        }
+       if (first_set != -1)
+               rb_insert_extent(start + first_set - bitmap->start,
+                                num - first_set, bp);
 
        return 0;
 }
@@ -677,6 +730,7 @@ static errcode_t rb_get_bmap_range(ext2fs_generic_bitmap bitmap,
        struct rb_node *parent = NULL, *next, **n;
        struct ext2fs_rb_private *bp;
        struct bmap_rb_extent *ext;
+       int count;
        __u64 pos;
 
        bp = (struct ext2fs_rb_private *) bitmap->private;
@@ -688,7 +742,7 @@ static errcode_t rb_get_bmap_range(ext2fs_generic_bitmap bitmap,
 
        while (*n) {
                parent = *n;
-               ext = ext2fs_rb_entry(parent, struct bmap_rb_extent, node);
+               ext = node_to_extent(parent);
                if (start < ext->start) {
                        n = &(*n)->rb_left;
                } else if (start >= (ext->start + ext->count)) {
@@ -697,32 +751,41 @@ static errcode_t rb_get_bmap_range(ext2fs_generic_bitmap bitmap,
                        break;
        }
 
-       pos = start;
+       memset(out, 0, (num + 7) >> 3);
+
        for (; parent != NULL; parent = next) {
                next = ext2fs_rb_next(parent);
-               ext = ext2fs_rb_entry(parent, struct bmap_rb_extent, node);
+               ext = node_to_extent(parent);
 
-               while (((pos - start) < num) &&
-                       (pos < ext->start)) {
-                       ext2fs_fast_clear_bit64((pos - start), out);
-                       pos++;
+               pos = ext->start;
+               count = ext->count;
+               if (pos >= start + num)
+                       break;
+               if (pos < start) {
+                       count -= start - pos;
+                       if (count < 0)
+                               continue;
+                       pos = start;
                }
-
-               if ((pos - start) >= num)
-                       return 0;
-
-               while (((pos - start) < num) &&
-                       (pos < (ext->start + ext->count))) {
+               if (pos + count > start + num)
+                       count = start + num - pos;
+
+               while (count > 0) {
+                       if ((count >= 8) &&
+                           ((pos - start) % 8) == 0) {
+                               int nbytes = count >> 3;
+                               int offset = (pos - start) >> 3;
+
+                               memset(((char *) out) + offset, 0xFF, nbytes);
+                               pos += nbytes << 3;
+                               count -= nbytes << 3;
+                               continue;
+                       }
                        ext2fs_fast_set_bit64((pos - start), out);
                        pos++;
+                       count--;
                }
        }
-
-       while ((pos - start) < num) {
-               ext2fs_fast_clear_bit64((pos - start), out);
-               pos++;
-       }
-
        return 0;
 }
 
@@ -733,8 +796,9 @@ static void rb_clear_bmap(ext2fs_generic_bitmap bitmap)
        bp = (struct ext2fs_rb_private *) bitmap->private;
 
        rb_free_tree(&bp->root);
-       *bp->rcursor = NULL;
-       *bp->wcursor = NULL;
+       bp->rcursor = NULL;
+       bp->rcursor_next = NULL;
+       bp->wcursor = NULL;
 }
 
 #ifdef BMAP_STATS
@@ -758,7 +822,7 @@ static void rb_print_stats(ext2fs_generic_bitmap bitmap)
        node = ext2fs_rb_first(&bp->root);
        for (node = ext2fs_rb_first(&bp->root); node != NULL;
             node = ext2fs_rb_next(node)) {
-               ext = ext2fs_rb_entry(node, struct bmap_rb_extent, node);
+               ext = node_to_extent(node);
                count++;
                if (ext->count > max_size)
                        max_size = ext->count;
index 68dcb03..b8c6879 100644 (file)
@@ -472,9 +472,9 @@ errcode_t ext2fs_block_iterate3(ext2_filsys fs,
                               extent.e_lblk, extent.e_pblk,
                               extent.e_len, blockcnt);
 #endif
-                       if (extent.e_lblk + extent.e_len <= blockcnt)
+                       if (extent.e_lblk + extent.e_len <= (blk64_t) blockcnt)
                                continue;
-                       if (extent.e_lblk > blockcnt)
+                       if (extent.e_lblk > (blk64_t) blockcnt)
                                blockcnt = extent.e_lblk;
                        j = blockcnt - extent.e_lblk;
                        blk += j;
index 16d51e0..aadd22e 100644 (file)
@@ -95,7 +95,7 @@ static _BMAP_INLINE_ errcode_t block_dind_bmap(ext2_filsys fs, int flags,
                                               int *blocks_alloc,
                                               blk_t nr, blk_t *ret_blk)
 {
-       blk_t           b;
+       blk_t           b = 0;
        errcode_t       retval;
        blk_t           addr_per_block;
 
@@ -115,7 +115,7 @@ static _BMAP_INLINE_ errcode_t block_tind_bmap(ext2_filsys fs, int flags,
                                               int *blocks_alloc,
                                               blk_t nr, blk_t *ret_blk)
 {
-       blk_t           b;
+       blk_t           b = 0;
        errcode_t       retval;
        blk_t           addr_per_block;
 
index 973c2a2..3582a0c 100644 (file)
 #include "ext2_fs.h"
 #include "ext2fsP.h"
 
-static int test_root(int a, int b)
+static int test_root(unsigned int a, unsigned int b)
 {
-       if (a == 0)
-               return 1;
        while (1) {
-               if (a == 1)
+               if (a < b)
+                       return 0;
+               if (a == b)
                        return 1;
                if (a % b)
                        return 0;
@@ -33,14 +33,15 @@ static int test_root(int a, int b)
        }
 }
 
-int ext2fs_bg_has_super(ext2_filsys fs, int group_block)
+int ext2fs_bg_has_super(ext2_filsys fs, dgrp_t group)
 {
        if (!(fs->super->s_feature_ro_compat &
-             EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER))
+             EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER) || group <= 1)
                return 1;
-
-       if (test_root(group_block, 3) || (test_root(group_block, 5)) ||
-           test_root(group_block, 7))
+       if (!(group & 1))
+               return 0;
+       if (test_root(group, 3) || (test_root(group, 5)) ||
+           test_root(group, 7))
                return 1;
 
        return 0;
index da2c60b..2512528 100644 (file)
@@ -224,7 +224,7 @@ static uint32_t crc32c_le_body(uint32_t crc, uint8_t const *buf, size_t len)
        crc = (__force uint32_t) __cpu_to_le32(crc);
 
        p8 = buf;
-       p32 = (uint32_t *)PTR_ALIGN(p8, 8);
+       p32 = (const uint32_t *)PTR_ALIGN(p8, 8);
        init_bytes = min((uintptr_t)p32 - (uintptr_t)p8, len);
        words = (len - init_bytes) >> 3;
        end_bytes = (len - init_bytes) & 7;
@@ -273,7 +273,7 @@ static uint32_t crc32c_le_body(uint32_t crc, uint8_t const *buf, size_t len)
 #endif
        }
 
-       p8 = (uint8_t *)(++p32);
+       p8 = (const uint8_t *)(++p32);
 
        for (i = 0; i < end_bytes; i++) {
 #ifndef WORDS_BIGENDIAN
@@ -304,7 +304,7 @@ static uint32_t crc32c_be_body(uint32_t crc, uint8_t const *buf, size_t len)
        crc = (__force uint32_t) __cpu_to_be32(crc);
 
        p8 = buf;
-       p32 = (uint32_t *)PTR_ALIGN(p8, 8);
+       p32 = (const uint32_t *)PTR_ALIGN(p8, 8);
        init_bytes = min((uintptr_t)p32 - (uintptr_t)p8, len);
        words = (len - init_bytes) >> 3;
        end_bytes = (len - init_bytes) & 7;
@@ -353,7 +353,7 @@ static uint32_t crc32c_be_body(uint32_t crc, uint8_t const *buf, size_t len)
 #endif
        }
 
-       p8 = (uint8_t *)(++p32);
+       p8 = (const uint8_t *)(++p32);
 
        for (i = 0; i < end_bytes; i++) {
 #ifndef WORDS_BIGENDIAN
@@ -1117,12 +1117,12 @@ static int test_crc32c(void)
                be = ext2fs_crc32c_be(t->crc, test_buf + t->start, t->length);
                if (le != t->crc_le) {
                        printf("Test %d LE fails, %x != %x\n",
-                              (t - test), le, t->crc_le);
+                              (int) (t - test), le, t->crc_le);
                        failures++;
                }
                if (be != t->crc_be) {
                        printf("Test %d BE fails, %x != %x\n",
-                              (t - test), be, t->crc_be);
+                              (int) (t - test), be, t->crc_be);
                        failures++;
                }
                t++;
index 9fa3f24..5ee3445 100644 (file)
@@ -166,7 +166,7 @@ void print_csum(const char *msg, ext2_filsys fs, dgrp_t group)
 {
        __u16 crc1, crc2, crc3;
        dgrp_t swabgroup;
-       struct ext2_group_desc *desc = ext2fs_group_desc(fs, fs->group_desc, group);
+       struct ext2_group_desc *desc;
        size_t size;
        struct ext2_super_block *sb = fs->super;
        int offset = offsetof(struct ext2_group_desc, bg_checksum);
@@ -174,6 +174,7 @@ void print_csum(const char *msg, ext2_filsys fs, dgrp_t group)
        struct ext4_group_desc swabdesc;
 #endif
 
+       desc = ext2fs_group_desc(fs, fs->group_desc, group);
        size = fs->super->s_desc_size;
        if (size < EXT2_MIN_DESC_SIZE)
                size = EXT2_MIN_DESC_SIZE;
@@ -198,7 +199,7 @@ void print_csum(const char *msg, ext2_filsys fs, dgrp_t group)
        if (offset < size)
                crc3 = ext2fs_crc16(crc3, (char *)desc + offset, size - offset);
 
-       printf("%s: UUID %s(%04x), grp %u(%04x): %04x=%04x\n",
+       printf("%s UUID %s=%04x, grp %u=%04x: %04x=%04x\n",
               msg, e2p_uuid2str(sb->s_uuid), crc1, group, crc2, crc3,
               ext2fs_group_desc_csum(fs, group));
 }
index ca1446b..4cb7ca1 100644 (file)
@@ -61,7 +61,7 @@ static errcode_t make_dblist(ext2_filsys fs, ext2_ino_t size,
                             struct ext2_db_entry2 *list,
                             ext2_dblist *ret_dblist)
 {
-       ext2_dblist     dblist;
+       ext2_dblist     dblist = NULL;
        errcode_t       retval;
        ext2_ino_t      num_dirs;
        size_t          len;
index c918529..5537980 100644 (file)
@@ -19,7 +19,7 @@
 /* Image flags */
 #define E2IMAGE_INSTALL_FLAG   1
 #define E2IMAGE_SCRAMBLE_FLAG  2
-#define E2IMAGE_IS_QCOW2_FLAG  3
+#define E2IMAGE_IS_QCOW2_FLAG  4
 
 struct ext2_image_hdr {
        __u32   magic_number;   /* This must be EXT2_ET_MAGIC_E2IMAGE */
index ccf1894..d20c6b7 100644 (file)
@@ -443,4 +443,37 @@ ec EXT2_ET_MMP_CHANGE_ABORT,
 ec     EXT2_ET_MMP_OPEN_DIRECT,
        "MMP: open with O_DIRECT failed"
 
+ec     EXT2_ET_BAD_DESC_SIZE,
+       "Block group descriptor size incorrect"
+
+ec     EXT2_ET_INODE_CSUM_INVALID,
+       "Inode checksum does not match inode"
+
+ec     EXT2_ET_INODE_BITMAP_CSUM_INVALID,
+       "Inode bitmap checksum does not match bitmap"
+
+ec     EXT2_ET_EXTENT_CSUM_INVALID,
+       "Extent block checksum does not match extent block"
+
+ec     EXT2_ET_DIR_NO_SPACE_FOR_CSUM,
+       "Directory block does not have space for checksum"
+
+ec     EXT2_ET_DIR_CSUM_INVALID,
+       "Directory block checksum does not match directory block"
+
+ec     EXT2_ET_EXT_ATTR_CSUM_INVALID,
+       "Extended attribute block checksum does not match block"
+
+ec     EXT2_ET_SB_CSUM_INVALID,
+       "Superblock checksum does not match superblock"
+
+ec     EXT2_ET_UNKNOWN_CSUM,
+       "Unknown checksum algorithm"
+
+ec     EXT2_ET_MMP_CSUM_INVALID,
+       "MMP block checksum does not match MMP block"
+
+ec     EXT2_ET_FILE_EXISTS,
+       "Ext2 file already exists"
+
        end
index ff088bb..326d5c1 100644 (file)
@@ -911,7 +911,7 @@ extern errcode_t ext2fs_close(ext2_filsys fs);
 extern errcode_t ext2fs_close2(ext2_filsys fs, int flags);
 extern errcode_t ext2fs_flush(ext2_filsys fs);
 extern errcode_t ext2fs_flush2(ext2_filsys fs, int flags);
-extern int ext2fs_bg_has_super(ext2_filsys fs, int group_block);
+extern int ext2fs_bg_has_super(ext2_filsys fs, dgrp_t group_block);
 extern errcode_t ext2fs_super_and_bgd_loc2(ext2_filsys fs,
                                    dgrp_t group,
                                    blk64_t *ret_super_blk,
@@ -1070,6 +1070,7 @@ extern errcode_t ext2fs_extent_open2(ext2_filsys fs, ext2_ino_t ino,
 extern void ext2fs_extent_free(ext2_extent_handle_t handle);
 extern errcode_t ext2fs_extent_get(ext2_extent_handle_t handle,
                                   int flags, struct ext2fs_extent *extent);
+extern errcode_t ext2fs_extent_node_split(ext2_extent_handle_t handle);
 extern errcode_t ext2fs_extent_replace(ext2_extent_handle_t handle, int flags,
                                       struct ext2fs_extent *extent);
 extern errcode_t ext2fs_extent_insert(ext2_extent_handle_t handle, int flags,
@@ -1082,6 +1083,9 @@ extern errcode_t ext2fs_extent_get_info(ext2_extent_handle_t handle,
                                        struct ext2_extent_info *info);
 extern errcode_t ext2fs_extent_goto(ext2_extent_handle_t handle,
                                    blk64_t blk);
+extern errcode_t ext2fs_extent_goto2(ext2_extent_handle_t handle,
+                                    int leaf_level, blk64_t blk);
+extern errcode_t ext2fs_extent_fix_parents(ext2_extent_handle_t handle);
 
 /* fileio.c */
 extern errcode_t ext2fs_file_open2(ext2_filsys fs, ext2_ino_t ino,
@@ -1248,6 +1252,11 @@ extern errcode_t ext2fs_icount_store(ext2_icount_t icount, ext2_ino_t ino,
 extern ext2_ino_t ext2fs_get_icount_size(ext2_icount_t icount);
 errcode_t ext2fs_icount_validate(ext2_icount_t icount, FILE *);
 
+/* inline.c */
+
+extern errcode_t ext2fs_get_memalign(unsigned long size,
+                                    unsigned long align, void *ptr);
+
 /* inode.c */
 extern errcode_t ext2fs_flush_icache(ext2_filsys fs);
 extern errcode_t ext2fs_get_next_inode_full(ext2_inode_scan scan,
@@ -1365,6 +1374,10 @@ errcode_t ext2fs_link(ext2_filsys fs, ext2_ino_t dir, const char *name,
 errcode_t ext2fs_unlink(ext2_filsys fs, ext2_ino_t dir, const char *name,
                        ext2_ino_t ino, int flags);
 
+/* symlink.c */
+errcode_t ext2fs_symlink(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t ino,
+                        const char *name, char *target);
+
 /* mmp.c */
 errcode_t ext2fs_mmp_read(ext2_filsys fs, blk64_t mmp_blk, void *buf);
 errcode_t ext2fs_mmp_write(ext2_filsys fs, blk64_t mmp_blk, void *buf);
@@ -1412,6 +1425,11 @@ extern void ext2fs_swap_inode(ext2_filsys fs,struct ext2_inode *t,
                              struct ext2_inode *f, int hostorder);
 extern void ext2fs_swap_mmp(struct mmp_struct *mmp);
 
+/* unix_io.c */
+extern int ext2fs_open_file(const char *pathname, int flags, mode_t mode);
+extern int ext2fs_stat(const char *path, ext2fs_struct_stat *buf);
+extern int ext2fs_fstat(int fd, ext2fs_struct_stat *buf);
+
 /* valid_blk.c */
 extern int ext2fs_inode_has_valid_blocks(struct ext2_inode *inode);
 extern int ext2fs_inode_has_valid_blocks2(ext2_filsys fs,
@@ -1429,9 +1447,8 @@ extern errcode_t ext2fs_write_bb_FILE(ext2_badblocks_list bb_list,
 
 
 /* inline functions */
+#ifdef NO_INLINE_FUNCS
 extern errcode_t ext2fs_get_mem(unsigned long size, void *ptr);
-extern errcode_t ext2fs_get_memalign(unsigned long size,
-                                    unsigned long align, void *ptr);
 extern errcode_t ext2fs_get_memzero(unsigned long size, void *ptr);
 extern errcode_t ext2fs_get_array(unsigned long count,
                                  unsigned long size, void *ptr);
@@ -1458,9 +1475,7 @@ extern blk_t ext2fs_inode_data_blocks(ext2_filsys fs,
                                      struct ext2_inode *inode);
 extern unsigned int ext2fs_div_ceil(unsigned int a, unsigned int b);
 extern __u64 ext2fs_div64_ceil(__u64 a, __u64 b);
-extern int ext2fs_open_file(const char *pathname, int flags, mode_t mode);
-extern int ext2fs_stat(const char *path, ext2fs_struct_stat *buf);
-extern int ext2fs_fstat(int fd, ext2fs_struct_stat *buf);
+#endif
 
 /*
  * The actual inlined functions definitions themselves...
@@ -1472,11 +1487,15 @@ extern int ext2fs_fstat(int fd, ext2fs_struct_stat *buf);
 #ifdef INCLUDE_INLINE_FUNCS
 #define _INLINE_ extern
 #else
+#if (__STDC_VERSION__ >= 199901L)
+#define _INLINE_ inline
+#else
 #ifdef __GNUC__
 #define _INLINE_ extern __inline__
 #else                          /* For Watcom C */
 #define _INLINE_ extern inline
-#endif
+#endif /* __GNUC__ */
+#endif /* __STDC_VERSION__ >= 199901L */
 #endif
 
 #ifndef EXT2_CUSTOM_MEMORY_ROUTINES
index 8828764..9cc7cba 100644 (file)
@@ -604,8 +604,8 @@ errcode_t ext2fs_extent_free_path(ext2_extent_path_t path)
  * If "blk" has no mapping (hole) then handle is left at last
  * extent before blk.
  */
-static errcode_t extent_goto(ext2_extent_handle_t handle,
-                            int leaf_level, blk64_t blk)
+errcode_t ext2fs_extent_goto2(ext2_extent_handle_t handle,
+                             int leaf_level, blk64_t blk)
 {
        struct ext2fs_extent    extent;
        errcode_t               retval;
@@ -694,7 +694,7 @@ static errcode_t extent_goto(ext2_extent_handle_t handle,
 errcode_t ext2fs_extent_goto(ext2_extent_handle_t handle,
                             blk64_t blk)
 {
-       return extent_goto(handle, 0, blk);
+       return ext2fs_extent_goto2(handle, 0, blk);
 }
 
 /*
@@ -706,12 +706,14 @@ errcode_t ext2fs_extent_goto(ext2_extent_handle_t handle,
  * Safe to call for any position in node; if not at the first entry,
  * will  simply return.
  */
-static errcode_t ext2fs_extent_fix_parents(ext2_extent_handle_t handle)
+errcode_t ext2fs_extent_fix_parents(ext2_extent_handle_t handle)
 {
        int                             retval = 0;
+       int                             orig_height;
        blk64_t                         start;
        struct extent_path              *path;
        struct ext2fs_extent            extent;
+       struct ext2_extent_info         info;
 
        EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
 
@@ -732,6 +734,10 @@ static errcode_t ext2fs_extent_fix_parents(ext2_extent_handle_t handle)
        /* modified node's start block */
        start = extent.e_lblk;
 
+       if ((retval = ext2fs_extent_get_info(handle, &info)))
+               return retval;
+       orig_height = info.max_depth - info.curr_level;
+
        /* traverse up until index not first, or startblk matches, or top */
        while (handle->level > 0 &&
               (path->left == path->entries - 1)) {
@@ -750,7 +756,7 @@ static errcode_t ext2fs_extent_fix_parents(ext2_extent_handle_t handle)
        }
 
        /* put handle back to where we started */
-       retval = ext2fs_extent_goto(handle, start);
+       retval = ext2fs_extent_goto2(handle, orig_height, start);
 done:
        return retval;
 }
@@ -813,7 +819,7 @@ errcode_t ext2fs_extent_replace(ext2_extent_handle_t handle,
  *
  * handle will be left pointing at original record.
  */
-static errcode_t extent_node_split(ext2_extent_handle_t handle)
+errcode_t ext2fs_extent_node_split(ext2_extent_handle_t handle)
 {
        errcode_t                       retval = 0;
        blk64_t                         new_node_pblk;
@@ -868,12 +874,12 @@ static errcode_t extent_node_split(ext2_extent_handle_t handle)
                        goto done;
                goal_blk = extent.e_pblk;
 
-               retval = extent_node_split(handle);
+               retval = ext2fs_extent_node_split(handle);
                if (retval)
                        goto done;
 
                /* get handle back to our original split position */
-               retval = extent_goto(handle, orig_height, orig_lblk);
+               retval = ext2fs_extent_goto2(handle, orig_height, orig_lblk);
                if (retval)
                        goto done;
        }
@@ -928,8 +934,7 @@ static errcode_t extent_node_split(ext2_extent_handle_t handle)
 
                if (log_flex)
                        group = group & ~((1 << (log_flex)) - 1);
-               goal_blk = (group * handle->fs->super->s_blocks_per_group) +
-                       handle->fs->super->s_first_data_block;
+               goal_blk = ext2fs_group_first_block2(handle->fs, group);
        }
        retval = ext2fs_alloc_block2(handle->fs, goal_blk, block_buf,
                                    &new_node_pblk);
@@ -1022,7 +1027,7 @@ static errcode_t extent_node_split(ext2_extent_handle_t handle)
        }
 
        /* get handle back to our original position */
-       retval = extent_goto(handle, orig_height, orig_lblk);
+       retval = ext2fs_extent_goto2(handle, orig_height, orig_lblk);
        if (retval)
                goto done;
 
@@ -1073,7 +1078,7 @@ errcode_t ext2fs_extent_insert(ext2_extent_handle_t handle, int flags,
                        printf("node full (level %d) - splitting\n",
                                   handle->level);
 #endif
-                       retval = extent_node_split(handle);
+                       retval = ext2fs_extent_node_split(handle);
                        if (retval)
                                return retval;
                        path = handle->path + handle->level;
@@ -1441,7 +1446,7 @@ done:
        /* get handle back to its position */
        if (orig_height > handle->max_depth)
                orig_height = handle->max_depth; /* In case we shortened the tree */
-       extent_goto(handle, orig_height, orig_lblk);
+       ext2fs_extent_goto2(handle, orig_height, orig_lblk);
        return retval;
 }
 
@@ -1553,460 +1558,10 @@ errcode_t ext2fs_extent_get_info(ext2_extent_handle_t handle,
 }
 
 #ifdef DEBUG
-
-#include "ss/ss.h"
-
-#include "debugfs.h"
-
 /*
- * Hook in new commands into debugfs
+ * Override debugfs's prompt
  */
 const char *debug_prog_name = "tst_extents";
-extern ss_request_table extent_cmds;
-ss_request_table *extra_cmds = &extent_cmds;
-
-ext2_ino_t     current_ino = 0;
-ext2_extent_handle_t current_handle;
-
-int common_extent_args_process(int argc, char *argv[], int min_argc,
-                              int max_argc, const char *cmd,
-                              const char *usage, int flags)
-{
-       if (common_args_process(argc, argv, min_argc, max_argc, cmd,
-                               usage, flags))
-               return 1;
-
-       if (!current_handle) {
-               com_err(cmd, 0, "Extent handle not open");
-               return 1;
-       }
-       return 0;
-}
-
-void do_inode(int argc, char *argv[])
-{
-       ext2_ino_t      inode;
-       int             i;
-       struct ext3_extent_header *eh;
-       errcode_t retval;
-
-       if (check_fs_open(argv[0]))
-               return;
-
-       if (argc == 1) {
-               if (current_ino)
-                       printf("Current inode is %d\n", current_ino);
-               else
-                       printf("No current inode\n");
-               return;
-       }
-
-       if (common_inode_args_process(argc, argv, &inode, 0)) {
-               return;
-       }
-
-       current_ino = 0;
-
-       retval = ext2fs_extent_open(current_fs, inode, &current_handle);
-       if (retval) {
-               com_err(argv[1], retval, "while opening extent handle");
-               return;
-       }
-
-       current_ino = inode;
-
-       printf("Loaded inode %d\n", current_ino);
-
-       return;
-}
-
-void generic_goto_node(char *cmd_name, int op)
-{
-       struct ext2fs_extent    extent;
-       errcode_t               retval;
-
-       if (check_fs_open(cmd_name))
-               return;
-
-       if (!current_handle) {
-               com_err(cmd_name, 0, "Extent handle not open");
-               return;
-       }
-
-       retval = ext2fs_extent_get(current_handle, op, &extent);
-       if (retval) {
-               com_err(cmd_name, retval, 0);
-               return;
-       }
-       dbg_print_extent(0, &extent);
-}
-
-void do_current_node(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_CURRENT);
-}
-
-void do_root_node(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_ROOT);
-}
-
-void do_last_leaf(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_LAST_LEAF);
-}
-
-void do_first_sib(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_FIRST_SIB);
-}
-
-void do_last_sib(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_LAST_SIB);
-}
-
-void do_next_sib(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_NEXT_SIB);
-}
-
-void do_prev_sib(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_PREV_SIB);
-}
-
-void do_next_leaf(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_NEXT_LEAF);
-}
-
-void do_prev_leaf(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_PREV_LEAF);
-}
-
-void do_next(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_NEXT);
-}
-
-void do_prev(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_PREV);
-}
-
-void do_up(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_UP);
-}
-
-void do_down(int argc, char *argv[])
-{
-       generic_goto_node(argv[0], EXT2_EXTENT_DOWN);
-}
-
-void do_delete_node(int argc, char *argv[])
-{
-       errcode_t       retval;
-       int             err;
-
-       if (common_extent_args_process(argc, argv, 1, 1, "delete_node",
-                                      "", CHECK_FS_RW | CHECK_FS_BITMAPS))
-               return;
-
-       retval = ext2fs_extent_delete(current_handle, 0);
-       if (retval) {
-               com_err(argv[0], retval, 0);
-               return;
-       }
-       if (current_handle->path && current_handle->path[0].curr)
-               do_current_node(argc, argv);
-}
-
-void do_replace_node(int argc, char *argv[])
-{
-       const char      *usage = "[--uninit] <lblk> <len> <pblk>";
-       errcode_t       retval;
-       struct ext2fs_extent extent;
-       int err;
-
-       if (common_extent_args_process(argc, argv, 3, 5, "replace_node",
-                                      usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
-               return;
-
-       extent.e_flags = 0;
-
-       if (!strcmp(argv[1], "--uninit")) {
-               argc--;
-               argv++;
-               extent.e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
-       }
-
-       if (argc != 4) {
-               fprintf(stderr, "Usage: %s %s\n", argv[0], usage);
-               return;
-       }
-
-       extent.e_lblk = parse_ulong(argv[1], argv[0], "logical block", &err);
-       if (err)
-               return;
-
-       extent.e_len = parse_ulong(argv[2], argv[0], "logical block", &err);
-       if (err)
-               return;
-
-       extent.e_pblk = parse_ulong(argv[3], argv[0], "logical block", &err);
-       if (err)
-               return;
 
-       retval = ext2fs_extent_replace(current_handle, 0, &extent);
-       if (retval) {
-               com_err(argv[0], retval, 0);
-               return;
-       }
-       do_current_node(argc, argv);
-}
-
-void do_split_node(int argc, char *argv[])
-{
-       errcode_t       retval;
-       struct ext2fs_extent extent;
-       int err;
-
-       if (common_extent_args_process(argc, argv, 1, 1, "split_node",
-                                      "", CHECK_FS_RW | CHECK_FS_BITMAPS))
-               return;
-
-       retval = extent_node_split(current_handle);
-       if (retval) {
-               com_err(argv[0], retval, 0);
-               return;
-       }
-       do_current_node(argc, argv);
-}
-
-void do_insert_node(int argc, char *argv[])
-{
-       const char      *usage = "[--after] [--uninit] <lblk> <len> <pblk>";
-       errcode_t       retval;
-       struct ext2fs_extent extent;
-       char *cmd;
-       int err;
-       int flags = 0;
-
-       if (common_extent_args_process(argc, argv, 3, 6, "insert_node",
-                                      usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
-               return;
-
-       cmd = argv[0];
-
-       extent.e_flags = 0;
-
-       while (argc > 2) {
-               if (!strcmp(argv[1], "--after")) {
-                       argc--;
-                       argv++;
-                       flags |= EXT2_EXTENT_INSERT_AFTER;
-                       continue;
-               }
-               if (!strcmp(argv[1], "--uninit")) {
-                       argc--;
-                       argv++;
-                       extent.e_flags |= EXT2_EXTENT_FLAGS_UNINIT;
-                       continue;
-               }
-               break;
-       }
-
-       if (argc != 4) {
-               fprintf(stderr, "usage: %s %s\n", cmd, usage);
-               return;
-       }
-
-       extent.e_lblk = parse_ulong(argv[1], cmd,
-                                   "logical block", &err);
-       if (err)
-               return;
-
-       extent.e_len = parse_ulong(argv[2], cmd,
-                                   "length", &err);
-       if (err)
-               return;
-
-       extent.e_pblk = parse_ulong(argv[3], cmd,
-                                   "pysical block", &err);
-       if (err)
-               return;
-
-       retval = ext2fs_extent_insert(current_handle, flags, &extent);
-       if (retval) {
-               com_err(cmd, retval, 0);
-               return;
-       }
-       do_current_node(argc, argv);
-}
-
-void do_set_bmap(int argc, char **argv)
-{
-       const char      *usage = "[--uninit] <lblk> <pblk>";
-       errcode_t       retval;
-       blk_t           logical;
-       blk_t           physical;
-       char            *cmd = argv[0];
-       int             flags = 0;
-       int             err;
-
-       if (common_extent_args_process(argc, argv, 3, 5, "set_bmap",
-                                      usage, CHECK_FS_RW | CHECK_FS_BITMAPS))
-               return;
-
-       if (argc > 2 && !strcmp(argv[1], "--uninit")) {
-               argc--;
-               argv++;
-               flags |= EXT2_EXTENT_SET_BMAP_UNINIT;
-       }
-
-       if (argc != 3) {
-               fprintf(stderr, "Usage: %s %s\n", cmd, usage);
-               return;
-       }
-
-       logical = parse_ulong(argv[1], cmd,
-                                   "logical block", &err);
-       if (err)
-               return;
-
-       physical = parse_ulong(argv[2], cmd,
-                                   "physical block", &err);
-       if (err)
-               return;
-
-       retval = ext2fs_extent_set_bmap(current_handle, logical,
-                                       (blk64_t) physical, flags);
-       if (retval) {
-               com_err(cmd, retval, 0);
-               return;
-       }
-       if (current_handle->path && current_handle->path[0].curr)
-               do_current_node(argc, argv);
-}
-
-void do_print_all(int argc, char **argv)
-{
-       const char      *usage = "[--leaf-only|--reverse|--reverse-leaf]";
-       struct ext2fs_extent    extent;
-       errcode_t               retval;
-       errcode_t               end_err = EXT2_ET_EXTENT_NO_NEXT;
-       int                     op = EXT2_EXTENT_NEXT;
-       int                     first_op = EXT2_EXTENT_ROOT;
-
-
-       if (common_extent_args_process(argc, argv, 1, 2, "print_all",
-                                      usage, 0))
-               return;
-
-       if (argc == 2) {
-               if (!strcmp(argv[1], "--leaf-only"))
-                       op = EXT2_EXTENT_NEXT_LEAF;
-               else if (!strcmp(argv[1], "--reverse")) {
-                       op = EXT2_EXTENT_PREV;
-                       first_op = EXT2_EXTENT_LAST_LEAF;
-                       end_err = EXT2_ET_EXTENT_NO_PREV;
-               } else if (!strcmp(argv[1], "--reverse-leaf")) {
-                       op = EXT2_EXTENT_PREV_LEAF;
-                       first_op = EXT2_EXTENT_LAST_LEAF;
-                       end_err = EXT2_ET_EXTENT_NO_PREV;
-               } else {
-                       fprintf(stderr, "Usage: %s %s\n", argv[0], usage);
-                       return;
-               }
-       }
-
-       retval = ext2fs_extent_get(current_handle, first_op, &extent);
-       if (retval) {
-               com_err(argv[0], retval, 0);
-               return;
-       }
-       dbg_print_extent(0, &extent);
-
-       while (1) {
-               retval = ext2fs_extent_get(current_handle, op, &extent);
-               if (retval == end_err)
-                       break;
-
-               if (retval) {
-                       com_err(argv[0], retval, 0);
-                       return;
-               }
-               dbg_print_extent(0, &extent);
-       }
-}
-
-void do_info(int argc, char **argv)
-{
-       struct ext2fs_extent    extent;
-       struct ext2_extent_info info;
-       errcode_t               retval;
-
-       if (common_extent_args_process(argc, argv, 1, 1, "info", "", 0))
-               return;
-
-       retval = ext2fs_extent_get_info(current_handle, &info);
-       if (retval) {
-               com_err(argv[0], retval, 0);
-               return;
-       }
-
-       retval = ext2fs_extent_get(current_handle,
-                                  EXT2_EXTENT_CURRENT, &extent);
-       if (retval) {
-               com_err(argv[0], retval, 0);
-               return;
-       }
-
-       dbg_print_extent(0, &extent);
-
-       printf("Current handle location: %d/%d (max: %d, bytes %d), level %d/%d\n",
-              info.curr_entry, info.num_entries, info.max_entries,
-              info.bytes_avail, info.curr_level, info.max_depth);
-       printf("\tmax lblk: %llu, max pblk: %llu\n", info.max_lblk,
-              info.max_pblk);
-       printf("\tmax_len: %u, max_uninit_len: %u\n", info.max_len,
-              info.max_uninit_len);
-}
-
-void do_goto_block(int argc, char **argv)
-{
-       struct ext2fs_extent    extent;
-       errcode_t               retval;
-       int                     op = EXT2_EXTENT_NEXT_LEAF;
-       blk64_t                 blk;
-       int                     level = 0, err;
-
-       if (common_extent_args_process(argc, argv, 2, 3, "goto_block",
-                                      "block [level]", 0))
-               return;
-
-       if (strtoblk(argv[0], argv[1], &blk))
-               return;
-
-       if (argc == 3) {
-               level = parse_ulong(argv[2], argv[0], "level", &err);
-               if (err)
-                       return;
-       }
-
-       retval = extent_goto(current_handle, level, (blk64_t) blk);
-
-       if (retval) {
-               com_err(argv[0], retval,
-                       "while trying to go to block %llu, level %d",
-                       (unsigned long long) blk, level);
-               return;
-       }
-
-       generic_goto_node(argv[0], EXT2_EXTENT_CURRENT);
-}
 #endif
 
index 07d6d52..d02488c 100644 (file)
@@ -174,7 +174,7 @@ errcode_t ext2fs_alloc_generic_bmap(ext2_filsys fs, errcode_t magic,
 }
 
 #ifdef BMAP_STATS
-void ext2fs_print_bmap_statistics(ext2fs_generic_bitmap bitmap)
+static void ext2fs_print_bmap_statistics(ext2fs_generic_bitmap bitmap)
 {
        struct ext2_bmap_statistics *stats = &bitmap->stats;
 #ifdef BMAP_STATS_OPS
@@ -624,6 +624,8 @@ void ext2fs_set_generic_bmap_padding(ext2fs_generic_bitmap bmap)
 int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bmap,
                                    blk64_t block, unsigned int num)
 {
+       __u64   end = block + num;
+
        if (!bmap)
                return EINVAL;
 
@@ -646,12 +648,26 @@ int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bmap,
 
        INC_STAT(bmap, test_ext_count);
 
+       /* convert to clusters if necessary */
+       block >>= bmap->cluster_bits;
+       end += (1 << bmap->cluster_bits) - 1;
+       end >>= bmap->cluster_bits;
+       num = end - block;
+
+       if ((block < bmap->start) || (block+num-1 > bmap->end)) {
+               ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST, block,
+                                  bmap->description);
+               return EINVAL;
+       }
+
        return bmap->bitmap_ops->test_clear_bmap_extent(bmap, block, num);
 }
 
 void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bmap,
                                     blk64_t block, unsigned int num)
 {
+       __u64   end = block + num;
+
        if (!bmap)
                return;
 
@@ -670,6 +686,12 @@ void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bmap,
 
        INC_STAT(bmap, mark_ext_count);
 
+       /* convert to clusters if necessary */
+       block >>= bmap->cluster_bits;
+       end += (1 << bmap->cluster_bits) - 1;
+       end >>= bmap->cluster_bits;
+       num = end - block;
+
        if ((block < bmap->start) || (block+num-1 > bmap->end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
                                   bmap->description);
@@ -682,6 +704,8 @@ void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bmap,
 void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bmap,
                                       blk64_t block, unsigned int num)
 {
+       __u64   end = block + num;
+
        if (!bmap)
                return;
 
@@ -700,6 +724,12 @@ void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bmap,
 
        INC_STAT(bmap, unmark_ext_count);
 
+       /* convert to clusters if necessary */
+       block >>= bmap->cluster_bits;
+       end += (1 << bmap->cluster_bits) - 1;
+       end >>= bmap->cluster_bits;
+       num = end - block;
+
        if ((block < bmap->start) || (block+num-1 > bmap->end)) {
                ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block,
                                   bmap->description);
index 0a7053e..a9a4812 100644 (file)
@@ -140,25 +140,11 @@ static int valid_offset (int fd, ext2_loff_t offset)
  * Returns the number of blocks in a partition
  */
 errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
-                                blk64_t *retblocks)
+                                 blk64_t *retblocks)
 {
        int     fd, rc = 0;
-       int valid_blkgetsize64 = 1;
-#ifdef __linux__
-       struct          utsname ut;
-#endif
        unsigned long long size64;
-       unsigned long   size;
        ext2_loff_t high, low;
-#ifdef FDGETPRM
-       struct floppy_struct this_floppy;
-#endif
-#ifdef HAVE_SYS_DISKLABEL_H
-       int part;
-       struct disklabel lab;
-       struct partition *pp;
-       char ch;
-#endif /* HAVE_SYS_DISKLABEL_H */
 
        fd = ext2fs_open_file(file, O_RDONLY, 0);
        if (fd < 0)
@@ -172,63 +158,83 @@ errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
 #endif
 
 #ifdef BLKGETSIZE64
+       {
+               int valid_blkgetsize64 = 1;
 #ifdef __linux__
-       if ((uname(&ut) == 0) &&
-           ((ut.release[0] == '2') && (ut.release[1] == '.') &&
-            (ut.release[2] < '6') && (ut.release[3] == '.')))
-               valid_blkgetsize64 = 0;
+               struct utsname ut;
+
+               if ((uname(&ut) == 0) &&
+                   ((ut.release[0] == '2') && (ut.release[1] == '.') &&
+                    (ut.release[2] < '6') && (ut.release[3] == '.')))
+                       valid_blkgetsize64 = 0;
 #endif
-       if (valid_blkgetsize64 &&
-           ioctl(fd, BLKGETSIZE64, &size64) >= 0) {
-               *retblocks = size64 / blocksize;
-               goto out;
+               if (valid_blkgetsize64 &&
+                   ioctl(fd, BLKGETSIZE64, &size64) >= 0) {
+                       *retblocks = size64 / blocksize;
+                       goto out;
+               }
        }
 #endif /* BLKGETSIZE64 */
 
 #ifdef BLKGETSIZE
-       if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
-               *retblocks = size / (blocksize / 512);
-               goto out;
+       {
+               unsigned long   size;
+
+               if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
+                       *retblocks = size / (blocksize / 512);
+                       goto out;
+               }
        }
 #endif
 
 #ifdef FDGETPRM
-       if (ioctl(fd, FDGETPRM, &this_floppy) >= 0) {
-               *retblocks = this_floppy.size / (blocksize / 512);
-               goto out;
+       {
+               struct floppy_struct this_floppy;
+
+               if (ioctl(fd, FDGETPRM, &this_floppy) >= 0) {
+                       *retblocks = this_floppy.size / (blocksize / 512);
+                       goto out;
+               }
        }
 #endif
 
 #ifdef HAVE_SYS_DISKLABEL_H
-#if defined(DIOCGMEDIASIZE)
        {
-           off_t ms;
-           u_int bs;
-           if (ioctl(fd, DIOCGMEDIASIZE, &ms) >= 0) {
-               *retblocks = ms / blocksize;
-               goto out;
-           }
-       }
+               int part;
+               struct disklabel lab;
+               struct partition *pp;
+               char ch;
+
+#if defined(DIOCGMEDIASIZE)
+               {
+                       off_t ms;
+                       u_int bs;
+                       if (ioctl(fd, DIOCGMEDIASIZE, &ms) >= 0) {
+                               *retblocks = ms / blocksize;
+                               goto out;
+                       }
+               }
 #elif defined(DIOCGDINFO)
-       /* old disklabel interface */
-       part = strlen(file) - 1;
-       if (part >= 0) {
-               ch = file[part];
-               if (isdigit(ch))
-                       part = 0;
-               else if (ch >= 'a' && ch <= 'h')
-                       part = ch - 'a';
-               else
-                       part = -1;
-       }
-       if (part >= 0 && (ioctl(fd, DIOCGDINFO, (char *)&lab) >= 0)) {
-               pp = &lab.d_partitions[part];
-               if (pp->p_size) {
-                       *retblocks = pp->p_size / (blocksize / 512);
-                       goto out;
+               /* old disklabel interface */
+               part = strlen(file) - 1;
+               if (part >= 0) {
+                       ch = file[part];
+                       if (isdigit(ch))
+                               part = 0;
+                       else if (ch >= 'a' && ch <= 'h')
+                               part = ch - 'a';
+                       else
+                               part = -1;
+               }
+               if (part >= 0 && (ioctl(fd, DIOCGDINFO, (char *)&lab) >= 0)) {
+                       pp = &lab.d_partitions[part];
+                       if (pp->p_size) {
+                               *retblocks = pp->p_size / (blocksize / 512);
+                               goto out;
+                       }
                }
-       }
 #endif /* defined(DIOCG*) */
+       }
 #endif /* HAVE_SYS_DISKLABEL_H */
 
        {
@@ -247,10 +253,9 @@ errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
         * find the size of the partition.
         */
        low = 0;
-       for (high = 1024; valid_offset (fd, high); high *= 2)
+       for (high = 1024; valid_offset(fd, high); high *= 2)
                low = high;
-       while (low < high - 1)
-       {
+       while (low < high - 1) {
                const ext2_loff_t mid = (low + high) / 2;
 
                if (valid_offset (fd, mid))
@@ -258,7 +263,7 @@ errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
                else
                        high = mid;
        }
-       valid_offset (fd, 0);
+       valid_offset(fd, 0);
        size64 = low + 1;
        *retblocks = size64 / blocksize;
 out:
index a0fb81e..7f3b25b 100644 (file)
@@ -279,7 +279,7 @@ errout:
 errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
 {
        ext2fs_generic_bitmap   bmap;
-       errcode_t               err, retval;
+       errcode_t               retval;
        ssize_t                 actual;
        __u32                   itr, cnt, size;
        int                     c, total_size;
@@ -292,7 +292,6 @@ errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
                                return retval;
                }
                bmap = fs->inode_map;
-               err = EXT2_ET_MAGIC_INODE_BITMAP;
                itr = 1;
                cnt = EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
                size = (EXT2_INODES_PER_GROUP(fs->super) / 8);
@@ -303,7 +302,6 @@ errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
                                return retval;
                }
                bmap = fs->block_map;
-               err = EXT2_ET_MAGIC_BLOCK_BITMAP;
                itr = fs->super->s_first_data_block;
                cnt = EXT2_BLOCKS_PER_GROUP(fs->super) * fs->group_desc_count;
                size = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
@@ -356,7 +354,7 @@ errcode_t ext2fs_image_bitmap_write(ext2_filsys fs, int fd, int flags)
 errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags)
 {
        ext2fs_generic_bitmap   bmap;
-       errcode_t               err, retval;
+       errcode_t               retval;
        __u32                   itr, cnt;
        char                    buf[1024];
        unsigned int            size;
@@ -369,7 +367,6 @@ errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags)
                                return retval;
                }
                bmap = fs->inode_map;
-               err = EXT2_ET_MAGIC_INODE_BITMAP;
                itr = 1;
                cnt = EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count;
                size = (EXT2_INODES_PER_GROUP(fs->super) / 8);
@@ -380,7 +377,6 @@ errcode_t ext2fs_image_bitmap_read(ext2_filsys fs, int fd, int flags)
                                return retval;
                }
                bmap = fs->block_map;
-               err = EXT2_ET_MAGIC_BLOCK_BITMAP;
                itr = fs->super->s_first_data_block;
                cnt = EXT2_BLOCKS_PER_GROUP(fs->super) * fs->group_desc_count;
                size = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
index 5a6f8ea..5afdc27 100644 (file)
@@ -101,6 +101,7 @@ errcode_t ext2fs_initialize(const char *name, int flags,
        unsigned        reserved_inos;
        char            *buf = 0;
        char            c;
+       double          reserved_ratio;
 
        if (!param || !ext2fs_blocks_count(param))
                return EXT2_ET_INVALID_ARGUMENT;
@@ -206,6 +207,8 @@ errcode_t ext2fs_initialize(const char *name, int flags,
                super->s_log_block_size;
 
        if (bigalloc_flag) {
+               unsigned long long bpg;
+
                if (param->s_blocks_per_group &&
                    param->s_clusters_per_group &&
                    ((param->s_clusters_per_group * EXT2FS_CLUSTER_RATIO(fs)) !=
@@ -219,12 +222,19 @@ errcode_t ext2fs_initialize(const char *name, int flags,
                        super->s_clusters_per_group = 
                                param->s_blocks_per_group /
                                EXT2FS_CLUSTER_RATIO(fs);
-               else
+               else if (super->s_log_cluster_size + 15 < 32)
                        super->s_clusters_per_group = fs->blocksize * 8;
+               else
+                       super->s_clusters_per_group = (fs->blocksize - 1) * 8;
                if (super->s_clusters_per_group > EXT2_MAX_CLUSTERS_PER_GROUP(super))
                        super->s_clusters_per_group = EXT2_MAX_CLUSTERS_PER_GROUP(super);
-               super->s_blocks_per_group = EXT2FS_C2B(fs,
-                                      super->s_clusters_per_group);
+               bpg = EXT2FS_C2B(fs,
+                       (unsigned long long) super->s_clusters_per_group);
+               if (bpg >= (((unsigned long long) 1) << 32)) {
+                       retval = EXT2_ET_INVALID_ARGUMENT;
+                       goto cleanup;
+               }
+               super->s_blocks_per_group = bpg;
        } else {
                set_field(s_blocks_per_group, fs->blocksize * 8);
                if (super->s_blocks_per_group > EXT2_MAX_BLOCKS_PER_GROUP(super))
@@ -240,6 +250,8 @@ errcode_t ext2fs_initialize(const char *name, int flags,
                goto cleanup;
        }
 
+       set_field(s_mmp_update_interval, 0);
+
        /*
         * If we're creating an external journal device, we don't need
         * to bother with the rest.
@@ -391,6 +403,14 @@ ipg_retry:
        if (rem && (rem < overhead+50)) {
                ext2fs_blocks_count_set(super, ext2fs_blocks_count(super) -
                                        rem);
+               /*
+                * If blocks count is changed, we need to recalculate
+                * reserved blocks count not to exceed 50%.
+                */
+               reserved_ratio = 100.0 * ext2fs_r_blocks_count(param) /
+                       ext2fs_blocks_count(param);
+               ext2fs_r_blocks_count_set(super, reserved_ratio *
+                       ext2fs_blocks_count(super) / 100.0);
 
                goto retry;
        }
index eef3dda..05da1f7 100644 (file)
@@ -99,7 +99,7 @@ static errcode_t test_memalign(unsigned long align)
        if (!retval && !isaligned(ptr, align))
                retval = EINVAL;
        free(ptr);
-       printf("tst_memliagn(%lu): %s\n", align, 
+       printf("tst_memalign(%lu) is %s\n", align,
               retval ? error_message(retval) : "OK");
        return retval;
 }
index 77fc447..fd72d4c 100644 (file)
@@ -533,7 +533,9 @@ errcode_t ext2fs_read_inode_full(ext2_filsys fs, ext2_ino_t ino,
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
        /* Check to see if user has an override function */
-       if (fs->read_inode) {
+       if (fs->read_inode &&
+           ((bufsize == sizeof(struct ext2_inode)) ||
+            (EXT2_INODE_SIZE(fs->super) == sizeof(struct ext2_inode)))) {
                retval = (fs->read_inode)(fs, ino, inode);
                if (retval != EXT2_ET_CALLBACK_NOTHANDLED)
                        return retval;
index bf532ae..9bccc74 100644 (file)
@@ -53,8 +53,15 @@ static errcode_t check_mntent_file(const char *mtab_file, const char *file,
        int             fd;
 
        *mount_flags = 0;
-       if ((f = setmntent (mtab_file, "r")) == NULL)
-               return (errno == ENOENT ? EXT2_NO_MTAB_FILE : errno);
+       if ((f = setmntent (mtab_file, "r")) == NULL) {
+               if (errno == ENOENT) {
+                       if (getenv("EXT2FS_NO_MTAB_OK"))
+                               return 0;
+                       else
+                               return EXT2_NO_MTAB_FILE;
+               }
+               return errno;
+       }
        if (stat(file, &st_buf) == 0) {
                if (S_ISBLK(st_buf.st_mode)) {
 #ifndef __GNU__ /* The GNU hurd is broken with respect to stat devices */
@@ -302,9 +309,7 @@ leave:
 errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags,
                                  char *mtpt, int mtlen)
 {
-       struct stat     st_buf;
        errcode_t       retval = 0;
-       int             fd;
 
        if (is_swap_device(device)) {
                *mount_flags = EXT2_MF_MOUNTED | EXT2_MF_SWAP;
@@ -327,15 +332,18 @@ errcode_t ext2fs_check_mount_point(const char *device, int *mount_flags,
                return retval;
 
 #ifdef __linux__ /* This only works on Linux 2.6+ systems */
-       if ((stat(device, &st_buf) != 0) ||
-           !S_ISBLK(st_buf.st_mode))
-               return 0;
-       fd = open(device, O_RDONLY | O_EXCL);
-       if (fd < 0) {
-               if (errno == EBUSY)
-                       *mount_flags |= EXT2_MF_BUSY;
-       } else
-               close(fd);
+       {
+               struct stat st_buf;
+
+               if (stat(device, &st_buf) == 0 && S_ISBLK(st_buf.st_mode)) {
+                       int fd = open(device, O_RDONLY | O_EXCL);
+
+                       if (fd >= 0)
+                               close(fd);
+                       else if (errno == EBUSY)
+                               *mount_flags |= EXT2_MF_BUSY;
+               }
+       }
 #endif
 
        return 0;
index 066c031..059bf8f 100644 (file)
@@ -214,13 +214,13 @@ typedef struct journal_superblock_s
 
 #define JFS_HAS_COMPAT_FEATURE(j,mask)                                 \
        ((j)->j_format_version >= 2 &&                                  \
-        ((j)->j_superblock->s_feature_compat & cpu_to_be32((mask))))
+        ((j)->j_superblock->s_feature_compat & ext2fs_cpu_to_be32((mask))))
 #define JFS_HAS_RO_COMPAT_FEATURE(j,mask)                              \
        ((j)->j_format_version >= 2 &&                                  \
-        ((j)->j_superblock->s_feature_ro_compat & cpu_to_be32((mask))))
+        ((j)->j_superblock->s_feature_ro_compat & ext2fs_cpu_to_be32((mask))))
 #define JFS_HAS_INCOMPAT_FEATURE(j,mask)                               \
        ((j)->j_format_version >= 2 &&                                  \
-        ((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask))))
+        ((j)->j_superblock->s_feature_incompat & ext2fs_cpu_to_be32((mask))))
 
 #define JFS_FEATURE_COMPAT_CHECKSUM    0x00000001
 
index b0576e4..c3a98a2 100644 (file)
@@ -90,17 +90,14 @@ static ext2_loff_t my_llseek (int fd, ext2_loff_t offset, int origin)
 
 ext2_loff_t ext2fs_llseek (int fd, ext2_loff_t offset, int origin)
 {
+#if SIZEOF_OFF_T >= SIZEOF_LONG_LONG
+       return lseek (fd, offset, origin);
+#else
        ext2_loff_t result;
        static int do_compat = 0;
 
-       if ((sizeof(off_t) >= sizeof(ext2_loff_t)) ||
-           (offset < ((ext2_loff_t) 1 << ((sizeof(off_t)*8) -1))))
-               return lseek(fd, (off_t) offset, origin);
-
-       if (do_compat) {
-               errno = EINVAL;
-               return -1;
-       }
+       if (do_compat)
+               goto fallback;
 
        result = my_llseek (fd, offset, origin);
        if (result == -1 && errno == ENOSYS) {
@@ -109,9 +106,14 @@ ext2_loff_t ext2fs_llseek (int fd, ext2_loff_t offset, int origin)
                 * which does not support the llseek system call
                 */
                do_compat++;
+       fallback:
+               if (offset < ((ext2_loff_t) 1 << ((sizeof(off_t)*8) -1)))
+                       return lseek(fd, (off_t) offset, origin);
                errno = EINVAL;
+               return -1;
        }
        return result;
+#endif
 }
 
 #else /* !linux */
index 30ccdd2..c636a97 100644 (file)
@@ -358,9 +358,7 @@ static errcode_t write_journal_inode(ext2_filsys fs, ext2_ino_t journal_ino,
                    ext2fs_bg_free_blocks_count(fs, group))
                        group = i;
 
-       es.goal = (fs->super->s_blocks_per_group * group) +
-               fs->super->s_first_data_block;
-
+       es.goal = ext2fs_group_first_block2(fs, group);
        retval = ext2fs_block_iterate3(fs, journal_ino, BLOCK_FLAG_APPEND,
                                       0, mkjournal_proc, &es);
        if (es.err) {
@@ -496,7 +494,7 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags)
        ext2_ino_t              journal_ino;
        struct stat             st;
        char                    jfile[1024];
-       int                     mount_flags, f;
+       int                     mount_flags;
        int                     fd = -1;
 
        if (flags & EXT2_MKJOURNAL_NO_MNT_CHECK)
@@ -507,6 +505,9 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags)
                return retval;
 
        if (mount_flags & EXT2_MF_MOUNTED) {
+#if HAVE_EXT2_IOCTLS
+               int f = 0;
+#endif
                strcat(jfile, "/.journal");
 
                /*
@@ -519,7 +520,6 @@ errcode_t ext2fs_add_journal_inode(ext2_filsys fs, blk_t num_blocks, int flags)
 #if HAVE_EXT2_IOCTLS
                fd = open(jfile, O_RDONLY);
                if (fd >= 0) {
-                       f = 0;
                        ioctl(fd, EXT2_IOC_SETFLAGS, &f);
                        close(fd);
                }
index bb3772d..98562e7 100644 (file)
@@ -4,8 +4,8 @@
  * Copyright (C) 2011 Whamcloud, Inc.
  *
  * %Begin-Header%
- * This file may be redistributed under the terms of the GNU Public
- * License.
+ * This file may be redistributed under the terms of the GNU Library
+ * General Public License, version 2.
  * %End-Header%
  */
 
@@ -62,7 +62,8 @@ errcode_t ext2fs_mmp_read(ext2_filsys fs, blk64_t mmp_blk, void *buf)
                        return retval;
        }
 
-       if (ext2fs_llseek(fs->mmp_fd, mmp_blk * fs->blocksize, SEEK_SET) !=
+       if ((blk64_t) ext2fs_llseek(fs->mmp_fd, mmp_blk * fs->blocksize,
+                                   SEEK_SET) !=
            mmp_blk * fs->blocksize) {
                retval = EXT2_ET_LLSEEK_FAILED;
                goto out;
index 482e4ab..113b80e 100644 (file)
@@ -99,10 +99,11 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
        errcode_t       retval;
        unsigned long   i, first_meta_bg;
        __u32           features;
-       unsigned int    groups_per_block, blocks_per_group, io_flags;
+       unsigned int    blocks_per_group, io_flags;
        blk64_t         group_block, blk;
        char            *dest, *cp;
 #ifdef WORDS_BIGENDIAN
+       unsigned int    groups_per_block;
        struct ext2_group_desc *gdp;
        int             j;
 #endif
@@ -332,7 +333,9 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
        if (group_block == 0 && fs->blocksize == 1024)
                group_block = 1; /* Deal with 1024 blocksize && bigalloc */
        dest = (char *) fs->group_desc;
+#ifdef WORDS_BIGENDIAN
        groups_per_block = EXT2_DESC_PER_BLOCK(fs->super);
+#endif
        if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
                first_meta_bg = fs->super->s_first_meta_bg;
        else
@@ -388,9 +391,6 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                        ext2fs_mark_super_dirty(fs);
        }
 
-       fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR;
-       *ret_fs = fs;
-
        if ((fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_MMP) &&
            !(flags & EXT2_FLAG_SKIP_MMP) &&
            (flags & (EXT2_FLAG_RW | EXT2_FLAG_EXCLUSIVE))) {
@@ -402,6 +402,9 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
                }
        }
 
+       fs->flags &= ~EXT2_FLAG_NOFREE_ON_ERROR;
+       *ret_fs = fs;
+
        return 0;
 cleanup:
        if (flags & EXT2_FLAG_NOFREE_ON_ERROR)
index 37d1509..8c9a6f1 100644 (file)
 #include "ext2fs.h"
 #include "ext2fsP.h"
 
+#include <time.h>
+
 static char spaces[80], backspaces[80];
+static time_t last_update;
 
 static int int_log10(unsigned int arg)
 {
@@ -42,11 +45,11 @@ void ext2fs_numeric_progress_init(ext2_filsys fs,
        spaces[sizeof(spaces)-1] = 0;
        memset(backspaces, '\b', sizeof(backspaces)-1);
        backspaces[sizeof(backspaces)-1] = 0;
-       progress->skip_progress = 0;
+
+       memset(progress, 0, sizeof(*progress));
        if (getenv("E2FSPROGS_SKIP_PROGRESS"))
                progress->skip_progress++;
 
-       memset(progress, 0, sizeof(*progress));
 
        /*
         * Figure out how many digits we need
@@ -58,16 +61,23 @@ void ext2fs_numeric_progress_init(ext2_filsys fs,
                fputs(label, stdout);
                fflush(stdout);
        }
+       last_update = 0;
 }
 
 void ext2fs_numeric_progress_update(ext2_filsys fs,
                                    struct ext2fs_numeric_progress_struct * progress,
                                    __u64 val)
 {
+       time_t now;
+
        if (!(fs->flags & EXT2_FLAG_PRINT_PROGRESS))
                return;
        if (progress->skip_progress)
                return;
+       now = time(0);
+       if (now == last_update)
+               return;
+       last_update = now;
 
        printf("%*llu/%*llu", progress->log_max, val,
               progress->log_max, progress->max);
index b0a0278..8394270 100644 (file)
@@ -155,7 +155,7 @@ int qcow2_write_raw_image(int qcow2_fd, int raw_fd,
        errcode_t ret = 0;
        unsigned int l1_index, l2_index;
        ext2_off64_t offset;
-       blk64_t *l1_table, *l2_table;
+       blk64_t *l1_table, *l2_table = NULL;
        void *copy_buf = NULL;
        size_t size;
 
index 7467e10..9439303 100644 (file)
@@ -375,7 +375,7 @@ struct rb_node *ext2fs_rb_last(const struct rb_root *root)
        return n;
 }
 
-struct rb_node *ext2fs_rb_next(const struct rb_node *node)
+struct rb_node *ext2fs_rb_next(struct rb_node *node)
 {
        struct rb_node *parent;
 
@@ -403,7 +403,7 @@ struct rb_node *ext2fs_rb_next(const struct rb_node *node)
        return parent;
 }
 
-struct rb_node *ext2fs_rb_prev(const struct rb_node *node)
+struct rb_node *ext2fs_rb_prev(struct rb_node *node)
 {
        struct rb_node *parent;
 
index 16defb5..3b0b078 100644 (file)
@@ -158,8 +158,8 @@ extern void ext2fs_rb_augment_erase_end(struct rb_node *node,
                                 rb_augment_f func, void *data);
 
 /* Find logical next and previous nodes in a tree */
-extern struct rb_node *ext2fs_rb_next(const struct rb_node *);
-extern struct rb_node *ext2fs_rb_prev(const struct rb_node *);
+extern struct rb_node *ext2fs_rb_next(struct rb_node *);
+extern struct rb_node *ext2fs_rb_prev(struct rb_node *);
 extern struct rb_node *ext2fs_rb_first(const struct rb_root *);
 extern struct rb_node *ext2fs_rb_last(const struct rb_root *);
 
index 53f6ec4..b7d65a9 100644 (file)
@@ -154,7 +154,6 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
        int block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8;
        int inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
        int csum_flag = 0;
-       int do_image = fs->flags & EXT2_FLAG_IMAGE_FILE;
        unsigned int    cnt;
        blk64_t blk;
        blk64_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block);
@@ -164,7 +163,8 @@ static errcode_t read_bitmaps(ext2_filsys fs, int do_inode, int do_block)
 
        EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
-       if ((block_nbytes > fs->blocksize) || (inode_nbytes > fs->blocksize))
+       if ((block_nbytes > (int) fs->blocksize) ||
+           (inode_nbytes > (int) fs->blocksize))
                return EXT2_ET_CORRUPT_SUPERBLOCK;
 
        fs->write_bitmaps = ext2fs_write_bitmaps;
diff --git a/lib/ext2fs/sparse.c b/lib/ext2fs/sparse.c
deleted file mode 100644 (file)
index 3a0877b..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * sparse.c --- find the groups in an ext2 filesystem with metadata backups
- *
- * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
- * Copyright (C) 2002 Andreas Dilger.
- *
- * %Begin-Header%
- * This file may be redistributed under the terms of the GNU Library
- * General Public License, version 2.
- * %End-Header%
- */
-
-#include "config.h"
-#include <stdio.h>
-
-#include "ext2_fs.h"
-#include "ext2fsP.h"
-
-static int test_root(int a, int b)
-{
-       if (a == 0)
-               return 1;
-       while (1) {
-               if (a == 1)
-                       return 1;
-               if (a % b)
-                       return 0;
-               a = a / b;
-       }
-}
-
-int ext2fs_bg_has_super(ext2_filsys fs, int group_block)
-{
-       if (!(fs->super->s_feature_ro_compat &
-             EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER))
-               return 1;
-
-       if (test_root(group_block, 3) || (test_root(group_block, 5)) ||
-           test_root(group_block, 7))
-               return 1;
-
-       return 0;
-}
-
-/*
- * Iterate through the groups which hold BACKUP superblock/GDT copies in an
- * ext3 filesystem.  The counters should be initialized to 1, 5, and 7 before
- * calling this for the first time.  In a sparse filesystem it will be the
- * sequence of powers of 3, 5, and 7: 1, 3, 5, 7, 9, 25, 27, 49, 81, ...
- * For a non-sparse filesystem it will be every group: 1, 2, 3, 4, ...
- */
-unsigned int ext2fs_list_backups(ext2_filsys fs, unsigned int *three,
-                                unsigned int *five, unsigned int *seven)
-{
-       unsigned int *min = three;
-       int mult = 3;
-       unsigned int ret;
-
-       if (!(fs->super->s_feature_ro_compat &
-             EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER)) {
-               ret = *min;
-               *min += 1;
-               return ret;
-       }
-
-       if (*five < *min) {
-               min = five;
-               mult = 5;
-       }
-       if (*seven < *min) {
-               min = seven;
-               mult = 7;
-       }
-
-       ret = *min;
-       *min *= mult;
-
-       return ret;
-}
diff --git a/lib/ext2fs/symlink.c b/lib/ext2fs/symlink.c
new file mode 100644 (file)
index 0000000..e943412
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * symlink.c --- make a symlink in the filesystem, based on mkdir.c
+ *
+ * Copyright (c) 2012, Intel Corporation.
+ * All Rights Reserved.
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Library
+ * General Public License, version 2.
+ * %End-Header%
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <string.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <fcntl.h>
+#include <time.h>
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include "ext2_fs.h"
+#include "ext2fs.h"
+
+errcode_t ext2fs_symlink(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t ino,
+                        const char *name, char *target)
+{
+       ext2_extent_handle_t    handle;
+       errcode_t               retval;
+       struct ext2_inode       inode;
+       ext2_ino_t              scratch_ino;
+       blk64_t                 blk;
+       int                     fastlink;
+       unsigned int            target_len;
+       char                    *block_buf = 0;
+
+       EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
+
+       /* The Linux kernel doesn't allow for links longer than a block */
+       target_len = strlen(target);
+       if (target_len > fs->blocksize) {
+               retval = EXT2_ET_INVALID_ARGUMENT;
+               goto cleanup;
+       }
+
+       /*
+        * Allocate a data block for slow links
+        */
+       fastlink = (target_len < sizeof(inode.i_block));
+       if (!fastlink) {
+               retval = ext2fs_new_block2(fs, 0, 0, &blk);
+               if (retval)
+                       goto cleanup;
+               retval = ext2fs_get_mem(fs->blocksize, &block_buf);
+               if (retval)
+                       goto cleanup;
+       }
+
+       /*
+        * Allocate an inode, if necessary
+        */
+       if (!ino) {
+               retval = ext2fs_new_inode(fs, parent, LINUX_S_IFLNK | 0755,
+                                         0, &ino);
+               if (retval)
+                       goto cleanup;
+       }
+
+       /*
+        * Create the inode structure....
+        */
+       memset(&inode, 0, sizeof(struct ext2_inode));
+       inode.i_mode = LINUX_S_IFLNK | 0777;
+       inode.i_uid = inode.i_gid = 0;
+       ext2fs_iblk_set(fs, &inode, fastlink ? 0 : 1);
+       inode.i_links_count = 1;
+       inode.i_size = target_len;
+       /* The time fields are set by ext2fs_write_new_inode() */
+
+       if (fastlink) {
+               /* Fast symlinks, target stored in inode */
+               strcpy((char *)&inode.i_block, target);
+       } else {
+               /* Slow symlinks, target stored in the first block */
+               memset(block_buf, 0, fs->blocksize);
+               strcpy(block_buf, target);
+               if (fs->super->s_feature_incompat &
+                  EXT3_FEATURE_INCOMPAT_EXTENTS) {
+                       /*
+                        * The extent bmap is setup after the inode and block
+                        * have been written out below.
+                        */
+                       inode.i_flags |= EXT4_EXTENTS_FL;
+               } else {
+                       inode.i_block[0] = blk;
+               }
+       }
+
+       /*
+        * Write out the inode and inode data block.  The inode generation
+        * number is assigned by write_new_inode, which means that the
+        * operations using ino must come after it.
+        */
+       retval = ext2fs_write_new_inode(fs, ino, &inode);
+       if (retval)
+               goto cleanup;
+
+       if (!fastlink) {
+               retval = io_channel_write_blk(fs->io, blk, 1, block_buf);
+               if (retval)
+                       goto cleanup;
+
+               if (fs->super->s_feature_incompat &
+                   EXT3_FEATURE_INCOMPAT_EXTENTS) {
+                       retval = ext2fs_extent_open2(fs, ino, &inode, &handle);
+                       if (retval)
+                               goto cleanup;
+                       retval = ext2fs_extent_set_bmap(handle, 0, blk, 0);
+                       ext2fs_extent_free(handle);
+                       if (retval)
+                               goto cleanup;
+               }
+       }
+
+       /*
+        * Link the symlink into the filesystem hierarchy
+        */
+       if (name) {
+               retval = ext2fs_lookup(fs, parent, name, strlen(name), 0,
+                                      &scratch_ino);
+               if (!retval) {
+                       retval = EXT2_ET_FILE_EXISTS;
+                       goto cleanup;
+               }
+               if (retval != EXT2_ET_FILE_NOT_FOUND)
+                       goto cleanup;
+               retval = ext2fs_link(fs, parent, name, ino, EXT2_FT_SYMLINK);
+               if (retval)
+                       goto cleanup;
+       }
+
+       /*
+        * Update accounting....
+        */
+       if (!fastlink)
+               ext2fs_block_alloc_stats2(fs, blk, +1);
+       ext2fs_inode_alloc_stats2(fs, ino, +1, 0);
+
+cleanup:
+       if (block_buf)
+               ext2fs_free_mem(&block_buf);
+       return retval;
+}
index 7d3cdfe..cac6721 100644 (file)
  */
 
 #include "config.h"
+#if HAVE_SECURE_GETENV
+#define _GNU_SOURCE
+#endif
+#if HAVE_SECURE_GETENV
+#define _GNU_SOURCE
+#endif
 #include <stdio.h>
 #include <string.h>
 #if HAVE_UNISTD_H
@@ -173,7 +179,9 @@ static char *safe_getenv(const char *arg)
 #endif
 #endif
 
-#ifdef HAVE___SECURE_GETENV
+#if defined(HAVE_SECURE_GETENV)
+       return secure_getenv(arg);
+#elif defined(HAVE___SECURE_GETENV)
        return __secure_getenv(arg);
 #else
        return getenv(arg);
index 22346a2..57bfd6c 100644 (file)
@@ -193,8 +193,7 @@ errout:
 
 void setup_cmd(int argc, char **argv)
 {
-       errcode_t       retval;
-       int             i, c, err;
+       int             c, err;
        unsigned int    blocks = 128;
        unsigned int    inodes = 0;
        unsigned int    type = EXT2FS_BMAP64_BITARRAY;
@@ -270,6 +269,7 @@ void dump_bitmap(ext2fs_generic_bitmap bmap, unsigned int start, unsigned num)
        for (i=0; i < len; i++)
                printf("%02x", buf[i]);
        printf("\n");
+       printf("bits set: %u\n", ext2fs_bitcount(buf, len));
        free(buf);
 }
 
@@ -372,7 +372,7 @@ void do_testb(int argc, char *argv[])
 {
        unsigned int block, num;
        int err;
-       int test_result, op_result;
+       int test_result;
 
        if (check_fs_open(argv[0]))
                return;
@@ -508,7 +508,7 @@ void do_testi(int argc, char *argv[])
 {
        unsigned int inode;
        int err;
-       int test_result, op_result;
+       int test_result;
 
        if (check_fs_open(argv[0]))
                return;
@@ -588,13 +588,13 @@ int main(int argc, char **argv)
                        blocks = parse_ulong(optarg, argv[0],
                                             "number of blocks", &err);
                        if (err)
-                               return;
+                               exit(1);
                        break;
                case 'i':
                        inodes = parse_ulong(optarg, argv[0],
                                             "number of blocks", &err);
                        if (err)
-                               return;
+                               exit(1);
                        break;
                case 'l':       /* Legacy bitmaps */
                        flags = 0;
@@ -603,7 +603,7 @@ int main(int argc, char **argv)
                        type = parse_ulong(optarg, argv[0],
                                           "bitmap backend type", &err);
                        if (err)
-                               return;
+                               exit(1);
                        break;
                case 'R':
                        request = optarg;
index 9a4f3d0..31e2a60 100644 (file)
@@ -53,5 +53,47 @@ cleari 5
 testi 17
 testi 6
 testi 4
+clearb 7 12
+dump_bb
+setb 1
+dump_bb
+setb 2
+dump_bb
+setb 3
+dump_bb
+setb 4
+dump_bb
+setb 5
+dump_bb
+setb 6
+dump_bb
+setb 7
+dump_bb
+setb 8
+dump_bb
+setb 10
+setb 12
+setb 14
+setb 17
+setb 19
+setb 24
+setb 26
+setb 27
+setb 30
+setb 31
+setb 32
+setb 35
+setb 39
+setb 40
+setb 44
+setb 46
+setb 47
+setb 49
+setb 51
+setb 52
+clearb 2
+clearb 3
+clearb 7
+dump_bb
 quit
 
index 2d406ce..2d62b66 100644 (file)
@@ -36,6 +36,7 @@ tst_bitmaps: testb 16
 Block 16 is set
 tst_bitmaps: dump_bb
 block bitmap: 00f80000000000000000000000000000
+bits set: 5
 tst_bitmaps: ffzb 11 16
 First unmarked block is 11
 tst_bitmaps: ffzb 12 16
@@ -64,6 +65,7 @@ tst_bitmaps: setb 12 7
 Marking blocks 12 to 18
 tst_bitmaps: dump_bb
 block bitmap: 00f80300000000000000000000000000
+bits set: 7
 tst_bitmaps: seti 2
 Setting inode 2, was clear before
 tst_bitmaps: seti 5
@@ -82,6 +84,7 @@ tst_bitmaps: testi 1
 Inode 1 is clear
 tst_bitmaps: dump_ib
 inode bitmap: 1e000000
+bits set: 4
 tst_bitmaps: ffzi 1 6
 First unmarked inode is 1
 tst_bitmaps: ffzi 2 5
@@ -110,5 +113,99 @@ tst_bitmaps: testi 6
 Inode 6 is clear
 tst_bitmaps: testi 4
 Inode 4 is clear
+tst_bitmaps: clearb 7 12
+Clearing blocks 7 to 18
+tst_bitmaps: dump_bb
+block bitmap: 00000000000000000000000000000000
+bits set: 0
+tst_bitmaps: setb 1
+Setting block 1, was clear before
+tst_bitmaps: dump_bb
+block bitmap: 01000000000000000000000000000000
+bits set: 1
+tst_bitmaps: setb 2
+Setting block 2, was clear before
+tst_bitmaps: dump_bb
+block bitmap: 03000000000000000000000000000000
+bits set: 2
+tst_bitmaps: setb 3
+Setting block 3, was clear before
+tst_bitmaps: dump_bb
+block bitmap: 07000000000000000000000000000000
+bits set: 3
+tst_bitmaps: setb 4
+Setting block 4, was clear before
+tst_bitmaps: dump_bb
+block bitmap: 0f000000000000000000000000000000
+bits set: 4
+tst_bitmaps: setb 5
+Setting block 5, was clear before
+tst_bitmaps: dump_bb
+block bitmap: 1f000000000000000000000000000000
+bits set: 5
+tst_bitmaps: setb 6
+Setting block 6, was clear before
+tst_bitmaps: dump_bb
+block bitmap: 3f000000000000000000000000000000
+bits set: 6
+tst_bitmaps: setb 7
+Setting block 7, was clear before
+tst_bitmaps: dump_bb
+block bitmap: 7f000000000000000000000000000000
+bits set: 7
+tst_bitmaps: setb 8
+Setting block 8, was clear before
+tst_bitmaps: dump_bb
+block bitmap: ff000000000000000000000000000000
+bits set: 8
+tst_bitmaps: setb 10
+Setting block 10, was clear before
+tst_bitmaps: setb 12
+Setting block 12, was clear before
+tst_bitmaps: setb 14
+Setting block 14, was clear before
+tst_bitmaps: setb 17
+Setting block 17, was clear before
+tst_bitmaps: setb 19
+Setting block 19, was clear before
+tst_bitmaps: setb 24
+Setting block 24, was clear before
+tst_bitmaps: setb 26
+Setting block 26, was clear before
+tst_bitmaps: setb 27
+Setting block 27, was clear before
+tst_bitmaps: setb 30
+Setting block 30, was clear before
+tst_bitmaps: setb 31
+Setting block 31, was clear before
+tst_bitmaps: setb 32
+Setting block 32, was clear before
+tst_bitmaps: setb 35
+Setting block 35, was clear before
+tst_bitmaps: setb 39
+Setting block 39, was clear before
+tst_bitmaps: setb 40
+Setting block 40, was clear before
+tst_bitmaps: setb 44
+Setting block 44, was clear before
+tst_bitmaps: setb 46
+Setting block 46, was clear before
+tst_bitmaps: setb 47
+Setting block 47, was clear before
+tst_bitmaps: setb 49
+Setting block 49, was clear before
+tst_bitmaps: setb 51
+Setting block 51, was clear before
+tst_bitmaps: setb 52
+Setting block 52, was clear before
+tst_bitmaps: clearb 2
+Clearing block 2, was set before
+tst_bitmaps: clearb 3
+Clearing block 3, was set before
+tst_bitmaps: clearb 7
+Clearing block 7, was set before
+tst_bitmaps: dump_bb
+block bitmap: b92a85e6c4680d000000000000000000
+bits set: 25
 tst_bitmaps: quit
 tst_bitmaps: 
index 3e43d9f..e20ec98 100644 (file)
 
 struct ext2_inode_large inode;
 
+#ifndef offsetof
 #define offsetof(type, member)  __builtin_offsetof(type, member)
+#endif
+
 #define check_field(x, s) cur_offset = do_field(#x, s, sizeof(inode.x),               \
                                        offsetof(struct ext2_inode_large, x),  \
                                        cur_offset)
index 76e6e6f..85d87e1 100644 (file)
 
 struct sb_struct sb;
 
+#ifndef offsetof
 #define offsetof(type, member)  __builtin_offsetof (type, member)
+#endif
+
 #define check_field(x, s) cur_offset = do_field(#x, s, sizeof(sb.x),          \
                                                offsetof(struct sb_struct, x), \
                                                cur_offset)
index 02570f0..19be630 100644 (file)
@@ -472,7 +472,7 @@ static errcode_t unix_open(const char *name, int flags, io_channel *channel)
        io_channel      io = NULL;
        struct unix_private_data *data = NULL;
        errcode_t       retval;
-       int             open_flags, zeroes = 0;
+       int             open_flags;
        int             f_nocache = 0;
        ext2fs_struct_stat st;
 #ifdef __linux__
@@ -505,6 +505,7 @@ static errcode_t unix_open(const char *name, int flags, io_channel *channel)
        memset(data, 0, sizeof(struct unix_private_data));
        data->magic = EXT2_ET_MAGIC_UNIX_IO_CHANNEL;
        data->io_stats.num_fields = 2;
+       data->dev = -1;
 
        open_flags = (flags & IO_FLAG_RW) ? O_RDWR : O_RDONLY;
        if (flags & IO_FLAG_EXCLUSIVE)
@@ -549,9 +550,12 @@ static errcode_t unix_open(const char *name, int flags, io_channel *channel)
        }
 
 #ifdef BLKDISCARDZEROES
-       ioctl(data->dev, BLKDISCARDZEROES, &zeroes);
-       if (zeroes)
-               io->flags |= CHANNEL_FLAGS_DISCARD_ZEROES;
+       {
+               int zeroes = 0;
+               if (ioctl(data->dev, BLKDISCARDZEROES, &zeroes) == 0 &&
+                   zeroes)
+                       io->flags |= CHANNEL_FLAGS_DISCARD_ZEROES;
+       }
 #endif
 
 #if defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
@@ -575,7 +579,6 @@ static errcode_t unix_open(const char *name, int flags, io_channel *channel)
                /* Is the block device actually writable? */
                error = ioctl(data->dev, BLKROGET, &readonly);
                if (!error && readonly) {
-                       close(data->dev);
                        retval = EPERM;
                        goto cleanup;
                }
@@ -621,11 +624,17 @@ static errcode_t unix_open(const char *name, int flags, io_channel *channel)
 
 cleanup:
        if (data) {
+               if (data->dev >= 0)
+                       close(data->dev);
                free_cache(data);
                ext2fs_free_mem(&data);
        }
-       if (io)
+       if (io) {
+               if (io->name) {
+                       ext2fs_free_mem(&io->name);
+               }
                ext2fs_free_mem(&io);
+       }
        return retval;
 }
 
@@ -914,7 +923,6 @@ static errcode_t unix_discard(io_channel channel, unsigned long long block,
                              unsigned long long count)
 {
        struct unix_private_data *data;
-       __uint64_t      range[2];
        int             ret;
 
        EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
@@ -923,6 +931,8 @@ static errcode_t unix_discard(io_channel channel, unsigned long long block,
 
        if (channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE) {
 #ifdef BLKDISCARD
+               __uint64_t range[2];
+
                range[0] = (__uint64_t)(block) * channel->block_size;
                range[1] = (__uint64_t)(count) * channel->block_size;
 
index 2851eac..720befd 100644 (file)
@@ -31,7 +31,7 @@ LIBDIR= quota
 #ELF_IMAGE = libquota
 #ELF_MYDIR = quota
 #ELF_INSTALL_DIR = $(root_libdir)
-#ELF_OTHER_LIBS = -L../.. -lext2fs
+#ELF_OTHER_LIBS = -lext2fs
 
 #BSDLIB_VERSION = 1.0
 #BSDLIB_IMAGE = libquota
index b5e8331..7f3f4b9 100644 (file)
 # endif
 #endif
 
-#define log_err(format, ...)   fprintf(stderr, \
-                               "[ERROR] %s:%d:%s:: " format "\n", \
-                               __FILE__, __LINE__, __func__, __VA_ARGS__)
+#define log_err(format, arg ...)                                       \
+       fprintf(stderr, "[ERROR] %s:%d:%s:: " format "\n",              \
+               __FILE__, __LINE__, __func__, ## arg)
 
 #ifdef DEBUG_QUOTA
-# define log_debug(format, ...)        fprintf(stderr, \
-                               "[DEBUG] %s:%d:%s:: " format "\n", \
-                               __FILE__, __LINE__, __func__, __VA_ARGS__)
+# define log_debug(format, arg ...)                                    \
+       fprintf(stderr, "[DEBUG] %s:%d:%s:: " format "\n",              \
+               __FILE__, __LINE__, __func__, ## arg)
 #else
 # define log_debug(format, ...)
 #endif
index 42af1f2..8d087da 100644 (file)
@@ -25,6 +25,7 @@
 #define UINT_TO_VOIDPTR(val)  ((void *)(intptr_t)(val))
 #define VOIDPTR_TO_UINT(ptr)  ((unsigned int)(intptr_t)(ptr))
 
+#if DEBUG_QUOTA
 static void print_inode(struct ext2_inode *inode)
 {
        if (!inode)
@@ -44,6 +45,7 @@ static void print_inode(struct ext2_inode *inode)
 
        return;
 }
+#endif
 
 /*
  * Returns 0 if not able to find the quota file, otherwise returns its
@@ -121,7 +123,7 @@ errcode_t quota_write_inode(quota_ctx_t qctx, int qtype)
        int             retval = 0, i;
        dict_t          *dict;
        ext2_filsys     fs;
-       struct quota_handle *h;
+       struct quota_handle *h = NULL;
        int             fmt = QFMT_VFS_V1;
 
        if (!qctx)
@@ -130,7 +132,7 @@ errcode_t quota_write_inode(quota_ctx_t qctx, int qtype)
        fs = qctx->fs;
        retval = ext2fs_get_mem(sizeof(struct quota_handle), &h);
        if (retval) {
-               log_err("Unable to allocate quota handle", "");
+               log_err("Unable to allocate quota handle");
                goto out;
        }
 
@@ -146,7 +148,7 @@ errcode_t quota_write_inode(quota_ctx_t qctx, int qtype)
 
                retval = quota_file_create(h, fs, i, fmt);
                if (retval < 0) {
-                       log_err("Cannot initialize io on quotafile", "");
+                       log_err("Cannot initialize io on quotafile");
                        continue;
                }
 
@@ -216,7 +218,7 @@ errcode_t quota_init_context(quota_ctx_t *qctx, ext2_filsys fs, int qtype)
 
        err = ext2fs_get_mem(sizeof(struct quota_ctx), &ctx);
        if (err) {
-               log_err("Failed to allocate quota context", "");
+               log_err("Failed to allocate quota context");
                return err;
        }
 
@@ -226,7 +228,7 @@ errcode_t quota_init_context(quota_ctx_t *qctx, ext2_filsys fs, int qtype)
                        continue;
                err = ext2fs_get_mem(sizeof(dict_t), &dict);
                if (err) {
-                       log_err("Failed to allocate dictionary", "");
+                       log_err("Failed to allocate dictionary");
                        return err;
                }
                ctx->quota_dict[i] = dict;
@@ -271,7 +273,7 @@ static struct dquot *get_dq(dict_t *dict, __u32 key)
                dq = dnode_get(n);
        else {
                if (ext2fs_get_mem(sizeof(struct dquot), &dq)) {
-                       log_err("Unable to allocate dquot", "");
+                       log_err("Unable to allocate dquot");
                        return NULL;
                }
                memset(dq, 0, sizeof(struct dquot));
@@ -423,9 +425,10 @@ static int scan_dquots_callback(struct dquot *dquot, void *cb_data)
                scan_data->usage_is_inconsistent = 1;
                fprintf(stderr, "[QUOTA WARNING] Usage inconsistent for ID %d:"
                        "actual (%llu, %llu) != expected (%llu, %llu)\n",
-                       dq->dq_id, dq->dq_dqb.dqb_curspace,
-                       dq->dq_dqb.dqb_curinodes, dquot->dq_dqb.dqb_curspace,
-                       dquot->dq_dqb.dqb_curinodes);
+                       dq->dq_id, (long long)dq->dq_dqb.dqb_curspace,
+                       (long long)dq->dq_dqb.dqb_curinodes,
+                       (long long)dquot->dq_dqb.dqb_curspace,
+                       (long long)dquot->dq_dqb.dqb_curinodes);
        }
 
        if (scan_data->update_limits) {
@@ -461,6 +464,7 @@ static errcode_t quota_read_all_dquots(struct quota_handle *qh,
 /*
  * Write all memory dquots into quota file
  */
+#if 0 /* currently unused, but may be useful in the future? */
 static errcode_t quota_write_all_dquots(struct quota_handle *qh,
                                         quota_ctx_t qctx)
 {
@@ -475,6 +479,7 @@ static errcode_t quota_write_all_dquots(struct quota_handle *qh,
        ext2fs_write_bitmaps(qctx->fs);
        return 0;
 }
+#endif
 
 /*
  * Updates the in-memory quota limits from the given quota inode.
@@ -489,13 +494,13 @@ errcode_t quota_update_limits(quota_ctx_t qctx, ext2_ino_t qf_ino, int type)
 
        err = ext2fs_get_mem(sizeof(struct quota_handle), &qh);
        if (err) {
-               log_err("Unable to allocate quota handle", "");
+               log_err("Unable to allocate quota handle");
                return err;
        }
 
        err = quota_file_open(qh, qctx->fs, qf_ino, type, -1, 0);
        if (err) {
-               log_err("Open quota file failed", "");
+               log_err("Open quota file failed");
                goto out;
        }
 
@@ -534,7 +539,7 @@ errcode_t quota_compare_and_update(quota_ctx_t qctx, int qtype,
                                     fs->super->s_grp_quota_inum;
        err = quota_file_open(&qh, fs, qf_ino, qtype, -1, 0);
        if (err) {
-               log_err("Open quota file failed", "");
+               log_err("Open quota file failed");
                goto out;
        }
 
@@ -544,7 +549,7 @@ errcode_t quota_compare_and_update(quota_ctx_t qctx, int qtype,
        scan_data.usage_is_inconsistent = 0;
        err = qh.qh_ops->scan_dquots(&qh, scan_dquots_callback, &scan_data);
        if (err) {
-               log_err("Error scanning dquots", "");
+               log_err("Error scanning dquots");
                goto out;
        }
        *usage_inconsistent = scan_data.usage_is_inconsistent;
index 7cdd653..8ddb92a 100644 (file)
@@ -117,7 +117,6 @@ static int compute_num_blocks_proc(ext2_filsys fs, blk64_t *blocknr,
                               int ref_offset EXT2FS_ATTR((unused)),
                               void *private)
 {
-       blk64_t block;
        blk64_t *num_blocks = private;
 
        *num_blocks += 1;
@@ -128,7 +127,6 @@ errcode_t quota_inode_truncate(ext2_filsys fs, ext2_ino_t ino)
 {
        struct ext2_inode inode;
        errcode_t err;
-       int i;
 
        if ((err = ext2fs_read_inode(fs, ino, &inode)))
                return err;
@@ -245,13 +243,13 @@ errcode_t quota_file_open(struct quota_handle *h, ext2_filsys fs,
 
        if (h->qh_ops->check_file &&
            (h->qh_ops->check_file(h, type, fmt) == 0)) {
-               log_err("qh_ops->check_file failed", "");
+               log_err("qh_ops->check_file failed");
                ext2fs_file_close(e2_file);
                return -1;
        }
 
        if (h->qh_ops->init_io && (h->qh_ops->init_io(h) < 0)) {
-               log_err("qh_ops->init_io failed", "");
+               log_err("qh_ops->init_io failed");
                ext2fs_file_close(e2_file);
                return -1;
        }
@@ -266,7 +264,7 @@ static errcode_t quota_inode_init_new(ext2_filsys fs, ext2_ino_t ino)
 
        err = ext2fs_read_inode(fs, ino, &inode);
        if (err) {
-               log_err("ex2fs_read_inode failed", "");
+               log_err("ex2fs_read_inode failed");
                return err;
        }
 
@@ -318,7 +316,7 @@ errcode_t quota_file_create(struct quota_handle *h, ext2_filsys fs, int type, in
 
        err = quota_inode_init_new(fs, qf_inum);
        if (err) {
-               log_err("init_new_quota_inode failed", "");
+               log_err("init_new_quota_inode failed");
                goto out_err;
        }
        h->qh_qf.ino = qf_inum;
@@ -341,7 +339,7 @@ errcode_t quota_file_create(struct quota_handle *h, ext2_filsys fs, int type, in
        h->qh_ops = &quotafile_ops_2;
 
        if (h->qh_ops->new_io && (h->qh_ops->new_io(h) < 0)) {
-               log_err("qh_ops->new_io failed", "");
+               log_err("qh_ops->new_io failed");
                goto out_err1;
        }
 
@@ -388,7 +386,7 @@ struct dquot *get_empty_dquot(void)
        struct dquot *dquot;
 
        if (ext2fs_get_memzero(sizeof(struct dquot), &dquot)) {
-               log_err("Failed to allocate dquot", "");
+               log_err("Failed to allocate dquot");
                return NULL;
        }
 
index 5a7db7b..1c062f1 100644 (file)
@@ -132,11 +132,6 @@ struct quotafile_ops {
 /* This might go into a special header file but that sounds a bit silly... */
 extern struct quotafile_ops quotafile_ops_meta;
 
-static inline void mark_quotafile_info_dirty(struct quota_handle *h)
-{
-       h->qh_io_flags |= IOFL_INFODIRTY;
-}
-
 /* Open existing quotafile of given type (and verify its format) on given
  * filesystem. */
 errcode_t quota_file_open(struct quota_handle *h, ext2_filsys fs,
index 9080e77..c1653a3 100644 (file)
@@ -24,7 +24,7 @@ static inline dqbuf_t getdqbuf(void)
 {
        dqbuf_t buf;
        if (ext2fs_get_memzero(QT_BLKSIZE, &buf)) {
-               log_err("Failed to allocate dqbuf", "");
+               log_err("Failed to allocate dqbuf");
                return NULL;
        }
 
@@ -53,6 +53,11 @@ static int get_index(qid_t id, int depth)
        return (id >> ((QT_TREEDEPTH - depth - 1) * 8)) & 0xff;
 }
 
+static inline void mark_quotafile_info_dirty(struct quota_handle *h)
+{
+       h->qh_io_flags |= IOFL_INFODIRTY;
+}
+
 /* Read given block */
 static void read_blk(struct quota_handle *h, uint blk, dqbuf_t buf)
 {
@@ -101,7 +106,7 @@ static int get_free_dqblk(struct quota_handle *h)
                if (write_blk(h, info->dqi_blocks, buf) < 0) {
                        freedqbuf(buf);
                        log_err("Cannot allocate new quota block "
-                               "(out of disk space).", "");
+                               "(out of disk space).");
                        return -ENOSPC;
                }
                blk = info->dqi_blocks++;
@@ -230,8 +235,7 @@ static uint find_free_dqentry(struct quota_handle *h, struct dquot *dquot,
                ddquot += info->dqi_entry_size;
 
        if (i == qtree_dqstr_in_blk(info))
-               log_err("find_free_dqentry(): Data block full but it "
-                       "shouldn't.", "");
+               log_err("find_free_dqentry(): Data block full unexpectedly.");
 
        write_blk(h, blk, buf);
        dquot->dq_dqb.u.v2_mdqb.dqb_off =
index f8d553b..e7bf29c 100644 (file)
@@ -160,8 +160,7 @@ static int v2_check_file(struct quota_handle *h, int type, int fmt)
 
        if (ext2fs_le32_to_cpu(dqh.dqh_magic) != file_magics[type]) {
                if (ext2fs_be32_to_cpu(dqh.dqh_magic) == file_magics[type])
-                       log_err("Your quota file is stored in wrong "
-                               "endianity.", "");
+                       log_err("Your quota file is stored in wrong endianity");
                return 0;
        }
        if (V2_VERSION != ext2fs_le32_to_cpu(dqh.dqh_version))
@@ -279,6 +278,6 @@ static int v2_scan_dquots(struct quota_handle *h,
  */
 static int v2_report(struct quota_handle *h, int verbose)
 {
-       log_err("Not Implemented.", "");
+       log_err("Not Implemented.");
        return -1;
 }
index 19413cc..c396f2d 100644 (file)
@@ -20,7 +20,7 @@ ELF_SO_VERSION = 2
 ELF_IMAGE = libss
 ELF_MYDIR = ss
 ELF_INSTALL_DIR = $(root_libdir)
-ELF_OTHER_LIBS = -L../.. -lcom_err $(DLOPEN_LIB)
+ELF_OTHER_LIBS = -lcom_err $(DLOPEN_LIB)
 
 BSDLIB_VERSION = 1.0
 BSDLIB_IMAGE = libss
index 2b3a466..8b54dd1 100644 (file)
@@ -15,6 +15,9 @@
  */
 
 #include "config.h"
+#if HAVE_SECURE_GETENV
+#define _GNU_SOURCE
+#endif
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -56,7 +59,9 @@ char *ss_safe_getenv(const char *arg)
 #endif
 #endif
 
-#ifdef HAVE___SECURE_GETENV
+#if defined(HAVE_SECURE_GETENV)
+       return secure_getenv(arg);
+#elif defined(HAVE___SECURE_GETENV)
        return __secure_getenv(arg);
 #else
        return getenv(arg);
index 42d7563..efa4e3d 100644 (file)
@@ -176,8 +176,7 @@ static void get_random_bytes(void *buf, int nbytes)
 {
        int i, n = nbytes, fd = get_random_fd();
        int lose_counter = 0;
-       unsigned char *cp = (unsigned char *) buf;
-       unsigned short tmp_seed[3];
+       unsigned char *cp = buf;
 
        if (fd >= 0) {
                while (n > 0) {
@@ -200,12 +199,16 @@ static void get_random_bytes(void *buf, int nbytes)
        for (cp = buf, i = 0; i < nbytes; i++)
                *cp++ ^= (rand() >> 7) & 0xFF;
 #ifdef DO_JRAND_MIX
-       memcpy(tmp_seed, jrand_seed, sizeof(tmp_seed));
-       jrand_seed[2] = jrand_seed[2] ^ syscall(__NR_gettid);
-       for (cp = buf, i = 0; i < nbytes; i++)
-               *cp++ ^= (jrand48(tmp_seed) >> 7) & 0xFF;
-       memcpy(jrand_seed, tmp_seed,
-              sizeof(jrand_seed)-sizeof(unsigned short));
+       {
+               unsigned short tmp_seed[3];
+
+               memcpy(tmp_seed, jrand_seed, sizeof(tmp_seed));
+               jrand_seed[2] = jrand_seed[2] ^ syscall(__NR_gettid);
+               for (cp = buf, i = 0; i < nbytes; i++)
+                       *cp++ ^= (jrand48(tmp_seed) >> 7) & 0xFF;
+               memcpy(jrand_seed, tmp_seed,
+                      sizeof(jrand_seed) - sizeof(unsigned short));
+       }
 #endif
 
        return;
index 5884ad9..2216970 100644 (file)
@@ -74,7 +74,7 @@ main(int argc ATTR((unused)) , char **argv ATTR((unused)))
        uuid_t          buf, tst;
        char            str[100];
        struct timeval  tv;
-       time_t          time_reg;
+       time_t          time_reg, time_gen;
        unsigned char   *cp;
        int i;
        int failed = 0;
@@ -104,7 +104,8 @@ main(int argc ATTR((unused)) , char **argv ATTR((unused)))
                printf("%02x", *cp++);
        }
        printf("\n");
-       type = uuid_type(buf);  variant = uuid_variant(buf);
+       type = uuid_type(buf);
+       variant = uuid_variant(buf);
        printf("UUID type = %d, UUID variant = %d\n", type, variant);
        if (variant != UUID_VARIANT_DCE) {
                printf("Incorrect UUID Variant; was expecting DCE!\n");
@@ -117,6 +118,7 @@ main(int argc ATTR((unused)) , char **argv ATTR((unused)))
        }
        printf("\n");
 
+       time_gen = time(0);
        uuid_generate_time(buf);
        uuid_unparse(buf, str);
        printf("UUID string = %s\n", str);
@@ -125,7 +127,8 @@ main(int argc ATTR((unused)) , char **argv ATTR((unused)))
                printf("%02x", *cp++);
        }
        printf("\n");
-       type = uuid_type(buf);  variant = uuid_variant(buf);
+       type = uuid_type(buf);
+       variant = uuid_variant(buf);
        printf("UUID type = %d, UUID variant = %d\n", type, variant);
        if (variant != UUID_VARIANT_DCE) {
                printf("Incorrect UUID Variant; was expecting DCE!\n");
@@ -136,15 +139,25 @@ main(int argc ATTR((unused)) , char **argv ATTR((unused)))
                       "1 (time-based type)!\\n");
                failed++;
        }
+
        tv.tv_sec = 0;
        tv.tv_usec = 0;
        time_reg = uuid_time(buf, &tv);
-       printf("UUID time is: (%ld, %ld): %s\n", tv.tv_sec, tv.tv_usec,
-              ctime(&time_reg));
+       printf("UUID generated at %lu reports %lu (%ld.%ld)\n",
+              time_gen, time_reg, tv.tv_sec, tv.tv_usec);
+       /* allow 1s margin in case of rollover between sampling
+        * the current time and when the UUID is generated. */
+       if (time_reg > time_gen + 1) {
+               printf("UUID time comparison failed!\n");
+               failed++;
+       } else {
+               printf("UUID time comparison succeeded.\n");
+       }
+
        uuid_parse(str, tst);
-       if (!uuid_compare(buf, tst))
+       if (!uuid_compare(buf, tst)) {
                printf("UUID parse and compare succeeded.\n");
-       else {
+       else {
                printf("UUID parse and compare failed!\n");
                failed++;
        }
@@ -162,6 +175,7 @@ main(int argc ATTR((unused)) , char **argv ATTR((unused)))
                printf("UUID copy and compare failed!\n");
                failed++;
        }
+
        failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981b", 1);
        failed += test_uuid("84949CC5-4701-4A84-895B-354C584A981B", 1);
        failed += test_uuid("84949cc5-4701-4a84-895b-354c584a981bc", 0);
index 0692126..8a69855 100644 (file)
@@ -72,6 +72,7 @@ PROFILED_FSCK_OBJS=   profiled/fsck.o profiled/base_device.o \
                        profiled/ismounted.o
 PROFILED_BLKID_OBJS=   profiled/blkid.o
 PROFILED_FILEFRAG_OBJS=        profiled/filefrag.o
+PROFILED_E2FREEFRAG_OBJS= profiled/e2freefrag.o
 PROFILED_E2UNDO_OBJS=  profiled/e2undo.o
 PROFILED_E4DEFRAG_OBJS=        profiled/e4defrag.o
 
@@ -107,7 +108,7 @@ all:: profiled $(SPROGS) $(UPROGS) $(USPROGS) $(SMANPAGES) $(UMANPAGES) \
 @PROFILE_CMT@all:: tune2fs.profiled blkid.profiled e2image.profiled \
        e2undo.profiled mke2fs.profiled dumpe2fs.profiled fsck.profiled \
        logsave.profiled filefrag.profiled uuidgen.profiled uuidd.profiled \
-       e2image.profiled e4defrag.profiled
+       e2image.profiled e4defrag.profiled e2freefrag.profiled
 
 profiled:
 @PROFILE_CMT@  $(E) "  MKDIR $@"
@@ -164,7 +165,7 @@ tune2fs.static: $(TUNE2FS_OBJS) $(STATIC_DEPLIBS) $(STATIC_LIBE2P) $(DEPSTATIC_L
                $(STATIC_LIBS) $(STATIC_LIBBLKID) $(STATIC_LIBUUID) \
                $(STATIC_LIBQUOTA) $(STATIC_LIBE2P) $(LIBINTL)
 
-tune2fs.profiled: $(PROFILED_TUNE2FS_OBJS) $(PROFILED_DEPLIBS) \
+tune2fs.profiled: $(TUNE2FS_OBJS) $(PROFILED_DEPLIBS) \
                $(PROFILED_E2P) $(DEPPROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID) \
                $(DEPPROFILED_LIBQUOTA)
        $(E) "  LD $@"
@@ -183,7 +184,7 @@ blkid.static: $(BLKID_OBJS) $(STATIC_DEPLIBS) $(DEPSTATIC_LIBBLKID)
        $(Q) $(CC) $(ALL_LDFLAGS) -o blkid.static $(BLKID_OBJS) $(STATIC_LIBS) \
                $(STATIC_LIBBLKID) $(LIBINTL)
 
-blkid.profiled: $(PROFILED_BLKID_OBJS) $(DEPPROFILED_LIBBLKID) \
+blkid.profiled: $(BLKID_OBJS) $(DEPPROFILED_LIBBLKID) \
                $(PROFILED_LIBEXT2FS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o blkid.profiled $(PROFILED_BLKID_OBJS) \
@@ -193,7 +194,7 @@ e2image: $(E2IMAGE_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o e2image $(E2IMAGE_OBJS) $(LIBS) $(LIBINTL)
 
-e2image.profiled: $(PROFILED_E2IMAGE_OBJS) $(PROFILED_DEPLIBS)
+e2image.profiled: $(E2IMAGE_OBJS) $(PROFILED_DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o e2image.profiled \
                $(PROFILED_E2IMAGE_OBJS) $(PROFILED_LIBS) $(LIBINTL)
@@ -202,7 +203,7 @@ e2undo: $(E2UNDO_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o e2undo $(E2UNDO_OBJS) $(LIBS) $(LIBINTL)
 
-e2undo.profiled: $(PROFILED_E2UNDO_OBJS) $(PROFILED_DEPLIBS)
+e2undo.profiled: $(E2UNDO_OBJS) $(PROFILED_DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o e2undo.profiled \
                $(PROFILED_E2UNDO_OBJS) $(PROFILED_LIBS) $(LIBINTL)
@@ -211,7 +212,7 @@ e4defrag: $(E4DEFRAG_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o e4defrag $(E4DEFRAG_OBJS) $(LIBS)
 
-e4defrag.profiled: $(PROFILED_E4DEFRAG_OBJS) $(PROFILED_DEPLIBS)
+e4defrag.profiled: $(E4DEFRAG_OBJS) $(PROFILED_DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o e4defrag.profiled \
                $(PROFILED_E4DEFRAG_OBJS) $(PROFILED_LIBS)
@@ -242,7 +243,7 @@ mke2fs.static: $(MKE2FS_OBJS) $(STATIC_DEPLIBS) $(STATIC_LIBE2P) $(DEPSTATIC_LIB
                $(STATIC_LIBQUOTA) $(STATIC_LIBS) $(STATIC_LIBE2P) \
                $(STATIC_LIBBLKID) $(STATIC_LIBUUID) $(LIBINTL)
 
-mke2fs.profiled: $(PROFILED_MKE2FS_OBJS) $(PROFILED_DEPLIBS) \
+mke2fs.profiled: $(MKE2FS_OBJS) $(PROFILED_DEPLIBS) \
        $(PROFILED_LIBE2P) $(PROFILED_DEPLIBBLKID) $(PROFILED_DEPLIBUUID) \
        $(PROFILED_LIBQUOTA)
        $(E) "  LD $@"
@@ -263,7 +264,7 @@ uuidgen: $(UUIDGEN_OBJS) $(DEPLIBUUID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o uuidgen $(UUIDGEN_OBJS) $(LIBUUID) $(LIBINTL)
 
-uuidgen.profiled: $(PROFILED_UUIDGEN_OBJS) $(PROFILED_DEPLIBUUID)
+uuidgen.profiled: $(UUIDGEN_OBJS) $(PROFILED_DEPLIBUUID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o uuidgen.profiled \
                $(PROFILED_UUIDGEN_OBJS) $(PROFILED_LIBUUID) $(LIBINTL)
@@ -272,7 +273,7 @@ uuidd: $(UUIDD_OBJS) $(DEPLIBUUID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o uuidd $(UUIDD_OBJS) $(LIBUUID) $(LIBINTL)
 
-uuidd.profiled: $(PROFILED_UUIDD_OBJS) $(PROFILED_DEPLIBUUID)
+uuidd.profiled: $(UUIDD_OBJS) $(PROFILED_DEPLIBUUID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o uuidd.profiled $(PROFILED_UUIDD_OBJS) \
                $(PROFILED_LIBUUID) $(LIBINTL)
@@ -282,7 +283,7 @@ dumpe2fs: $(DUMPE2FS_OBJS) $(DEPLIBS) $(DEPLIBS_E2P) $(DEPLIBUUID)
        $(Q) $(CC) $(ALL_LDFLAGS) -o dumpe2fs $(DUMPE2FS_OBJS) $(LIBS) \
                $(LIBS_E2P) $(LIBUUID) $(LIBINTL)
 
-dumpe2fs.profiled: $(PROFILED_DUMPE2FS_OBJS) $(PROFILED_DEPLIBS) \
+dumpe2fs.profiled: $(DUMPE2FS_OBJS) $(PROFILED_DEPLIBS) \
                $(PROFILED_LIBE2P) $(PROFILED_DEPLIBUUID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o dumpe2fs.profiled \
@@ -293,7 +294,7 @@ fsck: $(FSCK_OBJS) $(DEPLIBBLKID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o fsck $(FSCK_OBJS) $(LIBBLKID) $(LIBINTL)
 
-fsck.profiled: $(PROFILED_FSCK_OBJS) $(PROFILED_DEPLIBBLKID)
+fsck.profiled: $(FSCK_OBJS) $(PROFILED_DEPLIBBLKID)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o fsck.profiled $(PROFILED_FSCK_OBJS) \
                $(PROFILED_LIBBLKID) $(LIBINTL)
@@ -302,7 +303,7 @@ badblocks: $(BADBLOCKS_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o badblocks $(BADBLOCKS_OBJS) $(LIBS) $(LIBINTL)
 
-badblocks.profiled: $(PROFILED_BADBLOCKS_OBJS) $(PROFILED_DEPLIBS)
+badblocks.profiled: $(BADBLOCKS_OBJS) $(PROFILED_DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o badblocks.profiled \
                $(PROFILED_BADBLOCKS_OBJS) $(PROFILED_LIBS) $(LIBINTL)
@@ -311,7 +312,7 @@ logsave: logsave.o
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o logsave logsave.o
 
-logsave.profiled: profiled/logsave.o
+logsave.profiled: logsave.o
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o logsave.profiled profiled/logsave.o
 
@@ -319,11 +320,16 @@ e2freefrag: $(E2FREEFRAG_OBJS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o e2freefrag $(E2FREEFRAG_OBJS) $(LIBS)
 
+e2freefrag.profiled: $(E2FREEFRAG_OBJS) $(PROFILED_DEPLIBS)
+       $(E) "  LD $@"
+       $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o e2freefrag.profiled \
+               $(PROFILED_E2FREEFRAG_OBJS) $(PROFILED_LIBS)
+
 filefrag: $(FILEFRAG_OBJS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -o filefrag $(FILEFRAG_OBJS) 
 
-filefrag.profiled: $(PROFILED_FILEFRAG_OBJS)
+filefrag.profiled: $(FILEFRAG_OBJS)
        $(E) "  LD $@"
        $(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o filefrag.profiled \
                $(PROFILED_FILEFRAG_OBJS) 
@@ -656,7 +662,11 @@ blkid.o: $(srcdir)/blkid.c $(top_builddir)/lib/config.h \
 logsave.o: $(srcdir)/logsave.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h
 filefrag.o: $(srcdir)/filefrag.c $(top_builddir)/lib/config.h \
- $(top_builddir)/lib/dirpaths.h $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
+ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \
+ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(top_srcdir)/lib/ext2fs/fiemap.h
 base_device.o: $(srcdir)/base_device.c $(top_builddir)/lib/config.h \
  $(top_builddir)/lib/dirpaths.h $(srcdir)/fsck.h
index 890d510..c9e47c7 100644 (file)
@@ -68,19 +68,18 @@ extern int optind;
 const char * program_name = "badblocks";
 const char * done_string = N_("done                                                 \n");
 
-static int v_flag = 0;                 /* verbose */
-static int w_flag = 0;                 /* do r/w test: 0=no, 1=yes,
+static int v_flag;                     /* verbose */
+static int w_flag;                     /* do r/w test: 0=no, 1=yes,
                                         * 2=non-destructive */
-static int s_flag = 0;                 /* show progress of test */
-static int force = 0;                  /* force check of mounted device */
-static int t_flag = 0;                 /* number of test patterns */
-static int t_max = 0;                  /* allocated test patterns */
-static unsigned int *t_patts = NULL;   /* test patterns */
-static int current_O_DIRECT = 0;       /* Current status of O_DIRECT flag */
-static int use_buffered_io = 0;
-static int exclusive_ok = 0;
-static unsigned int max_bb = 0;                /* Abort test if more than this number of bad blocks has been encountered */
-static unsigned int d_flag = 0;                /* delay factor between reads */
+static int s_flag;                     /* show progress of test */
+static int force;                      /* force check of mounted device */
+static int t_flag;                     /* number of test patterns */
+static int t_max;                      /* allocated test patterns */
+static unsigned int *t_patts;          /* test patterns */
+static int use_buffered_io;
+static int exclusive_ok;
+static unsigned int max_bb;            /* Abort test if more than this number of bad blocks has been encountered */
+static unsigned int d_flag;            /* delay factor between reads */
 static struct timeval time_start;
 
 #define T_INC 32
@@ -286,6 +285,7 @@ static void set_o_direct(int dev, unsigned char *buffer, size_t size,
                         ext2_loff_t offset)
 {
 #ifdef O_DIRECT
+       static int current_O_DIRECT;    /* Current status of O_DIRECT flag */
        int new_flag = O_DIRECT;
        int flag;
 
@@ -557,7 +557,7 @@ static unsigned int test_ro (int dev, blk_t last_block,
                currently_testing += got;
                if (got != try) {
                        try = 1;
-                       if (recover_block == ~0)
+                       if (recover_block == ~0U)
                                recover_block = currently_testing - got +
                                        blocks_at_once;
                        continue;
@@ -647,7 +647,7 @@ static unsigned int test_rw (int dev, blk_t last_block,
                        currently_testing += got;
                        if (got != try) {
                                try = 1;
-                               if (recover_block == ~0)
+                               if (recover_block == ~0U)
                                        recover_block = currently_testing -
                                                got + blocks_at_once;
                                continue;
@@ -686,13 +686,13 @@ static unsigned int test_rw (int dev, blk_t last_block,
                        currently_testing += got;
                        if (got != try) {
                                try = 1;
-                               if (recover_block == ~0)
+                               if (recover_block == ~0U)
                                        recover_block = currently_testing -
                                                got + blocks_at_once;
                                continue;
                        } else if (currently_testing == recover_block) {
                                try = blocks_at_once;
-                               recover_block = ~0;
+                               recover_block = ~0U;
                        }
                        for (i=0; i < got; i++) {
                                if (memcmp(read_buffer + i * block_size,
@@ -739,8 +739,8 @@ static unsigned int test_nd (int dev, blk_t last_block,
        errcode_t errcode;
        unsigned long buf_used;
        static unsigned int bb_count;
-       int granularity = blocks_at_once;
-       blk_t recover_block = ~0;
+       unsigned int granularity = blocks_at_once;
+       blk_t recover_block = ~0U;
 
        bb_count = 0;
        errcode = ext2fs_badblocks_list_iterate_begin(bb_list,&bb_iter);
@@ -839,7 +839,7 @@ static unsigned int test_nd (int dev, blk_t last_block,
                        got = do_read (dev, save_ptr, try, block_size,
                                       currently_testing);
                        if (got == 0) {
-                               if (recover_block == ~0)
+                               if (recover_block == ~0U)
                                        recover_block = currently_testing +
                                                blocks_at_once;
                                if (granularity != 1) {
@@ -874,7 +874,7 @@ static unsigned int test_nd (int dev, blk_t last_block,
                        currently_testing += got;
                        if (got != try) {
                                try = 1;
-                               if (recover_block == ~0)
+                               if (recover_block == ~0U)
                                        recover_block = currently_testing -
                                                got + blocks_at_once;
                                continue;
index 64aab7b..932ef4b 100644 (file)
@@ -168,8 +168,8 @@ was written by Remy Card <Remy.Card@linux.org>.  It is currently being
 maintained by Theodore Ts'o <tytso@alum.mit.edu>.
 .SH BUGS AND LIMITATIONS
 The `c', 's',  and `u' attributes are not honored
-by the ext2 and ext3 filesystems as implemented in the current mainline
-Linux kernels.
+by the ext2, ext3, and ext4 filesystems as implemented in the current
+mainline Linux kernels.
 .PP
 The `j' option is only useful if the filesystem is mounted as ext3.
 .PP
index 1b137fe..6bb33e6 100644 (file)
@@ -194,7 +194,6 @@ static int change_attributes(const char * name)
 {
        unsigned long flags;
        STRUCT_STAT     st;
-       int extent_file = 0;
 
        if (LSTAT (name, &st) == -1) {
                if (!silent)
@@ -209,16 +208,7 @@ static int change_attributes(const char * name)
                                        _("while reading flags on %s"), name);
                return -1;
        }
-       if (flags & EXT4_EXTENTS_FL)
-               extent_file = 1;
        if (set) {
-               if (extent_file && !(sf & EXT4_EXTENTS_FL)) {
-                       if (!silent)
-                               com_err(program_name, 0,
-                               _("Clearing extent flag not supported on %s"),
-                                       name);
-                       return -1;
-               }
                if (verbose) {
                        printf (_("Flags of %s set as "), name);
                        print_flags (stdout, sf, 0);
@@ -231,13 +221,6 @@ static int change_attributes(const char * name)
                        flags &= ~rf;
                if (add)
                        flags |= af;
-               if (extent_file && !(flags & EXT4_EXTENTS_FL)) {
-                       if (!silent)
-                               com_err(program_name, 0,
-                               _("Clearing extent flag not supported on %s"),
-                                       name);
-                       return -1;
-               }
                if (verbose) {
                        printf(_("Flags of %s set as "), name);
                        print_flags(stdout, flags, 0);
index 30af43e..58f1ff5 100644 (file)
@@ -249,13 +249,14 @@ static void collect_info(ext2_filsys fs, struct chunk_info *chunk_info, FILE *f)
 static void open_device(char *device_name, ext2_filsys *fs)
 {
        int retval;
-       int flag = EXT2_FLAG_FORCE;
+       int flag = EXT2_FLAG_FORCE | EXT2_FLAG_64BITS;
 
        retval = ext2fs_open(device_name, flag, 0, 0, unix_io_manager, fs);
        if (retval) {
                com_err(device_name, retval, "while opening filesystem");
                exit(1);
        }
+       (*fs)->default_bitmap_type = EXT2FS_BMAP64_RBTREE;
 }
 #endif
 
index 8876e77..84b9729 100644 (file)
@@ -8,7 +8,7 @@ e2image \- Save critical ext2/ext3/ext4 filesystem metadata to a file
 .SH SYNOPSIS
 .B e2image
 [
-.B \-rsI
+.B \-rsIQa
 ]
 .I device
 .I image-file
@@ -171,6 +171,26 @@ is regular QCOW2 image and can be processed by tools aware of QCOW2 format
 such as for example
 .BR qemu-img .
 .PP
+You can convert a qcow2 image into a raw image with:
+.PP
+.br
+\      \fBe2image \-r hda1.qcow2 hda1.raw\fR
+.br
+.PP
+This can be useful to write a qcow2 image containing all data to a
+sparse image file where it can be loop mounted, or to a disk partition.
+Note that this may not work with qcow2 images not generated by e2image.
+.PP
+.SH INCLUDING DATA
+Normally
+.B e2image
+only includes fs metadata, not regular file data.  The
+.B \-a
+option can be specified to include all data.  This will
+give an image that is suitable to use to clone the entire FS or
+for backup purposes.  Note that this option only works with the
+raw or QCOW2 formats.
+.PP
 .SH AUTHOR
 .B e2image
 was written by Theodore Ts'o (tytso@mit.edu).
index e6ea52a..885a794 100644 (file)
@@ -52,6 +52,9 @@ extern int optind;
 
 const char * program_name = "e2image";
 char * device_name = NULL;
+char all_data;
+char output_is_blk;
+/* writing to blk device: don't skip zeroed blocks */
 
 static void lseek_error_and_exit(int errnum)
 {
@@ -84,7 +87,7 @@ static int get_bits_from_size(size_t size)
 
 static void usage(void)
 {
-       fprintf(stderr, _("Usage: %s [-rsIQ] device image_file\n"),
+       fprintf(stderr, _("Usage: %s [-rsIQa] device image_file\n"),
                program_name);
        exit (1);
 }
@@ -309,7 +312,7 @@ static int process_file_block(ext2_filsys fs EXT2FS_ATTR((unused)),
                              int ref_offset EXT2FS_ATTR((unused)),
                              void *priv_data EXT2FS_ATTR((unused)))
 {
-       if (blockcnt < 0) {
+       if (blockcnt < 0 || all_data) {
                ext2fs_mark_block_bitmap2(meta_block_map, *block_nr);
                meta_blocks_count++;
        }
@@ -341,11 +344,13 @@ static void mark_table_blocks(ext2_filsys fs)
                /*
                 * Mark the blocks used for the inode table
                 */
-               if (!ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT) &&
+               if ((output_is_blk ||
+                    !ext2fs_bg_flags_test(fs, i, EXT2_BG_INODE_UNINIT)) &&
                    ext2fs_inode_table_loc(fs, i)) {
                        unsigned int end = (unsigned) fs->inode_blocks_per_group;
                        /* skip unused blocks */
-                       if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+                       if (!output_is_blk &&
+                           EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
                                                       EXT4_FEATURE_RO_COMPAT_GDT_CSUM))
                                end -= (ext2fs_bg_itable_unused(fs, i) /
                                        EXT2_INODES_PER_BLOCK(fs->super));
@@ -387,6 +392,8 @@ static int check_zero_block(char *buf, int blocksize)
        char    *cp = buf;
        int     left = blocksize;
 
+       if (output_is_blk)
+               return 0;
        while (left > 0) {
                if (*cp++)
                        return 0;
@@ -446,7 +453,7 @@ static void scramble_dir_block(ext2_filsys fs, blk64_t blk, char *buf)
 #endif
                        continue;
                }
-               if (dirent->name_len + 8 > rec_len) {
+               if (dirent->name_len + 8U > rec_len) {
                        printf("Corrupt directory block %lu: "
                               "bad name_len (%d)\n", (unsigned long) blk,
                               dirent->name_len);
@@ -1134,7 +1141,7 @@ static void write_raw_image_file(ext2_filsys fs, int fd, int type, int flags)
                        if ((inode.i_flags & EXT4_EXTENTS_FL) ||
                            inode.i_block[EXT2_IND_BLOCK] ||
                            inode.i_block[EXT2_DIND_BLOCK] ||
-                           inode.i_block[EXT2_TIND_BLOCK]) {
+                           inode.i_block[EXT2_TIND_BLOCK] || all_data) {
                                retval = ext2fs_block_iterate3(fs,
                                       ino, BLOCK_FLAG_READ_ONLY, block_buf,
                                       process_file_block, &pb);
@@ -1164,7 +1171,7 @@ static void install_image(char *device, char *image_fn, int type)
 {
        errcode_t retval;
        ext2_filsys fs;
-       int open_flag = EXT2_FLAG_IMAGE_FILE;
+       int open_flag = EXT2_FLAG_IMAGE_FILE | EXT2_FLAG_64BITS;
        int fd = 0;
        io_manager      io_ptr;
        io_channel      io;
@@ -1223,7 +1230,6 @@ static void install_image(char *device, char *image_fn, int type)
        }
 
        ext2fs_close (fs);
-       exit (0);
 }
 
 static struct ext2_qcow2_hdr *check_qcow2_image(int *fd, char *name)
@@ -1249,6 +1255,7 @@ int main (int argc, char ** argv)
        int qcow2_fd = 0;
        int fd = 0;
        int ret = 0;
+       struct stat st;
 
 #ifdef ENABLE_NLS
        setlocale(LC_MESSAGES, "");
@@ -1262,7 +1269,7 @@ int main (int argc, char ** argv)
        if (argc && *argv)
                program_name = *argv;
        add_error_table(&et_ext2_error_table);
-       while ((c = getopt(argc, argv, "rsIQ")) != EOF)
+       while ((c = getopt(argc, argv, "rsIQa")) != EOF)
                switch (c) {
                case 'I':
                        flags |= E2IMAGE_INSTALL_FLAG;
@@ -1280,11 +1287,21 @@ int main (int argc, char ** argv)
                case 's':
                        flags |= E2IMAGE_SCRAMBLE_FLAG;
                        break;
+               case 'a':
+                       all_data = 1;
+                       break;
                default:
                        usage();
                }
        if (optind != argc - 2 )
                usage();
+
+       if (all_data && !img_type) {
+               com_err(program_name, 0, "-a option can only be used "
+                                        "with raw or QCOW2 images.");
+               exit(1);
+       }
+
        device_name = argv[optind];
        image_fn = argv[optind+1];
 
@@ -1327,7 +1344,14 @@ skip_device:
                                         "the stdout!\n");
                exit(1);
        }
-
+       if (fd != 1) {
+               if (fstat(fd, &st)) {
+                       com_err(program_name, 0, "Can not stat output\n");
+                       exit(1);
+               }
+               if (S_ISBLK(st.st_mode))
+                       output_is_blk = 1;
+       }
        if (flags & E2IMAGE_IS_QCOW2_FLAG) {
                ret = qcow2_write_raw_image(qcow2_fd, fd, header);
                if (ret) {
index b2f39bc..aa97557 100644 (file)
@@ -39,7 +39,7 @@ extern char *optarg;
 #include "../version.h"
 #include "nls-enable.h"
 
-const char * program_name = "get_fstab";
+const char * program_name = "e2initrd_helper";
 char * device_name;
 static int open_flag;
 static int root_type;
@@ -327,7 +327,7 @@ static void PRS(int argc, char **argv)
                usage();
        device_name = blkid_get_devname(NULL, argv[optind], NULL);
        if (!device_name) {
-               com_err("tune2fs", 0, _("Unable to resolve '%s'"),
+               com_err(program_name, 0, _("Unable to resolve '%s'"),
                        argv[optind]);
                exit(1);
        }
@@ -342,6 +342,10 @@ static void get_root_type(ext2_filsys fs)
        int             ret;
 
        retval = get_file(fs, "/etc/fstab", &file);
+       if (retval) {
+               com_err(program_name, retval, "couldn't open /etc/fstab");
+               exit(1);
+       }
 
        while (!mem_file_eof(&file)) {
                buf = get_line(&file);
index 463f731..a6d7b27 100644 (file)
@@ -5,7 +5,10 @@ filefrag \- report on file fragmentation
 .SH SYNOPSIS
 .B filefrag
 [
-.B \-Bbsvx
+.BI \-b blocksize
+]
+[
+.B \-BeksvxX
 ]
 [
 .I files...
@@ -27,8 +30,21 @@ If FIEMAP is not supported then filefrag will fall back to using FIBMAP.
 Force the use of the older FIBMAP ioctl instead of the FIEMAP ioctl for
 testing purposes.
 .TP
-.B \-b
-Use 1024 byte blocksize for the output.
+.BI \-b blocksize
+Use
+.I blocksize
+in bytes for output instead of the filesystem blocksize.
+For compatibility with earlier versions of
+.BR filefrag ,
+if
+.I blocksize
+is unspecified it defaults to 1024 bytes.
+.TP
+.B \-e
+Print output in extent format, even for block-mapped files.
+.TP
+.BI \-k
+Use 1024\-byte blocksize for output (identical to '\-b 1024').
 .TP
 .B \-s
 Sync the file before requesting the mapping.
@@ -38,6 +54,9 @@ Be verbose when checking for file fragmentation.
 .TP
 .B \-x
 Display mapping of extended attributes.
+.TP
+.B \-X
+Display extent block numbers in hexadecimal format.
 .SH AUTHOR
 .B filefrag
 was written by Theodore Ts'o <tytso@mit.edu>.
index 3ec788f..35b3544 100644 (file)
@@ -16,8 +16,8 @@
 #include <unistd.h>
 
 int main(void) {
-    fputs("This program is only supported on Linux!\n", stderr);
-    exit(EXIT_FAILURE);
+       fputs("This program is only supported on Linux!\n", stderr);
+       exit(EXIT_FAILURE);
 }
 #else
 #define _LARGEFILE64_SOURCE
@@ -40,23 +40,28 @@ extern int optind;
 #include <sys/vfs.h>
 #include <sys/ioctl.h>
 #include <linux/fd.h>
+#include <ext2fs/ext2fs.h>
 #include <ext2fs/ext2_types.h>
 #include <ext2fs/fiemap.h>
 
 int verbose = 0;
-int no_bs = 0;         /* Don't use the files blocksize, use 1K blocksize */
+int blocksize;         /* Use specified blocksize (default 1kB) */
 int sync_file = 0;     /* fsync file before getting the mapping */
 int xattr_map = 0;     /* get xattr mapping */
-int force_bmap = 0;
-int logical_width = 12;
-int physical_width = 14;
-unsigned long long filesize;
+int force_bmap;        /* force use of FIBMAP instead of FIEMAP */
+int force_extent;      /* print output in extent format always */
+int logical_width = 8;
+int physical_width = 10;
+const char *ext_fmt = "%4d: %*llu..%*llu: %*llu..%*llu: %6llu: %s\n";
+const char *hex_fmt = "%4d: %*llx..%*llx: %*llx..%*llx: %6llx: %s\n";
 
 #define FILEFRAG_FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR)
 
 #define FIBMAP         _IO(0x00, 1)    /* bmap access */
 #define FIGETBSZ       _IO(0x00, 2)    /* get the block size used for bmap */
 
+#define LUSTRE_SUPER_MAGIC 0x0BD00BD0
+
 #define        EXT4_EXTENTS_FL                 0x00080000 /* Inode uses extents */
 #define        EXT3_IOC_GETFLAGS               _IOR('f', 1, long)
 
@@ -102,30 +107,47 @@ static int get_bmap(int fd, unsigned long block, unsigned long *phy_blk)
                if (errno == EPERM) {
                        fprintf(stderr, "No permission to use FIBMAP ioctl; "
                                "must have root privileges\n");
-                       exit(1);
                }
-               perror("FIBMAP");
        }
        *phy_blk = b;
 
        return ret;
 }
 
+static void print_extent_header(void)
+{
+       printf(" ext: %*s %*s length: %*s flags:\n",
+              logical_width * 2 + 3,
+              "logical_offset:",
+              physical_width * 2 + 3, "physical_offset:",
+              physical_width + 1,
+              "expected:");
+}
+
 static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex,
-                             unsigned long long expected, int blk_shift)
+                             unsigned long long expected, int blk_shift,
+                             ext2fs_struct_stat *st)
 {
-       __u64 phy_blk;
+       unsigned long long physical_blk;
        unsigned long long logical_blk;
-       unsigned long ext_len;
+       unsigned long long ext_len;
+       unsigned long long ext_blks;
        char flags[256] = "";
 
-       /* For inline data all offsets should be in terms of bytes, not blocks */
+       /* For inline data all offsets should be in bytes, not blocks */
        if (fm_extent->fe_flags & FIEMAP_EXTENT_DATA_INLINE)
                blk_shift = 0;
 
        ext_len = fm_extent->fe_length >> blk_shift;
+       ext_blks = (fm_extent->fe_length - 1) >> blk_shift;
        logical_blk = fm_extent->fe_logical >> blk_shift;
-       phy_blk = fm_extent->fe_physical >> blk_shift;
+       physical_blk = fm_extent->fe_physical >> blk_shift;
+
+       if (expected)
+               sprintf(flags, ext_fmt == hex_fmt ? "%*llx: " : "%*llu: ",
+                       physical_width, expected >> blk_shift);
+       else
+               sprintf(flags, "%.*s  ", physical_width, "                   ");
 
        if (fm_extent->fe_flags & FIEMAP_EXTENT_UNKNOWN)
                strcat(flags, "unknown,");
@@ -144,28 +166,24 @@ static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex,
        if (fm_extent->fe_flags & FIEMAP_EXTENT_MERGED)
                strcat(flags, "merged,");
 
-       if (fm_extent->fe_logical + fm_extent->fe_length >= filesize)
+       if (fm_extent->fe_logical + fm_extent->fe_length >= (__u64) st->st_size)
                strcat(flags, "eof,");
 
        /* Remove trailing comma, if any */
        if (flags[0])
                flags[strlen(flags) - 1] = '\0';
 
-       if (expected)
-               printf("%4d %*llu %*llu %*llu %6lu %s\n",
-                      cur_ex, logical_width, logical_blk,
-                      physical_width, phy_blk, physical_width, expected,
-                      ext_len, flags);
-       else
-               printf("%4d %*llu %*llu %*s %6lu %s\n",
-                      cur_ex, logical_width, logical_blk,
-                      physical_width, phy_blk, physical_width, "",
-                      ext_len, flags);
+       printf(ext_fmt, cur_ex, logical_width, logical_blk,
+              logical_width, logical_blk + ext_blks,
+              physical_width, physical_blk,
+              physical_width, physical_blk + ext_blks,
+              ext_len, flags);
 }
 
-static int filefrag_fiemap(int fd, int blk_shift, int *num_extents)
+static int filefrag_fiemap(int fd, int blk_shift, int *num_extents,
+                          ext2fs_struct_stat *st)
 {
-       char buf[4096] = "";
+       char buf[16384];
        struct fiemap *fiemap = (struct fiemap *)buf;
        struct fiemap_extent *fm_ext = &fiemap->fm_extents[0];
        int count = (sizeof(buf) - sizeof(*fiemap)) /
@@ -206,21 +224,13 @@ static int filefrag_fiemap(int fd, int blk_shift, int *num_extents)
                        break;
 
                if (verbose && !fiemap_header_printed) {
-                       printf(" ext %*s %*s %*s length flags\n", logical_width,
-                              "logical", physical_width, "physical",
-                              physical_width, "expected");
+                       print_extent_header();
                        fiemap_header_printed = 1;
                }
 
                for (i = 0; i < fiemap->fm_mapped_extents; i++) {
-                       __u64 phy_blk, logical_blk;
-                       unsigned long ext_len;
-
-                       phy_blk = fm_ext[i].fe_physical >> blk_shift;
-                       ext_len = fm_ext[i].fe_length >> blk_shift;
-                       logical_blk = fm_ext[i].fe_logical >> blk_shift;
-
-                       if (logical_blk && phy_blk != expected) {
+                       if (fm_ext[i].fe_logical != 0 &&
+                           fm_ext[i].fe_physical != expected) {
                                tot_extents++;
                        } else {
                                expected = 0;
@@ -229,45 +239,113 @@ static int filefrag_fiemap(int fd, int blk_shift, int *num_extents)
                        }
                        if (verbose)
                                print_extent_info(&fm_ext[i], n, expected,
-                                                 blk_shift);
+                                                 blk_shift, st);
 
-                       expected = phy_blk + ext_len;
+                       expected = fm_ext[i].fe_physical + fm_ext[i].fe_length;
                        if (fm_ext[i].fe_flags & FIEMAP_EXTENT_LAST)
                                last = 1;
                        n++;
                }
 
-               fiemap->fm_start = (fm_ext[i-1].fe_logical +
-                                   fm_ext[i-1].fe_length);
+               fiemap->fm_start = (fm_ext[i - 1].fe_logical +
+                                   fm_ext[i - 1].fe_length);
        } while (last == 0);
 
        *num_extents = tot_extents;
-out:
+
        return 0;
 }
 
 #define EXT2_DIRECT    12
 
+static int filefrag_fibmap(int fd, int blk_shift, int *num_extents,
+                          ext2fs_struct_stat *st,
+                          unsigned long numblocks, int is_ext2)
+{
+       struct fiemap_extent    fm_ext;
+       unsigned long           i, last_block;
+       unsigned long long      logical;
+                               /* Blocks per indirect block */
+       const long              bpib = st->st_blksize / 4;
+       int                     count;
+
+       if (force_extent) {
+               memset(&fm_ext, 0, sizeof(fm_ext));
+               fm_ext.fe_flags = FIEMAP_EXTENT_MERGED;
+       }
+
+       if (sync_file)
+               fsync(fd);
+
+       for (i = 0, logical = 0, *num_extents = 0, count = last_block = 0;
+            i < numblocks;
+            i++, logical += st->st_blksize) {
+               unsigned long block = 0;
+               int rc;
+
+               if (is_ext2 && last_block) {
+                       if (((i - EXT2_DIRECT) % bpib) == 0)
+                               last_block++;
+                       if (((i - EXT2_DIRECT - bpib) % (bpib * bpib)) == 0)
+                               last_block++;
+                       if (((i - EXT2_DIRECT - bpib - bpib * bpib) %
+                            (((unsigned long long)bpib) * bpib * bpib)) == 0)
+                               last_block++;
+               }
+               rc = get_bmap(fd, i, &block);
+               if (rc < 0)
+                       return rc;
+               if (block == 0)
+                       continue;
+               if (*num_extents == 0) {
+                       (*num_extents)++;
+                       if (force_extent) {
+                               print_extent_header();
+                               fm_ext.fe_physical = block * st->st_blksize;
+                       }
+               }
+               count++;
+               if (force_extent && last_block != 0 &&
+                   (block != last_block + 1 ||
+                    fm_ext.fe_logical + fm_ext.fe_length != logical)) {
+                       print_extent_info(&fm_ext, *num_extents - 1,
+                                         (last_block + 1) * st->st_blksize,
+                                         blk_shift, st);
+                       fm_ext.fe_logical = logical;
+                       fm_ext.fe_physical = block * st->st_blksize;
+                       fm_ext.fe_length = 0;
+                       (*num_extents)++;
+               } else if (verbose && last_block && (block != last_block + 1)) {
+                       printf("Discontinuity: Block %ld is at %lu (was %lu)\n",
+                              i, block, last_block + 1);
+                       (*num_extents)++;
+               }
+               fm_ext.fe_length += st->st_blksize;
+               last_block = block;
+       }
+
+       if (force_extent)
+               print_extent_info(&fm_ext, *num_extents - 1,
+                                 last_block * st->st_blksize, blk_shift, st);
+
+       return count;
+}
+
 static void frag_report(const char *filename)
 {
-       struct statfs   fsinfo;
-#ifdef HAVE_FSTAT64
-       struct stat64   fileinfo;
-#else
-       struct stat     fileinfo;
-#endif
-       int             bs;
+       static struct statfs fsinfo;
+       ext2fs_struct_stat st;
+       int             blk_shift;
        long            fd;
-       unsigned long   block, last_block = 0, numblocks, i, count = 0;
-       long            bpib;   /* Blocks per indirect block */
-       long            cylgroups;
-       int             num_extents = 0, expected;
+       unsigned long   numblocks;
+       int             data_blocks_per_cyl = 1;
+       int             num_extents = 1, expected = ~0;
        int             is_ext2 = 0;
-       static int      once = 1;
+       static dev_t    last_device;
        unsigned int    flags;
-       int rc;
+       int             width;
 
-#ifdef HAVE_OPEN64
+#if defined(HAVE_OPEN64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
        fd = open64(filename, O_RDONLY);
 #else
        fd = open(filename, O_RDONLY);
@@ -277,103 +355,98 @@ static void frag_report(const char *filename)
                return;
        }
 
-       if (statfs(filename, &fsinfo) < 0) {
-               perror("statfs");
-               return;
-       }
-#ifdef HAVE_FSTAT64
-       if (stat64(filename, &fileinfo) < 0) {
+#if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
+       if (fstat64(fd, &st) < 0) {
 #else
-       if (stat(filename, &fileinfo) < 0) {
+       if (fstat(fd, &st) < 0) {
 #endif
                perror("stat");
                return;
        }
+
+       if (last_device != st.st_dev) {
+               if (fstatfs(fd, &fsinfo) < 0) {
+                       perror("fstatfs");
+                       return;
+               }
+               if (verbose)
+                       printf("Filesystem type is: %lx\n",
+                              (unsigned long) fsinfo.f_type);
+       }
+       st.st_blksize = fsinfo.f_bsize;
        if (ioctl(fd, EXT3_IOC_GETFLAGS, &flags) < 0)
                flags = 0;
        if (!(flags & EXT4_EXTENTS_FL) &&
            ((fsinfo.f_type == 0xef51) || (fsinfo.f_type == 0xef52) ||
             (fsinfo.f_type == 0xef53)))
                is_ext2++;
-       if (verbose && once)
-               printf("Filesystem type is: %lx\n",
-                      (unsigned long) fsinfo.f_type);
-
-       cylgroups = div_ceil(fsinfo.f_blocks, fsinfo.f_bsize*8);
-       if (verbose && is_ext2 && once)
-               printf("Filesystem cylinder groups is approximately %ld\n",
-                      cylgroups);
-
-       physical_width = int_log10(fsinfo.f_blocks);
-       if (physical_width < 8)
-               physical_width = 8;
-
-       if (ioctl(fd, FIGETBSZ, &bs) < 0) { /* FIGETBSZ takes an int */
-               perror("FIGETBSZ");
-               close(fd);
-               return;
+
+       if (is_ext2) {
+               long cylgroups = div_ceil(fsinfo.f_blocks, fsinfo.f_bsize * 8);
+
+               if (verbose && last_device != st.st_dev)
+                       printf("Filesystem cylinder groups approximately %ld\n",
+                              cylgroups);
+
+               data_blocks_per_cyl = fsinfo.f_bsize * 8 -
+                                       (fsinfo.f_files / 8 / cylgroups) - 3;
        }
+       last_device = st.st_dev;
+
+       width = int_log10(fsinfo.f_blocks);
+       if (width > physical_width)
+               physical_width = width;
 
-       if (no_bs)
-               bs = 1024;
+       numblocks = (st.st_size + fsinfo.f_bsize - 1) / fsinfo.f_bsize;
+       if (blocksize != 0)
+               blk_shift = int_log2(blocksize);
+       else
+               blk_shift = int_log2(fsinfo.f_bsize);
 
-       bpib = bs / 4;
-       numblocks = (fileinfo.st_size + (bs-1)) / bs;
-       logical_width = int_log10(numblocks);
-       if (logical_width < 7)
-               logical_width = 7;
-       filesize = (long long)fileinfo.st_size;
+       width = int_log10(numblocks);
+       if (width > logical_width)
+               logical_width = width;
        if (verbose)
-               printf("File size of %s is %lld (%ld block%s, blocksize %d)\n",
-                      filename, (long long) fileinfo.st_size, numblocks,
-                      numblocks == 1 ? "" : "s", bs);
+               printf("File size of %s is %llu (%lu block%s of %d bytes)\n",
+                      filename, (unsigned long long)st.st_size,
+                      numblocks * fsinfo.f_bsize >> blk_shift,
+                      numblocks == 1 ? "" : "s", 1 << blk_shift);
+
        if (force_bmap ||
-           filefrag_fiemap(fd, int_log2(bs), &num_extents) != 0) {
-               for (i = 0, count = 0; i < numblocks; i++) {
-                       if (is_ext2 && last_block) {
-                               if (((i-EXT2_DIRECT) % bpib) == 0)
-                                       last_block++;
-                               if (((i-EXT2_DIRECT-bpib) % (bpib*bpib)) == 0)
-                                       last_block++;
-                               if (((i-EXT2_DIRECT-bpib-bpib*bpib) %
-                                    (((__u64) bpib)*bpib*bpib)) == 0)
-                                       last_block++;
-                       }
-                       rc = get_bmap(fd, i, &block);
-                       if (block == 0)
-                               continue;
-                       if (!num_extents)
-                               num_extents++;
-                       count++;
-                       if (last_block && (block != last_block+1) ) {
-                               if (verbose)
-                                       printf("Discontinuity: Block %ld is at "
-                                              "%lu (was %lu)\n",
-                                              i, block, last_block+1);
-                               num_extents++;
+           filefrag_fiemap(fd, blk_shift, &num_extents, &st) != 0) {
+               expected = filefrag_fibmap(fd, blk_shift, &num_extents,
+                                          &st, numblocks, is_ext2);
+               if (expected < 0) {
+                       if (errno == EINVAL || errno == ENOTTY) {
+                               fprintf(stderr, "%s: FIBMAP unsupported\n",
+                                       filename);
+                       } else if (errno != EPERM) {
+                               fprintf(stderr, "%s: FIBMAP error: %s",
+                                       filename, strerror(errno));
                        }
-                       last_block = block;
+                       goto out_close;
                }
+               expected = expected / data_blocks_per_cyl + 1;
        }
+
        if (num_extents == 1)
                printf("%s: 1 extent found", filename);
        else
                printf("%s: %d extents found", filename, num_extents);
        /* count, and thus expected, only set for indirect FIBMAP'd files */
-       if (is_ext2) {
-               expected = (count/((bs*8)-(fsinfo.f_files/8/cylgroups)-3))+1;
-               if (expected && expected < num_extents)
-                       printf(", perfection would be %d extent%s\n", expected,
-                               (expected>1) ? "s" : "");
-       } else
+       if (is_ext2 && expected && expected < num_extents)
+               printf(", perfection would be %d extent%s\n", expected,
+                       (expected > 1) ? "s" : "");
+       else
                fputc('\n', stdout);
+out_close:
        close(fd);
-       once = 0;
 }
 
 static void usage(const char *progname)
 {
-       fprintf(stderr, "Usage: %s [-Bbvsx] file ...\n", progname);
+       fprintf(stderr, "Usage: %s [-b{blocksize}] [-BeklsvxX] file ...\n",
+               progname);
        exit(1);
 }
 
@@ -382,23 +455,61 @@ int main(int argc, char**argv)
        char **cpp;
        int c;
 
-       while ((c = getopt(argc, argv, "Bbsvx")) != EOF)
+       while ((c = getopt(argc, argv, "Bb::eksvxX")) != EOF)
                switch (c) {
                case 'B':
                        force_bmap++;
                        break;
                case 'b':
-                       no_bs++;
+                       if (optarg) {
+                               char *end;
+                               blocksize = strtoul(optarg, &end, 0);
+                               if (end) {
+                                       switch (end[0]) {
+                                       case 'g':
+                                       case 'G':
+                                               blocksize *= 1024;
+                                               /* no break */
+                                       case 'm':
+                                       case 'M':
+                                               blocksize *= 1024;
+                                               /* no break */
+                                       case 'k':
+                                       case 'K':
+                                               blocksize *= 1024;
+                                               break;
+                                       default:
+                                               break;
+                                       }
+                               }
+                       } else { /* Allow -b without argument for compat. Remove
+                                 * this eventually so "-b {blocksize}" works */
+                               fprintf(stderr, "%s: -b needs a blocksize "
+                                       "option, assuming 1024-byte blocks.\n",
+                                       argv[0]);
+                               blocksize = 1024;
+                       }
                        break;
-               case 'v':
-                       verbose++;
+               case 'e':
+                       force_extent++;
+                       if (!verbose)
+                               verbose++;
+                       break;
+               case 'k':
+                       blocksize = 1024;
                        break;
                case 's':
                        sync_file++;
                        break;
+               case 'v':
+                       verbose++;
+                       break;
                case 'x':
                        xattr_map++;
                        break;
+               case 'X':
+                       ext_fmt = hex_fmt;
+                       break;
                default:
                        usage(argv[0]);
                        break;
index 4671af8..6aa0e04 100644 (file)
@@ -40,6 +40,7 @@
 
 #include "et/com_err.h"
 
+#ifdef HAVE_SETMNTENT
 static char *skip_over_blank(char *cp)
 {
        while (*cp && isspace(*cp))
@@ -69,6 +70,7 @@ static char *parse_word(char **buf)
        *buf = next;
        return word;
 }
+#endif
 
 /*
  * Helper function which checks a file in /etc/mtab format to see if a
index 6d443a2..fe2dcdb 100644 (file)
@@ -187,6 +187,13 @@ Check the device for bad blocks before creating the file system.  If
 this option is specified twice, then a slower read-write
 test is used instead of a fast read-only test.
 .TP
+.B \-C " cluster-size"
+Specify the size of cluster in bytes for filesystems using the bigalloc
+feature.  Valid cluster-size values are from 2048 to 256M bytes per
+cluster.  By default (if bigalloc is enabled and no cluster size is
+otherwise specified using this option), the cluster size will be 16
+times the block size.
+.TP
 .B \-D
 Use direct I/O when writing to the disk.  This avoids mke2fs dirtying a
 lot of buffer cache memory, which may impact other applications running
@@ -261,6 +268,15 @@ small risk if the system crashes before the journal has been overwritten
 entirely one time.  If the option value is omitted, it defaults to 1 to
 enable lazy journal inode zeroing.
 .TP
+.BI root_owner [=uid:gid]
+Specify the numeric user and group ID of the root directory.  If no UID:GID
+is specified, use the user and group ID of the user running \fBmke2fs\fR.
+In \fBmke2fs\fR 1.42 and earlier the UID and GID of the root directory were
+set by default to the UID and GID of the user running the mke2fs command.
+The \fBroot_owner=\fR option allows explicitly specifying these values,
+and avoid side-effects for users that do not expect the contents of the
+filesystem to change based on the user running \fBmke2fs\fR.
+.TP
 .B test_fs
 Set a flag in the filesystem superblock indicating that it may be
 mounted using experimental kernel code, such as the ext4dev filesystem.
@@ -309,6 +325,10 @@ RAID parameter as part of the
 option rather than manipulating the number of blocks per group.)
 This option is generally used by developers who
 are developing test cases.
+.IP
+If the bigalloc feature is enabled, the
+.B \-g
+option will specify the number of clusters in a block group.
 .TP
 .BI \-G " number-of-groups"
 Specify the number of block groups that will be packed together to
@@ -516,14 +536,30 @@ prefix the feature name with a  caret ('^') character.  The
 pseudo-filesystem feature "none" will clear all filesystem features.
 .RS 1.2i
 .TP
+.B bigalloc
+This feature enables clustered allocation, so that the unit of
+allocation is a power of two number of blocks.  That is, each bit in the
+what had traditionally been known as the block allocation bitmap now
+indicates whether a cluster is in use or not, where a cluster is by
+default composed of 16 blocks.  This feature can decrease the time
+spent on doing block allocation and brings smaller fragmentation, especially
+for large files.  The size can be specified using the
+.B \-C option.
+.IP
+.B Warning:
+The bigalloc feature is still under development, and may not be fully
+supported with your kernel or may have various bugs.  Please see the web
+page http://ext4.wiki.kernel.org/index.php/Bigalloc for details.
+.TP
 .B dir_index
 Use hashed b-trees to speed up lookups in large directories.
 .TP
-.B extent
+.B extents
 Instead of using the indirect block scheme for storing the location of
 data blocks in an inode, use extents instead.  This is a much more
 efficient encoding which speeds up filesystem access, especially for
-large files.
+large files.  (Note: both extent and extents are accepted for
+historical/backwards compatibility reasons.)
 .TP
 .B filetype
 Store file type information in directory entries.
@@ -622,12 +658,12 @@ If this option is not specified,
 will pick a default either via how
 the command was run (for example, using a name of the form mkfs.ext2,
 mkfs.ext3, etc.) or via a default as defined by the
-.BR /etc/mke2fs.conf (5)
+.B /etc/mke2fs.conf
 file.   This option controls which filesystem options are used by
 default, based on the
 .B fstypes
 configuration stanza in
-.BR /etc/mke2fs.conf (5).
+.BR /etc/mke2fs.conf .
 .sp
 If the
 .B \-O
@@ -646,7 +682,7 @@ Specify how the filesystem is going to be used, so that
 .B mke2fs
 can choose optimal filesystem parameters for that use.  The usage
 types that are supported are defined in the configuration file
-.BR /etc/mke2fs.conf (5).
+.BR /etc/mke2fs.conf .
 The user may specify one or more usage types
 using a comma separated list.
 .sp
index 7ec8cc2..22c2815 100644 (file)
@@ -88,6 +88,8 @@ int   discard = 1;    /* attempt to discard device before fs creation */
 int    direct_io;
 int    force;
 int    noaction;
+uid_t  root_uid;
+gid_t  root_gid;
 int    journal_size;
 int    journal_flags;
 int    lazy_itable_init;
@@ -146,6 +148,7 @@ static int int_log10(unsigned long long arg)
        return l;
 }
 
+#ifdef __linux__
 static int parse_version_number(const char *s)
 {
        int     major, minor, rev;
@@ -167,6 +170,7 @@ static int parse_version_number(const char *s)
                return 0;
        return ((((major * 256) + minor) * 256) + rev);
 }
+#endif
 
 /*
  * Helper function for read_bb_file and test_disk
@@ -362,21 +366,19 @@ static void create_root_dir(ext2_filsys fs)
                com_err("ext2fs_mkdir", retval, _("while creating root dir"));
                exit(1);
        }
-       if (geteuid()) {
+       if (root_uid != 0 || root_gid != 0) {
                retval = ext2fs_read_inode(fs, EXT2_ROOT_INO, &inode);
                if (retval) {
                        com_err("ext2fs_read_inode", retval,
                                _("while reading root inode"));
                        exit(1);
                }
-               uid = getuid();
-               inode.i_uid = uid;
-               ext2fs_set_i_uid_high(inode, uid >> 16);
-               if (uid) {
-                       gid = getgid();
-                       inode.i_gid = gid;
-                       ext2fs_set_i_gid_high(inode, gid >> 16);
-               }
+
+               inode.i_uid = root_uid;
+               ext2fs_set_i_uid_high(inode, root_uid >> 16);
+               inode.i_gid = root_gid;
+               ext2fs_set_i_gid_high(inode, root_gid >> 16);
+
                retval = ext2fs_write_new_inode(fs, EXT2_ROOT_INO, &inode);
                if (retval) {
                        com_err("ext2fs_write_inode", retval,
@@ -583,6 +585,8 @@ static void show_stats(ext2_filsys fs)
                ext2fs_r_blocks_count(s),
               100.0 *  ext2fs_r_blocks_count(s) / ext2fs_blocks_count(s));
        printf(_("First data block=%u\n"), s->s_first_data_block);
+       if (root_uid != 0 || root_gid != 0)
+               printf(_("Root directory owner=%u:%u\n"), root_uid, root_gid);
        if (s->s_reserved_gdt_blocks)
                printf(_("Maximum filesystem blocks=%lu\n"),
                       (s->s_reserved_gdt_blocks + fs->desc_blocks) *
@@ -789,6 +793,29 @@ static void parse_extended_opts(struct ext2_super_block *param,
                                                EXT2_MKJOURNAL_LAZYINIT : 0;
                        else
                                journal_flags |= EXT2_MKJOURNAL_LAZYINIT;
+               } else if (!strcmp(token, "root_owner")) {
+                       if (arg) {
+                               root_uid = strtoul(arg, &p, 0);
+                               if (*p != ':') {
+                                       fprintf(stderr,
+                                               _("Invalid root_owner: '%s'\n"),
+                                               arg);
+                                       r_usage++;
+                                       continue;
+                               }
+                               p++;
+                               root_gid = strtoul(p, &p, 0);
+                               if (*p) {
+                                       fprintf(stderr,
+                                               _("Invalid root_owner: '%s'\n"),
+                                               arg);
+                                       r_usage++;
+                                       continue;
+                               }
+                       } else {
+                               root_uid = getuid();
+                               root_gid = getgid();
+                       }
                } else if (!strcmp(token, "discard")) {
                        discard = 1;
                } else if (!strcmp(token, "nodiscard")) {
@@ -826,6 +853,8 @@ static void parse_extended_opts(struct ext2_super_block *param,
                        "\tresize=<resize maximum size in blocks>\n"
                        "\tlazy_itable_init=<0 to disable, 1 to enable>\n"
                        "\tlazy_journal_init=<0 to disable, 1 to enable>\n"
+                       "\troot_uid=<uid of root directory>\n"
+                       "\troot_gid=<gid of root directory>\n"
                        "\ttest_fs\n"
                        "\tdiscard\n"
                        "\tnodiscard\n"
@@ -958,7 +987,7 @@ static void print_str_list(char **list)
 /*
  * Return TRUE if the profile has the given subsection
  */
-static int profile_has_subsection(profile_t profile, const char *section,
+static int profile_has_subsection(profile_t prof, const char *section,
                                  const char *subsection)
 {
        void                    *state;
@@ -970,7 +999,7 @@ static int profile_has_subsection(profile_t profile, const char *section,
        names[1] = subsection;
        names[2] = 0;
 
-       if (profile_iterator_create(profile, names,
+       if (profile_iterator_create(prof, names,
                                    PROFILE_ITER_LIST_SECTION |
                                    PROFILE_ITER_RELATIONS_ONLY, &state))
                return 0;
@@ -986,7 +1015,7 @@ static int profile_has_subsection(profile_t profile, const char *section,
 
 static char **parse_fs_type(const char *fs_type,
                            const char *usage_types,
-                           struct ext2_super_block *fs_param,
+                           struct ext2_super_block *sb,
                            blk64_t fs_blocks_count,
                            char *progname)
 {
@@ -1053,7 +1082,7 @@ static char **parse_fs_type(const char *fs_type,
                }
        }
 
-       meg = (1024 * 1024) / EXT2_BLOCK_SIZE(fs_param);
+       meg = (1024 * 1024) / EXT2_BLOCK_SIZE(sb);
        if (fs_blocks_count < 3 * meg)
                size_type = "floppy";
        else if (fs_blocks_count < 512 * meg)
@@ -1094,10 +1123,8 @@ static char **parse_fs_type(const char *fs_type,
                }
                if (t)
                        cp = t+1;
-               else {
-                       cp = "";
+               else
                        break;
-               }
        }
        free(parse_str);
        free(profile_type);
@@ -1106,15 +1133,15 @@ static char **parse_fs_type(const char *fs_type,
        return (list.list);
 }
 
-static char *get_string_from_profile(char **fs_types, const char *opt,
+static char *get_string_from_profile(char **types, const char *opt,
                                     const char *def_val)
 {
        char *ret = 0;
        int i;
 
-       for (i=0; fs_types[i]; i++);
+       for (i=0; types[i]; i++);
        for (i-=1; i >=0 ; i--) {
-               profile_get_string(profile, "fs_types", fs_types[i],
+               profile_get_string(profile, "fs_types", types[i],
                                   opt, 0, &ret);
                if (ret)
                        return ret;
@@ -1123,36 +1150,36 @@ static char *get_string_from_profile(char **fs_types, const char *opt,
        return (ret);
 }
 
-static int get_int_from_profile(char **fs_types, const char *opt, int def_val)
+static int get_int_from_profile(char **types, const char *opt, int def_val)
 {
        int ret;
        char **cpp;
 
        profile_get_integer(profile, "defaults", opt, 0, def_val, &ret);
-       for (cpp = fs_types; *cpp; cpp++)
+       for (cpp = types; *cpp; cpp++)
                profile_get_integer(profile, "fs_types", *cpp, opt, ret, &ret);
        return ret;
 }
 
-static double get_double_from_profile(char **fs_types, const char *opt,
+static double get_double_from_profile(char **types, const char *opt,
                                      double def_val)
 {
        double ret;
        char **cpp;
 
        profile_get_double(profile, "defaults", opt, 0, def_val, &ret);
-       for (cpp = fs_types; *cpp; cpp++)
+       for (cpp = types; *cpp; cpp++)
                profile_get_double(profile, "fs_types", *cpp, opt, ret, &ret);
        return ret;
 }
 
-static int get_bool_from_profile(char **fs_types, const char *opt, int def_val)
+static int get_bool_from_profile(char **types, const char *opt, int def_val)
 {
        int ret;
        char **cpp;
 
        profile_get_boolean(profile, "defaults", opt, 0, def_val, &ret);
-       for (cpp = fs_types; *cpp; cpp++)
+       for (cpp = types; *cpp; cpp++)
                profile_get_boolean(profile, "fs_types", *cpp, opt, ret, &ret);
        return ret;
 }
@@ -1322,10 +1349,10 @@ profile_error:
                    "b:cg:i:jl:m:no:qr:s:t:vC:DE:FG:I:J:KL:M:N:O:R:ST:U:V")) != EOF) {
                switch (c) {
                case 'b':
-                       blocksize = strtol(optarg, &tmp, 0);
+                       blocksize = parse_num_blocks2(optarg, -1);
                        b = (blocksize > 0) ? blocksize : -blocksize;
                        if (b < EXT2_MIN_BLOCK_SIZE ||
-                           b > EXT2_MAX_BLOCK_SIZE || *tmp) {
+                           b > EXT2_MAX_BLOCK_SIZE) {
                                com_err(program_name, 0,
                                        _("invalid block size - %s"), optarg);
                                exit(1);
@@ -1343,9 +1370,9 @@ profile_error:
                        cflag++;
                        break;
                case 'C':
-                       cluster_size = strtoul(optarg, &tmp, 0);
-                       if (cluster_size < EXT2_MIN_CLUSTER_SIZE ||
-                           cluster_size > EXT2_MAX_CLUSTER_SIZE || *tmp) {
+                       cluster_size = parse_num_blocks2(optarg, -1);
+                       if (cluster_size <= EXT2_MIN_CLUSTER_SIZE ||
+                           cluster_size > EXT2_MAX_CLUSTER_SIZE) {
                                com_err(program_name, 0,
                                        _("invalid cluster size - %s"),
                                        optarg);
@@ -1355,6 +1382,16 @@ profile_error:
                case 'D':
                        direct_io = 1;
                        break;
+               case 'R':
+                       com_err(program_name, 0,
+                               _("'-R' is deprecated, use '-E' instead"));
+                       /* fallthrough */
+               case 'E':
+                       extended_opts = optarg;
+                       break;
+               case 'F':
+                       force++;
+                       break;
                case 'g':
                        fs_param.s_blocks_per_group = strtoul(optarg, &tmp, 0);
                        if (*tmp) {
@@ -1394,6 +1431,18 @@ profile_error:
                                exit(1);
                        }
                        break;
+               case 'I':
+                       inode_size = strtoul(optarg, &tmp, 0);
+                       if (*tmp) {
+                               com_err(program_name, 0,
+                                       _("invalid inode size - %s"), optarg);
+                               exit(1);
+                       }
+                       break;
+               case 'j':
+                       if (!journal_size)
+                               journal_size = -1;
+                       break;
                case 'J':
                        parse_journal_opts(optarg);
                        break;
@@ -1404,10 +1453,6 @@ profile_error:
                                          "instead!\n"));
                        discard = 0;
                        break;
-               case 'j':
-                       if (!journal_size)
-                               journal_size = -1;
-                       break;
                case 'l':
                        bad_blocks_filename = malloc(strlen(optarg)+1);
                        if (!bad_blocks_filename) {
@@ -1417,6 +1462,9 @@ profile_error:
                        }
                        strcpy(bad_blocks_filename, optarg);
                        break;
+               case 'L':
+                       volume_label = optarg;
+                       break;
                case 'm':
                        reserved_ratio = strtod(optarg, &tmp);
                        if ( *tmp || reserved_ratio > 50 ||
@@ -1427,12 +1475,26 @@ profile_error:
                                exit(1);
                        }
                        break;
+               case 'M':
+                       mount_dir = optarg;
+                       break;
                case 'n':
                        noaction++;
                        break;
+               case 'N':
+                       num_inodes = strtoul(optarg, &tmp, 0);
+                       if (*tmp) {
+                               com_err(program_name, 0,
+                                       _("bad num inodes - %s"), optarg);
+                                       exit(1);
+                       }
+                       break;
                case 'o':
                        creator_os = optarg;
                        break;
+               case 'O':
+                       fs_features = optarg;
+                       break;
                case 'q':
                        quiet = 1;
                        break;
@@ -1448,41 +1510,6 @@ profile_error:
                case 's':       /* deprecated */
                        s_opt = atoi(optarg);
                        break;
-               case 'I':
-                       inode_size = strtoul(optarg, &tmp, 0);
-                       if (*tmp) {
-                               com_err(program_name, 0,
-                                       _("invalid inode size - %s"), optarg);
-                               exit(1);
-                       }
-                       break;
-               case 'v':
-                       verbose = 1;
-                       break;
-               case 'F':
-                       force++;
-                       break;
-               case 'L':
-                       volume_label = optarg;
-                       break;
-               case 'M':
-                       mount_dir = optarg;
-                       break;
-               case 'N':
-                       num_inodes = strtoul(optarg, &tmp, 0);
-                       if (*tmp) {
-                               com_err(program_name, 0,
-                                       _("bad num inodes - %s"), optarg);
-                                       exit(1);
-                       }
-                       break;
-               case 'O':
-                       fs_features = optarg;
-                       break;
-               case 'E':
-               case 'R':
-                       extended_opts = optarg;
-                       break;
                case 'S':
                        super_only = 1;
                        break;
@@ -1505,6 +1532,9 @@ profile_error:
                case 'U':
                        fs_uuid = optarg;
                        break;
+               case 'v':
+                       verbose = 1;
+                       break;
                case 'V':
                        /* Print version number and exit */
                        show_version_only++;
@@ -1845,6 +1875,18 @@ profile_error:
                                                            blocksize*16);
                fs_param.s_log_cluster_size =
                        int_log2(cluster_size >> EXT2_MIN_CLUSTER_LOG_SIZE);
+               if (fs_param.s_log_cluster_size &&
+                   fs_param.s_log_cluster_size < fs_param.s_log_block_size) {
+                       com_err(program_name, 0,
+                               _("The cluster size may not be "
+                                 "smaller than the block size.\n"));
+                       exit(1);
+               }
+       } else if (cluster_size) {
+               com_err(program_name, 0,
+                       _("specifying a cluster size requires the "
+                         "bigalloc feature"));
+               exit(1);
        } else
                fs_param.s_log_cluster_size = fs_param.s_log_block_size;
 
@@ -1873,6 +1915,14 @@ profile_error:
 
        blocksize = EXT2_BLOCK_SIZE(&fs_param);
 
+       /*
+        * Initialize s_desc_size so that the parse_extended_opts()
+        * can correctly handle "-E resize=NNN" if the 64-bit option
+        * is set.
+        */
+       if (fs_param.s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT)
+               fs_param.s_desc_size = EXT2_MIN_DESC_SIZE_64BIT;
+
        /* This check should happen beyond the last assignment to blocksize */
        if (blocksize > sys_page_size) {
                if (!force) {
@@ -1911,6 +1961,29 @@ profile_error:
        if (extended_opts)
                parse_extended_opts(&fs_param, extended_opts);
 
+       /* Can't support bigalloc feature without extents feature */
+       if ((fs_param.s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_BIGALLOC) &&
+           !(fs_param.s_feature_incompat & EXT3_FEATURE_INCOMPAT_EXTENTS)) {
+               com_err(program_name, 0,
+                       _("Can't support bigalloc feature without "
+                         "extents feature"));
+               exit(1);
+       }
+
+       if (!quiet &&
+           (fs_param.s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_BIGALLOC))
+               fprintf(stderr, _("\nWarning: the bigalloc feature is still "
+                                 "under development\n"
+                                 "See https://ext4.wiki.kernel.org/"
+                                 "index.php/Bigalloc for more information\n\n"));
+
+       if (!quiet &&
+           (fs_param.s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_QUOTA))
+               fprintf(stderr, _("\nWarning: the quota feature is still "
+                                 "under development\n"
+                                 "See https://ext4.wiki.kernel.org/"
+                                 "index.php/Quota for more information\n\n"));
+
        /* Since sparse_super is the default, we would only have a problem
         * here if it was explicitly disabled.
         */
@@ -1931,6 +2004,15 @@ profile_error:
                }
        }
 
+       /*
+        * If the bigalloc feature is enabled, then the -g option will
+        * specify the number of clusters per group.
+        */
+       if (fs_param.s_feature_ro_compat & EXT4_FEATURE_RO_COMPAT_BIGALLOC) {
+               fs_param.s_clusters_per_group = fs_param.s_blocks_per_group;
+               fs_param.s_blocks_per_group = 0;
+       }
+
        if (inode_size == 0)
                inode_size = get_int_from_profile(fs_types, "inode_size", 0);
        if (!flex_bg_size && (fs_param.s_feature_incompat &
@@ -1988,7 +2070,7 @@ profile_error:
        fs_param.s_inodes_count = num_inodes ? num_inodes :
                (ext2fs_blocks_count(&fs_param) * blocksize) / inode_ratio;
 
-       if ((((long long)fs_param.s_inodes_count) *
+       if ((((unsigned long long)fs_param.s_inodes_count) *
             (inode_size ? inode_size : EXT2_GOOD_OLD_INODE_SIZE)) >=
            ((ext2fs_blocks_count(&fs_param)) *
             EXT2_BLOCK_SIZE(&fs_param))) {
@@ -2068,7 +2150,7 @@ static int mke2fs_setup_tdb(const char *name, io_manager *io_ptr)
 {
        errcode_t retval = ENOMEM;
        char *tdb_dir = NULL, *tdb_file = NULL;
-       char *device_name, *tmp_name;
+       char *dev_name, *tmp_name;
        int free_tdb_dir = 0;
 
        /*
@@ -2090,13 +2172,13 @@ static int mke2fs_setup_tdb(const char *name, io_manager *io_ptr)
        tmp_name = strdup(name);
        if (!tmp_name)
                goto errout;
-       device_name = basename(tmp_name);
-       tdb_file = malloc(strlen(tdb_dir) + 8 + strlen(device_name) + 7 + 1);
+       dev_name = basename(tmp_name);
+       tdb_file = malloc(strlen(tdb_dir) + 8 + strlen(dev_name) + 7 + 1);
        if (!tdb_file) {
                free(tmp_name);
                goto errout;
        }
-       sprintf(tdb_file, "%s/mke2fs-%s.e2undo", tdb_dir, device_name);
+       sprintf(tdb_file, "%s/mke2fs-%s.e2undo", tdb_dir, dev_name);
        free(tmp_name);
 
        if (!access(tdb_file, F_OK)) {
@@ -2180,10 +2262,11 @@ static int mke2fs_discard_device(ext2_filsys fs)
 static void fix_cluster_bg_counts(ext2_filsys fs)
 {
        blk64_t cluster, num_clusters, tot_free;
-       int     grp_free, num_free, group, num;
+       unsigned num = 0;
+       int     grp_free, num_free, group;
 
        num_clusters = EXT2FS_B2C(fs, ext2fs_blocks_count(fs->super));
-       tot_free = num_free = num = group = grp_free = 0;
+       tot_free = num_free = group = grp_free = 0;
        for (cluster = EXT2FS_B2C(fs, fs->super->s_first_data_block);
             cluster < num_clusters; cluster++) {
                if (!ext2fs_test_block_bitmap2(fs->block_map,
@@ -2278,6 +2361,12 @@ int main (int argc, char *argv[])
                exit(1);
        }
 
+       /* Calculate journal blocks */
+       if (!journal_device && ((journal_size) ||
+               (fs_param.s_feature_compat &
+                EXT3_FEATURE_COMPAT_HAS_JOURNAL)))
+               journal_blocks = figure_journal_size(journal_size, fs);
+
        /* Can't undo discard ... */
        if (!noaction && discard && (io_ptr != undo_io_manager)) {
                retval = mke2fs_discard_device(fs);
@@ -2528,8 +2617,6 @@ int main (int argc, char *argv[])
        } else if ((journal_size) ||
                   (fs_param.s_feature_compat &
                    EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
-               journal_blocks = figure_journal_size(journal_size, fs);
-
                if (super_only) {
                        printf(_("Skipping journal creation in super-only mode\n"));
                        fs->super->s_journal_inum = EXT2_JOURNAL_INO;
index b6df767..0625d0e 100644 (file)
@@ -11,7 +11,7 @@ is the configuration file for
 .BR mke2fs (8).  
 It controls the default parameters used by 
 .BR mke2fs (8)
-when it is creating ext2 or ext3 filesystems.
+when it is creating ext2, ext3, or ext4 filesystems.
 .PP
 The
 .I mke2fs.conf
index fb46fb6..b088f17 100644 (file)
@@ -141,8 +141,10 @@ static __u32 ok_features[3] = {
                EXT4_FEATURE_RO_COMPAT_DIR_NLINK|
                EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE|
                EXT4_FEATURE_RO_COMPAT_GDT_CSUM |
-               EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER |
-               EXT4_FEATURE_RO_COMPAT_QUOTA
+#ifdef CONFIG_QUOTA
+               EXT4_FEATURE_RO_COMPAT_QUOTA |
+#endif
+               EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER
 };
 
 static __u32 clear_ok_features[3] = {
@@ -159,8 +161,10 @@ static __u32 clear_ok_features[3] = {
                EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
                EXT4_FEATURE_RO_COMPAT_DIR_NLINK|
                EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE|
-               EXT4_FEATURE_RO_COMPAT_GDT_CSUM |
-               EXT4_FEATURE_RO_COMPAT_QUOTA
+#ifdef CONFIG_QUOTA
+               EXT4_FEATURE_RO_COMPAT_QUOTA |
+#endif
+               EXT4_FEATURE_RO_COMPAT_GDT_CSUM
 };
 
 /*
@@ -371,7 +375,8 @@ static int update_feature_set(ext2_filsys fs, char *features)
        struct ext2_super_block *sb = fs->super;
        struct ext2_group_desc *gd;
        __u32           old_features[3];
-       int             i, type_err;
+       dgrp_t          i;
+       int             type_err;
        unsigned int    mask_err;
 
 #define FEATURE_ON(type, mask) (!(old_features[(type)] & (mask)) && \
@@ -697,7 +702,7 @@ err:
        return 1;
 }
 
-void handle_quota_options(ext2_filsys fs)
+static void handle_quota_options(ext2_filsys fs)
 {
        quota_ctx_t qctx;
        ext2_ino_t qf_ino;
@@ -732,6 +737,10 @@ void handle_quota_options(ext2_filsys fs)
        quota_release_context(&qctx);
 
        if ((usrquota == QOPT_ENABLE) || (grpquota == QOPT_ENABLE)) {
+               fprintf(stderr, _("\nWarning: the quota feature is still "
+                                 "under development\n"
+                                 "See https://ext4.wiki.kernel.org/"
+                                 "index.php/Quota for more information\n\n"));
                fs->super->s_feature_ro_compat |= EXT4_FEATURE_RO_COMPAT_QUOTA;
                ext2fs_mark_super_dirty(fs);
        } else if (!fs->super->s_usr_quota_inum &&
@@ -743,7 +752,7 @@ void handle_quota_options(ext2_filsys fs)
        return;
 }
 
-void parse_quota_opts(const char *opts)
+static void parse_quota_opts(const char *opts)
 {
        char    *buf, *token, *next, *p;
        int     len;
@@ -1088,7 +1097,7 @@ static void parse_tune2fs_options(int argc, char **argv)
                *io_options++ = 0;
        device_name = blkid_get_devname(NULL, argv[optind], NULL);
        if (!device_name) {
-               com_err("tune2fs", 0, _("Unable to resolve '%s'"),
+               com_err(program_name, 0, _("Unable to resolve '%s'"),
                        argv[optind]);
                exit(1);
        }
@@ -1145,12 +1154,12 @@ static int parse_extended_opts(ext2_filsys fs, const char *opts)
                    strcmp(token, "clear_mmp") == 0) {
                        clear_mmp = 1;
                } else if (strcmp(token, "mmp_update_interval") == 0) {
-                       unsigned long interval;
+                       unsigned long intv;
                        if (!arg) {
                                r_usage++;
                                continue;
                        }
-                       interval = strtoul(arg, &p, 0);
+                       intv = strtoul(arg, &p, 0);
                        if (*p) {
                                fprintf(stderr,
                                        _("Invalid mmp_update_interval: %s\n"),
@@ -1158,21 +1167,21 @@ static int parse_extended_opts(ext2_filsys fs, const char *opts)
                                r_usage++;
                                continue;
                        }
-                       if (interval == 0) {
-                               interval = EXT4_MMP_UPDATE_INTERVAL;
-                       } else if (interval > EXT4_MMP_MAX_UPDATE_INTERVAL) {
+                       if (intv == 0) {
+                               intv = EXT4_MMP_UPDATE_INTERVAL;
+                       } else if (intv > EXT4_MMP_MAX_UPDATE_INTERVAL) {
                                fprintf(stderr,
                                        _("mmp_update_interval too big: %lu\n"),
-                                       interval);
+                                       intv);
                                r_usage++;
                                continue;
                        }
                        printf(P_("Setting multiple mount protection update "
                                  "interval to %lu second\n",
                                  "Setting multiple mount protection update "
-                                 "interval to %lu seconds\n", interval),
-                              interval);
-                       fs->super->s_mmp_update_interval = interval;
+                                 "interval to %lu seconds\n", intv),
+                              intv);
+                       fs->super->s_mmp_update_interval = intv;
                        ext2fs_mark_super_dirty(fs);
                } else if (!strcmp(token, "test_fs")) {
                        fs->super->s_flags |= EXT2_FLAGS_TEST_FILESYS;
@@ -1936,6 +1945,12 @@ retry_open:
                        rc = 1;
                        goto closefs;
                }
+               if (new_inode_size > fs->blocksize) {
+                       fprintf(stderr, _("Invalid inode size %lu (max %d)\n"),
+                               new_inode_size, fs->blocksize);
+                       rc = 1;
+                       goto closefs;
+               }
 
                /*
                 * If inode resize is requested use the
index c8ec5b7..31f0ecb 100644 (file)
Binary files a/po/cs.gmo and b/po/cs.gmo differ
index 24b737f..b110c43 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.42.2\n"
+"Project-Id-Version: e2fsprogs 1.42.6\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2012-06-12 14:40-0400\n"
-"PO-Revision-Date: 2012-04-10 20:44+0200\n"
+"POT-Creation-Date: 2012-09-21 12:16-0400\n"
+"PO-Revision-Date: 2012-12-19 21:51+0100\n"
 "Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "Language: cs\n"
@@ -76,7 +76,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:176
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:177
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Špatný blok %u mimo rozsah; ignorován.\n"
@@ -90,10 +90,10 @@ msgid "while reading the bad blocks inode"
 msgstr "při čtení iuzlu špatných bloků"
 
 #: e2fsck/badblocks.c:72 e2fsck/iscan.c:110 e2fsck/scantest.c:107
-#: e2fsck/unix.c:1298 e2fsck/unix.c:1386 misc/badblocks.c:1214
+#: e2fsck/unix.c:1334 e2fsck/unix.c:1422 misc/badblocks.c:1214
 #: misc/badblocks.c:1222 misc/badblocks.c:1236 misc/badblocks.c:1248
 #: misc/dumpe2fs.c:588 misc/e2image.c:1189 misc/e2image.c:1307
-#: misc/e2image.c:1320 misc/mke2fs.c:192 misc/tune2fs.c:1907 resize/main.c:303
+#: misc/e2image.c:1320 misc/mke2fs.c:193 misc/tune2fs.c:1898 resize/main.c:303
 #, c-format
 msgid "while trying to open %s"
 msgstr "při pokusu otevřít %s"
@@ -103,7 +103,7 @@ msgstr "při pokusu otevřít %s"
 msgid "while trying popen '%s'"
 msgstr "při pokusu popen „%s“"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:199
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:200
 msgid "while reading in list of bad blocks from file"
 msgstr "při načítání seznamu špatných bloků ze souboru"
 
@@ -114,8 +114,7 @@ msgstr "při aktualizaci iuzlu špatných bloků"
 #: e2fsck/badblocks.c:131
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Varování: v iuzlu špatných bloků nalezen nepovolený blok %u. Vymazán.\n"
+msgstr "Varování: v iuzlu špatných bloků nalezen nepovolený blok %u. Vymazán.\n"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -190,12 +189,12 @@ msgstr ""
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Použití: %s [-F] [-I bloky_inode_bufferů] zařízení\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:930
+#: e2fsck/iscan.c:81 e2fsck/unix.c:963
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "při otevírání %s pro synchronizaci"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:936 resize/main.c:276
+#: e2fsck/iscan.c:86 e2fsck/unix.c:969 resize/main.c:276
 #, c-format
 msgid "while trying to flush %s"
 msgstr "při pokusu synchronizovat %s"
@@ -917,13 +916,11 @@ msgstr "Externí žurnál nepodporuje tento systém souborů\n"
 #: e2fsck/problem.c:213
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
-"format.\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 "Superblok žurnálu systému souborů je neznámého typu %N (nepodporováno).\n"
-"Je pravděpodobné, že vaše kopie e2fsck je stará a/nebo nepodporuje tento "
-"formát žurnálu.\n"
+"Je pravděpodobné, že vaše kopie e2fsck je stará a/nebo nepodporuje tento formát žurnálu.\n"
 "Je také možné, že superblok žurnálu je poškozen.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
@@ -935,23 +932,17 @@ msgstr "Superblok žurnálu je poškozen.\n"
 #: e2fsck/problem.c:226
 #, c-format
 msgid "@S has_@j flag is clear, but a @j %s is present.\n"
-msgstr ""
-"Příznak superbloku has_journal (má_žurnál) není nastaven, avšak žurnálový %s "
-"je přítomen.\n"
+msgstr "Příznak superbloku has_journal (má_žurnál) není nastaven, avšak žurnálový %s je přítomen.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:231
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
-msgstr ""
-"Superblok má nastaven příznak needs_recovery (potřebuje_obnovit), avšak "
-"žádný žurnál neexistuje.\n"
+msgstr "Superblok má nastaven příznak needs_recovery (potřebuje_obnovit), avšak žádný žurnál neexistuje.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:236
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
-msgstr ""
-"Příznak superbloku needs_recovery (potřebuje_obnovit) není nastaven, avšak "
-"žurnál obsahuje data.\n"
+msgstr "Příznak superbloku needs_recovery (potřebuje_obnovit) není nastaven, avšak žurnál obsahuje data.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:241
@@ -961,9 +952,7 @@ msgstr "Vymazat žurnál"
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
 #: e2fsck/problem.c:246 e2fsck/problem.c:695
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr ""
-"Systém souborů má příznak(y) vlastností nastaveny, ačkoliv se jedná o revizi "
-"0. "
+msgstr "Systém souborů má příznak(y) vlastností nastaveny, ačkoliv se jedná o revizi 0. "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 #: e2fsck/problem.c:251
@@ -995,14 +984,12 @@ msgstr "Neplatný iuzel %i v seznamu osiřelých iuzlů.\n"
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:276
 msgid "@j @S has an unknown read-only feature flag set.\n"
-msgstr ""
-"Superblok žurnálu má nastaven příznak neznámé vlastnosti „jen pro čtení“.\n"
+msgstr "Superblok žurnálu má nastaven příznak neznámé vlastnosti „jen pro čtení“.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:281
 msgid "@j @S has an unknown incompatible feature flag set.\n"
-msgstr ""
-"Superblok žurnálu má nastaven příznak neznámé vlastnosti „nekompatibilní“.\n"
+msgstr "Superblok žurnálu má nastaven příznak neznámé vlastnosti „nekompatibilní“.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
 #: e2fsck/problem.c:286
@@ -1052,9 +1039,7 @@ msgstr "Přesto spustit žurnál"
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
 #: e2fsck/problem.c:312
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr ""
-"Příznak obnovení není nastaven v záložním superbloku, takže přesto spouštím "
-"žurnál.\n"
+msgstr "Příznak obnovení není nastaven v záložním superbloku, takže přesto spouštím žurnál.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
@@ -1131,8 +1116,7 @@ msgstr "Kontrolní součet deskriptoru skupiny %g je %04x, měl by být %04y. "
 #: e2fsck/problem.c:362
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
-msgstr ""
-"Deskriptor skupiny %g označen jako neinicializovaný bez sady vlastností.\n"
+msgstr "Deskriptor skupiny %g označen jako neinicializovaný bez sady vlastností.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
 #: e2fsck/problem.c:367
@@ -1159,12 +1143,10 @@ msgstr "Příznak test_fs je nastaven (a ext4 je dostupný). "
 #: e2fsck/problem.c:386
 msgid ""
 "@S last mount time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set)  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)  "
 msgstr ""
 "Čas posledního připojení superbloku leží v budoucnosti.\n"
-"\t(rozdíl menší než den, pravděpodobně jsou chybně nastaveny hardwarové "
-"hodiny  "
+"\t(rozdíl menší než den, pravděpodobně jsou chybně nastaveny hardwarové hodiny  "
 
 #. @-expanded: superblock last write time is in the future.\n
 #. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
@@ -1172,18 +1154,15 @@ msgstr ""
 #: e2fsck/problem.c:392
 msgid ""
 "@S last write time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set).  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set).  "
 msgstr ""
 "Čas posledního zápisu superbloku leží v budoucnosti.\n"
-"\t(rozdíl menší než den, pravděpodobně jsou chybně nastaveny hardwarové "
-"hodiny. "
+"\t(rozdíl menší než den, pravděpodobně jsou chybně nastaveny hardwarové hodiny. "
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
 #: e2fsck/problem.c:398
 msgid "One or more @b @g descriptor checksums are invalid.  "
-msgstr ""
-"Jeden nebo více kontrolních součtů deskriptoru skupiny bloků je chybných. "
+msgstr "Jeden nebo více kontrolních součtů deskriptoru skupiny bloků je chybných. "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
 #: e2fsck/problem.c:403
@@ -1197,11 +1176,8 @@ msgstr "Nastavuje se počet volných bloků na %c (byl %b)\n"
 
 #. @-expanded: Making quota inode %i (%Q) hidden.\n
 #: e2fsck/problem.c:413
-#, fuzzy
 msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"Iuzly kvóty se označují jako za skryté.\n"
-"\n"
+msgstr "Iuzel kvóty %i (%Q) se označuje jako skrytý.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
 #: e2fsck/problem.c:418
@@ -1264,20 +1240,17 @@ msgstr "Iuzel %i je adresář nulové délky. "
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:474
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr ""
-"Bitmapa bloků skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
+msgstr "Bitmapa bloků skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:479
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr ""
-"Bitmapa iuzlů skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
+msgstr "Bitmapa iuzlů skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:484
 msgid "@g %g's @i table at %b @C.\n"
-msgstr ""
-"Tabulka iuzlů skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
+msgstr "Tabulka iuzlů skupiny %g v %b koliduje s jiným blokem systému souborů.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
 #: e2fsck/problem.c:489
@@ -1387,8 +1360,7 @@ msgstr "Primární superblok (%b) je na seznamu špatných bloků.\n"
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
 #: e2fsck/problem.c:572
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"Blok %b v primárních deskriptorech skupin je na seznamu špatných bloků\n"
+msgstr "Blok %b v primárních deskriptorech skupin je na seznamu špatných bloků\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
 #: e2fsck/problem.c:578
@@ -1398,14 +1370,12 @@ msgstr "Varování: superblok skupiny %g (%b) je špatný.\n"
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
 #: e2fsck/problem.c:583
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr ""
-"Varování: Kopie deskriptorů skupin ve skupině %g má špatný blok (%b).\n"
+msgstr "Varování: Kopie deskriptorů skupin ve skupině %g má špatný blok (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
 #: e2fsck/problem.c:589
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Chyba při programování? Blok #%b bezdůvodně použit v process_bad_blocks.\n"
+msgstr "Chyba při programování? Blok #%b bezdůvodně použit v process_bad_blocks.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
 #: e2fsck/problem.c:595
@@ -1477,15 +1447,12 @@ msgstr "Chyba při iteraci přes bloky v iuzlu %i: %m\n"
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
 #: e2fsck/problem.c:655
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr ""
-"Chyba při ukládání informace o četnosti iuzlu (iuzel=%i, počet=%N): %m\n"
+msgstr "Chyba při ukládání informace o četnosti iuzlu (iuzel=%i, počet=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
 #: e2fsck/problem.c:660
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Chyba při ukládání informace o bloku adresáře (iuzel=%i, blok=%b, čís=%N): "
-"%m\n"
+msgstr "Chyba při ukládání informace o bloku adresáře (iuzel=%i, blok=%b, čís=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
 #: e2fsck/problem.c:666
@@ -1507,17 +1474,14 @@ msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
-"Speciální (zařízení/socket/fifo/symbolický odkaz) soubor (iuzel %i) má "
-"nastaven\n"
+"Speciální (zařízení/socket/fifo/symbolický odkaz) soubor (iuzel %i) má nastaven\n"
 "příznak immutable nebo append-only. "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
 #: e2fsck/problem.c:685
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
-msgstr ""
-"Iuzel %i má nastaven příznak komprimace na systému souborů bez podpory "
-"komprimace. "
+msgstr "Iuzel %i má nastaven příznak komprimace na systému souborů bez podpory komprimace. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
 #: e2fsck/problem.c:690
@@ -1544,8 +1508,7 @@ msgstr "Iuzel %i byl součástí seznamu osiřelých iuzlů. "
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
 #: e2fsck/problem.c:716
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr ""
-"Nalezeny iuzly, které byly součástí poškozeného spojového seznamu osiřelých. "
+msgstr "Nalezeny iuzly, které byly součástí poškozeného spojového seznamu osiřelých. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
 #: e2fsck/problem.c:721
@@ -1625,8 +1588,7 @@ msgstr "%B (%b) způsobuje, že symbolický odkaz je příliš velký. "
 #: e2fsck/problem.c:795
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"Iuzel %i má nastaven příznak INDEX_FL na systému souborů bez podpory htree.\n"
+msgstr "Iuzel %i má nastaven příznak INDEX_FL na systému souborů bez podpory htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
 #: e2fsck/problem.c:800
@@ -1649,15 +1611,12 @@ msgstr "Iuzel HTREE adresáře %i má nepodporovanou verzi hashe (%N)\n"
 #: e2fsck/problem.c:815
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr ""
-"Iuzel HTREE adresáře %i používá nekompatibilní příznak kořenového uzlu "
-"htree.\n"
+msgstr "Iuzel HTREE adresáře %i používá nekompatibilní příznak kořenového uzlu htree.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
 #: e2fsck/problem.c:820
 msgid "@h %i has a tree depth (%N) which is too big\n"
-msgstr ""
-"Iuzel HTREE adresáře %i má hloubku stromu (%N), která je příliš velká\n"
+msgstr "Iuzel HTREE adresáře %i má hloubku stromu (%N), která je příliš velká\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
@@ -1688,21 +1647,17 @@ msgstr "Rozšířený atribut v iuzlu %i má délku jména (%N), která není p
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
 #: e2fsck/problem.c:846
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
-msgstr ""
-"Rozšířený atribut v iuzlu %i má pozici hodnoty (%N), která není platná\n"
+msgstr "Rozšířený atribut v iuzlu %i má pozici hodnoty (%N), která není platná\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
 #: e2fsck/problem.c:851
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr ""
-"Rozšířený atribut v iuzlu %i má blok hodnot (%N), který není platný (musí "
-"být 0)\n"
+msgstr "Rozšířený atribut v iuzlu %i má blok hodnot (%N), který není platný (musí být 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
 #: e2fsck/problem.c:856
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr ""
-"Rozšířený atribut v iuzlu %i má velikost hodnoty (%N), která není platná\n"
+msgstr "Rozšířený atribut v iuzlu %i má velikost hodnoty (%N), která není platná\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
 #: e2fsck/problem.c:861
@@ -1754,9 +1709,7 @@ msgstr ""
 #: e2fsck/problem.c:892
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"Iuzel %i má nastaven příznak EXTENTS_FL na systému souborů bez podpory "
-"rozsahů.\n"
+msgstr "Iuzel %i má nastaven příznak EXTENTS_FL na systému souborů bez podpory rozsahů.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
 #: e2fsck/problem.c:897
@@ -1866,8 +1819,7 @@ msgstr "Chyba při iteraci přes bloky v iuzlu %i (%s): %m\n"
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
 #: e2fsck/problem.c:989 e2fsck/problem.c:1304
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr ""
-"Chyba při úpravě počtu odkazů bloku rozšířených atributů %b (iuzel %i): %m\n"
+msgstr "Chyba při úpravě počtu odkazů bloku rozšířených atributů %b (iuzel %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
 #: e2fsck/problem.c:994
@@ -1953,8 +1905,7 @@ msgstr "Položka „%Dn“ v %p (%i) je odkaz na „.“ "
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
 #: e2fsck/problem.c:1070
 msgid "@E points to @i (%Di) located in a bad @b.\n"
-msgstr ""
-"Položka „%Dn“ v %p (%i) ukazuje na iuzel (%Di) umístěný ve špatném bloku.\n"
+msgstr "Položka „%Dn“ v %p (%i) ukazuje na iuzel (%Di) umístěný ve špatném bloku.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
 #: e2fsck/problem.c:1075
@@ -1986,8 +1937,7 @@ msgstr "Chybí „..“ v iuzlu adresáře %i.\n"
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
 #: e2fsck/problem.c:1100
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr ""
-"První položka „%Dn“ (iuzel=%Di) v iuzlu adresáře %i (%p) by měla být „.“\n"
+msgstr "První položka „%Dn“ (iuzel=%Di) v iuzlu adresáře %i (%p) by měla být „.“\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
 #: e2fsck/problem.c:1105
@@ -2165,9 +2115,7 @@ msgstr "Blok rozšířených atributů pro iuzel %i (%Q) není platný (%If).\n"
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
 #: e2fsck/problem.c:1270
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"Systém souborů obsahuje velké soubory, ale v superbloku nemá příznak "
-"LARGE_FILE.\n"
+msgstr "Systém souborů obsahuje velké soubory, ale v superbloku nemá příznak LARGE_FILE.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
 #: e2fsck/problem.c:1275
@@ -2268,16 +2216,12 @@ msgstr "Neočekávaný blok v iuzlu HTREE adresáře %d (%q).\n"
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
 #: e2fsck/problem.c:1358
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
-msgstr ""
-"Položka „%Di“ v %p (%i) odkazuje na iuzel %Di ve skupině %g, kde je "
-"nastaveno _INODE_UNINIT.\n"
+msgstr "Položka „%Di“ v %p (%i) odkazuje na iuzel %Di ve skupině %g, kde je nastaveno _INODE_UNINIT.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
 #: e2fsck/problem.c:1363
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr ""
-"Položka „%Dn“ v %p (%i) odkazuje na iuzel %Di nalezený ve skupině %g oblasti "
-"nepoužitých iuzlů.\n"
+msgstr "Položka „%Dn“ v %p (%i) odkazuje na iuzel %Di nalezený ve skupině %g oblasti nepoužitých iuzlů.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1368
@@ -2353,8 +2297,7 @@ msgstr "ext2fs_new_inode: %m při pokusu vytvořit adresář /lost+found\n"
 #: e2fsck/problem.c:1435
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
-msgstr ""
-"ext2fs_new_dir_block: %m při pokusu vytváření nového adresáře /lost+found\n"
+msgstr "ext2fs_new_dir_block: %m při pokusu vytváření nového adresáře /lost+found\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
 #: e2fsck/problem.c:1440
@@ -2523,12 +2466,8 @@ msgstr "Počet volných bloků špatně (%b, spočteno=%c).\n"
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 #: e2fsck/problem.c:1638
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"CHYBA PŘI PROGRAMOVÁNÍ: hranice (%b, %c) bitmapy systému souborů (#%N) "
-"neodpovídají vypočteným hranicím bitmapy (%i, %j)\n"
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "CHYBA PŘI PROGRAMOVÁNÍ: hranice (%b, %c) bitmapy systému souborů (#%N) neodpovídají vypočteným hranicím bitmapy (%i, %j)\n"
 
 #: e2fsck/problem.c:1644
 msgid "Internal error: fudging end of bitmap (%N)\n"
@@ -2550,17 +2489,13 @@ msgstr "Chyba při kopírování do náhradní bitmapy bloků: %m\n"
 #: e2fsck/problem.c:1679
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
-msgstr ""
-"Blok(y) skupiny %g je/jsou používán(y), ale skupina je označena jako "
-"BLOCK_UNINIT\n"
+msgstr "Blok(y) skupiny %g je/jsou používán(y), ale skupina je označena jako BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
 #: e2fsck/problem.c:1684
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
-msgstr ""
-"Iuzel/iuzly skupiny %g je/jsou používán(y), ale skupina je označena jako "
-"INODE_UNINIT\n"
+msgstr "Iuzel/iuzly skupiny %g je/jsou používán(y), ale skupina je označena jako INODE_UNINIT\n"
 
 #. @-expanded: Recreate journal
 #: e2fsck/problem.c:1691
@@ -2569,7 +2504,7 @@ msgstr "Znovu vytvořit žurnál"
 
 #: e2fsck/problem.c:1696
 msgid "Update quota info for quota type %N"
-msgstr ""
+msgstr "Aktualizovat údaje o kvótách pro druh kvót %N"
 
 #: e2fsck/problem.c:1815
 #, c-format
@@ -2637,8 +2572,7 @@ msgid ""
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock "
-"list\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
@@ -2646,10 +2580,8 @@ msgstr ""
 " -p                   Automatická oprava (žádné otázky)\n"
 " -n                   Neprovádět žádné změny systému souborů\n"
 " -y                   Předpokládat „ano“ u všech otázek\n"
-" -c                   Hledat špatné bloky a přidat je do seznamu špatných "
-"bloků\n"
-" -f                   Vynutit kontrolu, i když je systém souborů označen "
-"čistý\n"
+" -c                   Hledat špatné bloky a přidat je do seznamu špatných bloků\n"
+" -f                   Vynutit kontrolu, i když je systém souborů označen čistý\n"
 
 #: e2fsck/unix.c:86
 #, c-format
@@ -2663,152 +2595,152 @@ msgid ""
 msgstr ""
 " -v                   Být podrobný\n"
 " -b superblok         Použít alternativní superblok\n"
-" -B velikost_bloku     Vnutit velikost bloku při hledání superbloku\n"
+" -B velikost_bloku    Vnutit velikost bloku při hledání superbloku\n"
 " -j externí_žurnál    Nastavit umístění externího žurnálu\n"
 " -l soubor_špatných_bloků\n"
 "                      Přidat do seznamu špatných bloků\n"
 " -L soubor_špatných_bloků\n"
 "                      Nastavit seznam špatných bloků\n"
 
-#: e2fsck/unix.c:130
+#: e2fsck/unix.c:131
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %'u/%'u souborů (%0d,%d %% nesouvislých), %'llu/%'llu bloků\n"
 
-#: e2fsck/unix.c:137
+#: e2fsck/unix.c:157
 #, c-format
 msgid ""
 "\n"
-"%8u inode used (%2.2f%%)\n"
+"%12u inode used (%2.2f%%, out of %u)\n"
 msgid_plural ""
 "\n"
-"%8u inodes used (%2.2f%%)\n"
+"%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
 "\n"
-"%8u použitý iuzel (%2.2f %%)\n"
+"%12u použitý iuzel (%2.2f %% z %u)\n"
 msgstr[1] ""
 "\n"
-"%8u použité iuzly (%2.2f %%)\n"
+"%12u použité iuzly (%2.2f %% z %u)\n"
 msgstr[2] ""
 "\n"
-"%8u použitých iuzlů (%2.2f %%)\n"
+"%12u použitých iuzlů (%2.2f %% z %u)\n"
 
-#: e2fsck/unix.c:141
+#: e2fsck/unix.c:161
 #, c-format
-msgid "%8u non-contiguous file (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous files (%0d.%d%%)\n"
-msgstr[0] "%8u nesouvislý soubor (%0d,%d %%)\n"
-msgstr[1] "%8u nesouvislé soubory (%0d,%d %%)\n"
-msgstr[2] "%8u nesouvislých souborů (%0d,%d %%)\n"
+msgid "%12u non-contiguous file (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
+msgstr[0] "%12u nesouvislý soubor (%0d,%d %%)\n"
+msgstr[1] "%12u nesouvislé soubory (%0d,%d %%)\n"
+msgstr[2] "%12u nesouvislých souborů (%0d,%d %%)\n"
 
-#: e2fsck/unix.c:146
+#: e2fsck/unix.c:166
 #, c-format
-msgid "%8u non-contiguous directory (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous directories (%0d.%d%%)\n"
-msgstr[0] "%8u nesouvislý adresář (%0d,%d %%)\n"
-msgstr[1] "%8u nesouvislé adresáře (%0d,%d %%)\n"
-msgstr[2] "%8u nesouvislých adresářů (%0d,%d %%)\n"
+msgid "%12u non-contiguous directory (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
+msgstr[0] "%12u nesouvislý adresář (%0d,%d %%)\n"
+msgstr[1] "%12u nesouvislé adresáře (%0d,%d %%)\n"
+msgstr[2] "%12u nesouvislých adresářů (%0d,%d %%)\n"
 
-#: e2fsck/unix.c:151
+#: e2fsck/unix.c:171
 #, c-format
-msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr "         Počet iuzlů s ind/dind/tind bloky: %'u/%'u/%'u\n"
+msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "             Počet iuzlů s ind/dind/tind bloky: %'u/%'u/%'u\n"
 
-#: e2fsck/unix.c:159
-msgid "         Extent depth histogram: "
-msgstr "         Histogram hloubky rozsahu: "
+#: e2fsck/unix.c:179
+msgid "             Extent depth histogram: "
+msgstr "             Histogram hloubky rozsahu: "
 
-#: e2fsck/unix.c:168
+#: e2fsck/unix.c:188
 #, c-format
-msgid "%8llu block used (%2.2f%%)\n"
-msgid_plural "%8llu blocks used (%2.2f%%)\n"
-msgstr[0] "%8llu použitý blok (%2.2f %%)\n"
-msgstr[1] "%8llu použité bloky (%2.2f %%)\n"
-msgstr[2] "%8llu použitých bloků (%2.2f %%)\n"
+msgid "%12llu block used (%2.2f%%, out of %llu)\n"
+msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
+msgstr[0] "%12llu použitý blok (%2.2f %% z %llu)\n"
+msgstr[1] "%12llu použité bloky (%2.2f %% z %llu)\n"
+msgstr[2] "%12llu použitých bloků (%2.2f %% z %llu)\n"
 
-#: e2fsck/unix.c:171
+#: e2fsck/unix.c:192
 #, c-format
-msgid "%8u bad block\n"
-msgid_plural "%8u bad blocks\n"
-msgstr[0] "%8u chybný blok\n"
-msgstr[1] "%8u chybné bloky\n"
-msgstr[2] "%8u chybných bloků\n"
+msgid "%12u bad block\n"
+msgid_plural "%12u bad blocks\n"
+msgstr[0] "%12u chybný blok\n"
+msgstr[1] "%12u chybné bloky\n"
+msgstr[2] "%12u chybných bloků\n"
 
-#: e2fsck/unix.c:173
+#: e2fsck/unix.c:194
 #, c-format
-msgid "%8u large file\n"
-msgid_plural "%8u large files\n"
-msgstr[0] "%8u velký soubor\n"
-msgstr[1] "%8u velké soubory\n"
-msgstr[2] "%8u velkých souborů\n"
+msgid "%12u large file\n"
+msgid_plural "%12u large files\n"
+msgstr[0] "%12u velký soubor\n"
+msgstr[1] "%12u velké soubory\n"
+msgstr[2] "%12u velkých souborů\n"
 
-#: e2fsck/unix.c:175
+#: e2fsck/unix.c:196
 #, c-format
 msgid ""
 "\n"
-"%8u regular file\n"
+"%12u regular file\n"
 msgid_plural ""
 "\n"
-"%8u regular files\n"
+"%12u regular files\n"
 msgstr[0] ""
 "\n"
-"%8u obyčejný soubor\n"
+"%12u obyčejný soubor\n"
 msgstr[1] ""
 "\n"
-"%8u obyčejné soubory\n"
+"%12u obyčejné soubory\n"
 msgstr[2] ""
 "\n"
-"%8u obyčejných souborů\n"
+"%12u obyčejných souborů\n"
 
-#: e2fsck/unix.c:177
+#: e2fsck/unix.c:198
 #, c-format
-msgid "%8u directory\n"
-msgid_plural "%8u directories\n"
-msgstr[0] "%8u adresář\n"
-msgstr[1] "%8u adresáře\n"
-msgstr[2] "%8u adresářů\n"
+msgid "%12u directory\n"
+msgid_plural "%12u directories\n"
+msgstr[0] "%12u adresář\n"
+msgstr[1] "%12u adresáře\n"
+msgstr[2] "%12u adresářů\n"
 
-#: e2fsck/unix.c:179
+#: e2fsck/unix.c:200
 #, c-format
-msgid "%8u character device file\n"
-msgid_plural "%8u character device files\n"
-msgstr[0] "%8u znakové zařízení\n"
-msgstr[1] "%8u znaková zařízení\n"
-msgstr[2] "%8u znakových zařízení\n"
+msgid "%12u character device file\n"
+msgid_plural "%12u character device files\n"
+msgstr[0] "%12u znakové zařízení\n"
+msgstr[1] "%12u znaková zařízení\n"
+msgstr[2] "%12u znakových zařízení\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:203
 #, c-format
-msgid "%8u block device file\n"
-msgid_plural "%8u block device files\n"
-msgstr[0] "%8u blokové zařízení\n"
-msgstr[1] "%8u bloková zařízení\n"
-msgstr[2] "%8u blokových zařízení\n"
+msgid "%12u block device file\n"
+msgid_plural "%12u block device files\n"
+msgstr[0] "%12u blokové zařízení\n"
+msgstr[1] "%12u bloková zařízení\n"
+msgstr[2] "%12u blokových zařízení\n"
 
-#: e2fsck/unix.c:184
+#: e2fsck/unix.c:205
 #, c-format
-msgid "%8u fifo\n"
-msgid_plural "%8u fifos\n"
-msgstr[0] "%8u roura\n"
-msgstr[1] "%8u roury\n"
-msgstr[2] "%8u rour\n"
+msgid "%12u fifo\n"
+msgid_plural "%12u fifos\n"
+msgstr[0] "%12u roura\n"
+msgstr[1] "%12u roury\n"
+msgstr[2] "%12u rour\n"
 
-#: e2fsck/unix.c:186
+#: e2fsck/unix.c:207
 #, c-format
-msgid "%8u link\n"
-msgid_plural "%8u links\n"
-msgstr[0] "%8u odkaz\n"
-msgstr[1] "%8u odkazy\n"
-msgstr[2] "%8u odkazů\n"
+msgid "%12u link\n"
+msgid_plural "%12u links\n"
+msgstr[0] "%12u odkaz\n"
+msgstr[1] "%12u odkazy\n"
+msgstr[2] "%12u odkazů\n"
 
-#: e2fsck/unix.c:189
+#: e2fsck/unix.c:210
 #, c-format
-msgid "%8u symbolic link"
-msgid_plural "%8u symbolic links"
-msgstr[0] "%8u symbolický odkaz"
-msgstr[1] "%8u symbolické odkazy"
-msgstr[2] "%8u symbolických odkazů"
+msgid "%12u symbolic link"
+msgid_plural "%12u symbolic links"
+msgstr[0] "%12u symbolický odkaz"
+msgstr[1] "%12u symbolické odkazy"
+msgstr[2] "%12u symbolických odkazů"
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:212
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
@@ -2816,39 +2748,39 @@ msgstr[0] "(%u rychlý symbolický odkaz)\n"
 msgstr[1] "(%u rychlé symbolické odkazy)\n"
 msgstr[2] "(%u rychlých symbolických odkazů)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:216
 #, c-format
-msgid "%8u socket\n"
-msgid_plural "%8u sockets\n"
-msgstr[0] "%8u socket\n"
-msgstr[1] "%8u sockety\n"
-msgstr[2] "%8u socketů\n"
+msgid "%12u socket\n"
+msgid_plural "%12u sockets\n"
+msgstr[0] "%12u socket\n"
+msgstr[1] "%12u sockety\n"
+msgstr[2] "%12u socketů\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:220
 #, c-format
-msgid "%8u file\n"
-msgid_plural "%8u files\n"
-msgstr[0] "%8u soubor\n"
-msgstr[1] "%8u soubory\n"
-msgstr[2] "%8u souborů\n"
+msgid "%12u file\n"
+msgid_plural "%12u files\n"
+msgstr[0] "%12u soubor\n"
+msgstr[1] "%12u soubory\n"
+msgstr[2] "%12u souborů\n"
 
-#: e2fsck/unix.c:212 misc/badblocks.c:983 misc/tune2fs.c:1979 misc/util.c:147
+#: e2fsck/unix.c:234 misc/badblocks.c:983 misc/tune2fs.c:1970 misc/util.c:147
 #: resize/main.c:247
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "při zjišťování, jestli je %s připojen."
 
-#: e2fsck/unix.c:230
-#, fuzzy, c-format
+#: e2fsck/unix.c:254
+#, c-format
 msgid "Warning!  %s is %s.\n"
-msgstr "Varování! %s je připojen.\n"
+msgstr "Pozor! %s je %s.\n"
 
-#: e2fsck/unix.c:237
+#: e2fsck/unix.c:261
 #, c-format
 msgid "%s is %s.\n"
-msgstr ""
+msgstr "%s je %s.\n"
 
-#: e2fsck/unix.c:240
+#: e2fsck/unix.c:264
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2856,7 +2788,7 @@ msgstr ""
 "Nemohu pokračovat, končím.\n"
 "\n"
 
-#: e2fsck/unix.c:242
+#: e2fsck/unix.c:266
 msgid ""
 "\n"
 "\n"
@@ -2870,79 +2802,79 @@ msgstr ""
 "***ZPŮSOBÍTE VÁŽNÉ*** poškození systému souborů.\n"
 "\n"
 
-#: e2fsck/unix.c:247
+#: e2fsck/unix.c:271
 msgid "Do you really want to continue"
 msgstr "Chcete opravdu pokračovat"
 
-#: e2fsck/unix.c:249
+#: e2fsck/unix.c:273
 #, c-format
 msgid "check aborted.\n"
 msgstr "kontrola přerušena.\n"
 
-#: e2fsck/unix.c:339
+#: e2fsck/unix.c:363
 msgid " contains a file system with errors"
 msgstr " obsahuje systém souborů s chybami"
 
-#: e2fsck/unix.c:341
+#: e2fsck/unix.c:365
 msgid " was not cleanly unmounted"
 msgstr " nebyl čistě odpojen"
 
-#: e2fsck/unix.c:343
+#: e2fsck/unix.c:367
 msgid " primary superblock features different from backup"
 msgstr " vlastnosti primárního superbloku se liší od záložního"
 
-#: e2fsck/unix.c:347
+#: e2fsck/unix.c:371
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " byl připojen %ukrát bez kontroly"
 
-#: e2fsck/unix.c:354
+#: e2fsck/unix.c:378
 msgid " has filesystem last checked time in the future"
 msgstr " má čas poslední kontroly systému souborů v budoucnosti"
 
-#: e2fsck/unix.c:360
+#: e2fsck/unix.c:384
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " nebyl kontrolován %u dní"
 
-#: e2fsck/unix.c:369
+#: e2fsck/unix.c:393
 msgid ", check forced.\n"
 msgstr ", kontrola vynucena.\n"
 
-#: e2fsck/unix.c:402
+#: e2fsck/unix.c:426
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: čistý, %'u/%'u souborů, %'llu/%'llu bloků"
 
-#: e2fsck/unix.c:421
+#: e2fsck/unix.c:445
 msgid " (check deferred; on battery)"
 msgstr " (kontrola odložena, běžím na baterii)"
 
-#: e2fsck/unix.c:424
+#: e2fsck/unix.c:448
 msgid " (check after next mount)"
 msgstr " (kontrola po příštím připojení)"
 
-#: e2fsck/unix.c:426
+#: e2fsck/unix.c:450
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kontrola za %ld připojení)"
 
-#: e2fsck/unix.c:576
+#: e2fsck/unix.c:600
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "CHYBA: Nemohu otevřít /dev/null (%s)\n"
 
-#: e2fsck/unix.c:645
+#: e2fsck/unix.c:669
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Neplatná verze EA.\n"
 
-#: e2fsck/unix.c:672
+#: e2fsck/unix.c:696
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Neznámý rozšířený přepínač: %s\n"
 
-#: e2fsck/unix.c:697
+#: e2fsck/unix.c:721
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2951,48 +2883,48 @@ msgstr ""
 "Syntaktická chyba v konfiguračním souboru e2fsck (%s, řádek č. %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:766
+#: e2fsck/unix.c:790
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Chyba při ověřování platnosti deskriptoru souboru %d: %s\n"
 
-#: e2fsck/unix.c:770
+#: e2fsck/unix.c:794
 msgid "Invalid completion information file descriptor"
 msgstr "Neplatný deskriptor souborů informace o dokončení"
 
-#: e2fsck/unix.c:785
+#: e2fsck/unix.c:809
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Může být zadán jen jeden z přepínačů -p/-a, -n nebo -y."
 
-#: e2fsck/unix.c:806
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Přepínač -t není v této verzi e2fsck podporován.\n"
 
-#: e2fsck/unix.c:837 e2fsck/unix.c:909 misc/tune2fs.c:811 misc/tune2fs.c:1100
-#: misc/tune2fs.c:1118
+#: e2fsck/unix.c:861 e2fsck/unix.c:933 misc/tune2fs.c:802 misc/tune2fs.c:1091
+#: misc/tune2fs.c:1109
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nelze vyřešit „%s“"
 
-#: e2fsck/unix.c:888
+#: e2fsck/unix.c:912
 msgid "The -n and -D options are incompatible."
 msgstr "Přepínače -n a -D se vzájemně vylučují."
 
-#: e2fsck/unix.c:893
+#: e2fsck/unix.c:917
 msgid "The -n and -c options are incompatible."
 msgstr "Přepínače -n a -c se vzájemně vylučují."
 
-#: e2fsck/unix.c:898
+#: e2fsck/unix.c:922
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Přepínače -n a -l/-L se vzájemně vylučují."
 
-#: e2fsck/unix.c:943
+#: e2fsck/unix.c:976
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Přepínače -c a -l/-L nemohou být použity zároveň.\n"
 
-#: e2fsck/unix.c:991
+#: e2fsck/unix.c:1024
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3001,7 +2933,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG „%s“ není celým číslem\n"
 "\n"
 
-#: e2fsck/unix.c:1000
+#: e2fsck/unix.c:1033
 #, c-format
 msgid ""
 "\n"
@@ -3012,70 +2944,65 @@ msgstr ""
 "Neplatný nečíselný argument u -%c („%s“)\n"
 "\n"
 
-#: e2fsck/unix.c:1089
+#: e2fsck/unix.c:1122
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"Interval MMP je %u sekund a celková doba čekání je %u sekund. Prosím "
-"o strpení…\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "Interval MMP je %u sekund a celková doba čekání je %u sekund. Prosím o strpení…\n"
 
-#: e2fsck/unix.c:1106 e2fsck/unix.c:1111
+#: e2fsck/unix.c:1139 e2fsck/unix.c:1144
 msgid "while checking MMP block"
 msgstr "při kontrole bloku MMP"
 
-#: e2fsck/unix.c:1113 misc/tune2fs.c:1912
+#: e2fsck/unix.c:1146 misc/tune2fs.c:1903
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
 msgstr ""
-"Jste-li si jisti, že souborový systém není používán na žádném uzlu, "
-"spusťte:\n"
+"Jste-li si jisti, že souborový systém není používán na žádném uzlu, spusťte:\n"
 "„tune2fs -f -E clear_mmp ZAŘÍZENÍ“\n"
 
-#: e2fsck/unix.c:1163
+#: e2fsck/unix.c:1196
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Chyba: stará verze knihovny ext2fs!\n"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1204
 msgid "while trying to initialize program"
 msgstr "při pokusu inicializovat program"
 
-#: e2fsck/unix.c:1194
+#: e2fsck/unix.c:1227
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tPoužívám %s, %s\n"
 
-#: e2fsck/unix.c:1206
+#: e2fsck/unix.c:1239
 msgid "need terminal for interactive repairs"
 msgstr "pro interaktivní opravy potřebuji terminál"
 
-#: e2fsck/unix.c:1256
+#: e2fsck/unix.c:1292
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s zkouším záložní bloky…\n"
 
-#: e2fsck/unix.c:1258
+#: e2fsck/unix.c:1294
 msgid "Superblock invalid,"
 msgstr "Neplatný superblok,"
 
-#: e2fsck/unix.c:1259
+#: e2fsck/unix.c:1295
 msgid "Group descriptors look bad..."
 msgstr "Deskriptory skupin vypadají špatně…"
 
-#: e2fsck/unix.c:1269
+#: e2fsck/unix.c:1305
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s při použití záložních bloků"
 
-#: e2fsck/unix.c:1273
+#: e2fsck/unix.c:1309
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: návrat k původnímu superbloku\n"
 
-#: e2fsck/unix.c:1301
+#: e2fsck/unix.c:1337
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3085,28 +3012,28 @@ msgstr ""
 "(Nebo je superblok systému souborů poškozen)\n"
 "\n"
 
-#: e2fsck/unix.c:1307
+#: e2fsck/unix.c:1343
 msgid "Could this be a zero-length partition?\n"
 msgstr "Mohl by toto být oddíl nulové délky?\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1346
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Musíte mít přístup %s k systému souborů nebo být root\n"
 
-#: e2fsck/unix.c:1315
+#: e2fsck/unix.c:1351
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Pravděpodobně neexistující nebo odkládací zařízení?\n"
 
-#: e2fsck/unix.c:1318
+#: e2fsck/unix.c:1354
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr "Systém souborů připojen nebo otevřen výlučně jiným programem?\n"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1357
 msgid "Possibly non-existent device?\n"
 msgstr "Pravděpodobně neexistující zařízení?\n"
 
-#: e2fsck/unix.c:1324
+#: e2fsck/unix.c:1360
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3114,44 +3041,42 @@ msgstr ""
 "Disk chráněn proti zápisu; použijte přepínač -n pro provedení\n"
 "kontroly zařízení jen pro čtení.\n"
 
-#: e2fsck/unix.c:1389
+#: e2fsck/unix.c:1425
 msgid "Get a newer version of e2fsck!"
 msgstr "Sežeňte novější verzi e2fsck!"
 
-#: e2fsck/unix.c:1437
+#: e2fsck/unix.c:1469
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "při kontrole žurnálu ext3 pro %s"
 
-#: e2fsck/unix.c:1448
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1480
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
 "Varování: přeskakuji obnovu žurnálu, protože provádím kontrolu systému\n"
 "souborů jen pro čtení.\n"
 
-#: e2fsck/unix.c:1461
+#: e2fsck/unix.c:1493
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "nemohu nastavit příznaky superbloku na %s\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1499
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "při obnově žurnálu ext3 %s"
 
-#: e2fsck/unix.c:1492
+#: e2fsck/unix.c:1523
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s má nepodporovanou vlastnost(i):"
 
-#: e2fsck/unix.c:1507
+#: e2fsck/unix.c:1538
 #, c-format
 msgid "%s: warning: compression support is experimental.\n"
 msgstr "%s: pozor: podpora komprese je experimentální.\n"
 
-#: e2fsck/unix.c:1513
+#: e2fsck/unix.c:1544
 #, c-format
 msgid ""
 "%s: e2fsck not compiled with HTREE support,\n"
@@ -3160,25 +3085,25 @@ msgstr ""
 "%s: E2fsck nepřeložen s podporou HTREE,\n"
 "\tale systém souborů %s má adresáře HTREE.\n"
 
-#: e2fsck/unix.c:1565
+#: e2fsck/unix.c:1596
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s při čtení iuzlu špatných bloků\n"
 
-#: e2fsck/unix.c:1568
+#: e2fsck/unix.c:1599
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Toto nevypadá dobře, ale zkusíme pokračovat…\n"
 
-#: e2fsck/unix.c:1609
+#: e2fsck/unix.c:1640
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Vytváří se žurnál (%d bloků): "
 
-#: e2fsck/unix.c:1619
+#: e2fsck/unix.c:1650
 msgid " Done.\n"
 msgstr " Hotovo.\n"
 
-#: e2fsck/unix.c:1620
+#: e2fsck/unix.c:1651
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
@@ -3186,24 +3111,24 @@ msgstr ""
 "\n"
 "*** žurnál by znovu vytvořen – souborový systém se opět stal ext3 ***\n"
 
-#: e2fsck/unix.c:1643
+#: e2fsck/unix.c:1674
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Spouštím e2fsck od začátku…\n"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1678
 msgid "while resetting context"
 msgstr "při nulování kontextu"
 
-#: e2fsck/unix.c:1654
+#: e2fsck/unix.c:1685
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck přerušen.\n"
 
-#: e2fsck/unix.c:1659
+#: e2fsck/unix.c:1690
 msgid "aborted"
 msgstr "přerušen"
 
-#: e2fsck/unix.c:1671 e2fsck/util.c:67
+#: e2fsck/unix.c:1702 e2fsck/util.c:67
 #, c-format
 msgid ""
 "\n"
@@ -3212,12 +3137,12 @@ msgstr ""
 "\n"
 "%s: ***** SYSTÉM SOUBORŮ BYL ZMĚNĚN *****\n"
 
-#: e2fsck/unix.c:1675
+#: e2fsck/unix.c:1706
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** ZNOVU ZAVEĎTE LINUX *****\n"
 
-#: e2fsck/unix.c:1683 e2fsck/util.c:73
+#: e2fsck/unix.c:1714 e2fsck/util.c:73
 #, c-format
 msgid ""
 "\n"
@@ -3228,7 +3153,7 @@ msgstr ""
 "%s: ********** VAROVÁNÍ: Systém souborů má stále chyby **********\n"
 "\n"
 
-#: e2fsck/unix.c:1723
+#: e2fsck/unix.c:1754
 msgid "while setting block group checksum info"
 msgstr "při nastavování informace o kontrolním součtu skupiny bloků"
 
@@ -3361,11 +3286,8 @@ msgid "while allocating zeroizing buffer"
 msgstr "Při alokaci nulovací vyrovnávací paměti"
 
 #: e2fsck/util.c:788
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"NEČEKANÁ NEKONZISTENCE: souborový systém je měněn, zatímco fsck běží.\n"
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "NEČEKANÁ NEKONZISTENCE: souborový systém je měněn, zatímco fsck běží.\n"
 
 #: misc/badblocks.c:69
 msgid "done                                                 \n"
@@ -3375,8 +3297,7 @@ msgstr "hotovo                                               \n"
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
-"max_bad_blocks]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
 "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
 "       device [last_block [first_block]]\n"
 msgstr ""
@@ -3561,59 +3482,59 @@ msgstr "Průchod dokončen, nalezeno %u špatných bloků (%d/%d/%d chyb).\n"
 
 #: misc/chattr.c:86
 #, c-format
-msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
-msgstr "Použití: %s [-RVf] [-+=AacDdeijsSu] [-v verze] soubory…\n"
+msgid "Usage: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] files...\n"
+msgstr "Použití: %s [-RVf] [-+=AaCcDdeijsSu] [-v verze] soubory…\n"
 
-#: misc/chattr.c:154
+#: misc/chattr.c:155
 #, c-format
 msgid "bad version - %s\n"
 msgstr "špatná verze – %s\n"
 
-#: misc/chattr.c:201 misc/lsattr.c:116
+#: misc/chattr.c:202 misc/lsattr.c:116
 #, c-format
 msgid "while trying to stat %s"
 msgstr "při pokusu stat %s"
 
-#: misc/chattr.c:208
+#: misc/chattr.c:209
 #, c-format
 msgid "while reading flags on %s"
 msgstr "při čtení příznaků %s"
 
-#: misc/chattr.c:217 misc/chattr.c:236
+#: misc/chattr.c:218 misc/chattr.c:237
 #, c-format
 msgid "Clearing extent flag not supported on %s"
 msgstr "Odstranění příznaku rozsahu není na %s podporováno"
 
-#: misc/chattr.c:222 misc/chattr.c:241
+#: misc/chattr.c:223 misc/chattr.c:242
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Příznaky %s nastaveny na "
 
-#: misc/chattr.c:250
+#: misc/chattr.c:251
 #, c-format
 msgid "while setting flags on %s"
 msgstr "při nastavování příznaků %s"
 
-#: misc/chattr.c:258
+#: misc/chattr.c:259
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Verze %s nastavena na %lu\n"
 
-#: misc/chattr.c:262
+#: misc/chattr.c:263
 #, c-format
 msgid "while setting version on %s"
 msgstr "při nastavování verze %s"
 
-#: misc/chattr.c:282
+#: misc/chattr.c:283
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Nemohu alokovat proměnou path v chattr_dir_proc"
 
-#: misc/chattr.c:322
+#: misc/chattr.c:323
 msgid "= is incompatible with - and +\n"
 msgstr "= je neslučitelné s - a +\n"
 
-#: misc/chattr.c:330
+#: misc/chattr.c:331
 msgid "Must use '-v', =, - or +\n"
 msgstr "Musíte použít '-v', =, - nebo +\n"
 
@@ -3764,9 +3685,9 @@ msgstr ""
 "Začátek žurnálu:          %u\n"
 
 #: misc/dumpe2fs.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "Journal errno:            %d\n"
-msgstr "Uživatelé žurnálu:        %s\n"
+msgstr "Chybové číslo žurnálu:    %d\n"
 
 #: misc/dumpe2fs.c:401 misc/tune2fs.c:218
 msgid "while reading journal superblock"
@@ -3800,7 +3721,7 @@ msgstr ""
 msgid "Journal users:            %s\n"
 msgstr "Uživatelé žurnálu:        %s\n"
 
-#: misc/dumpe2fs.c:442 misc/mke2fs.c:662 misc/tune2fs.c:1137
+#: misc/dumpe2fs.c:442 misc/mke2fs.c:665 misc/tune2fs.c:1128
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Nemohu alokovat paměť pro zpracování přepínačů!\n"
@@ -3838,12 +3759,12 @@ msgstr ""
 "\tsuperblock=<číslo superbloku>\n"
 "\tblocksize=<velikost bloku>\n"
 
-#: misc/dumpe2fs.c:554 misc/mke2fs.c:1525
+#: misc/dumpe2fs.c:554 misc/mke2fs.c:1528
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tPoužívám %s\n"
 
-#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1923
+#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1914
 #: resize/main.c:305
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
@@ -3913,7 +3834,7 @@ msgstr "e2label: chyba při čtení superbloku\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: není systém souborů ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2074
+#: misc/e2label.c:97 misc/tune2fs.c:2065
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Varování: jmenovka příliš dlouhá, zkracuji.\n"
@@ -3928,7 +3849,7 @@ msgstr "e2label: nemohu se zase posunout na superblok\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: chyba při zápisu superbloku\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:803
+#: misc/e2label.c:117 misc/tune2fs.c:794
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Použití: e2label zařízení [novájmenovka]\n"
@@ -4051,9 +3972,7 @@ msgstr "Nemohu alokovat paměť pro typy systému souborů\n"
 
 #: misc/fsck.c:884
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
 msgstr ""
 "%s: přeskakuji chybný řádek v /etc/fstab: připojení typu bind s nenulovým\n"
 "pořadím průchodu skrze fsck\n"
@@ -4073,11 +3992,8 @@ msgid "--waiting-- (pass %d)\n"
 msgstr "--čekám-- (průchod %d)\n"
 
 #: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"Použití: fsck [-AMNPRTV] [-C [fd]] [-t typss] [přepínače-ss] "
-"[systémsouborů…]\n"
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Použití: fsck [-AMNPRTV] [-C [fd]] [-t typss] [přepínače-ss] [systémsouborů…]\n"
 
 #: misc/fsck.c:1120
 #, c-format
@@ -4104,7 +4020,7 @@ msgstr "Při čtení příznaků %s"
 msgid "While reading version on %s"
 msgstr "Při čtení verze %s"
 
-#: misc/mke2fs.c:114
+#: misc/mke2fs.c:115
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4113,8 +4029,7 @@ msgid ""
 "\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-"
-"count]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]\n"
 msgstr ""
 "Použití: %s [-c|-l názevsouboru] [-b velikost-bloku] [-C velkost-clusteru]\n"
 "\t[-i bajtů-na-iuzel] [-I velikost-iuzlu] [-J přepínače-žurnálu]\n"
@@ -4125,35 +4040,35 @@ msgstr ""
 "\t[-E rozšířený-přepínač[,…]] [-t druh-ss] [-T způsob-použití] [-U UUID]\n"
 "\t[-jnqvDFKSV] zařízení [počet-bloků]\n"
 
-#: misc/mke2fs.c:217
+#: misc/mke2fs.c:218
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Spouštím příkaz: %s\n"
 
-#: misc/mke2fs.c:221
+#: misc/mke2fs.c:222
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "při pokusu spustit „%s“"
 
-#: misc/mke2fs.c:228
+#: misc/mke2fs.c:229
 msgid "while processing list of bad blocks from program"
 msgstr "při zpracovávání seznamu špatných bloků z programu"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:256
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Blok %d v oblasti primárního superbloku/deskriptorů skupin špatný.\n"
 
-#: misc/mke2fs.c:257
+#: misc/mke2fs.c:258
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr "Bloky %u až %u musí být pro vytvoření systému souborů v pořádku.\n"
 
-#: misc/mke2fs.c:260
+#: misc/mke2fs.c:261
 msgid "Aborting....\n"
 msgstr "Končím…\n"
 
-#: misc/mke2fs.c:280
+#: misc/mke2fs.c:281
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -4164,15 +4079,15 @@ msgstr ""
 "\tšpatné bloky.\n"
 "\n"
 
-#: misc/mke2fs.c:299
+#: misc/mke2fs.c:300
 msgid "while marking bad blocks as used"
 msgstr "při označování špatných bloků jako použité"
 
-#: misc/mke2fs.c:316
+#: misc/mke2fs.c:317
 msgid "Writing inode tables: "
 msgstr "Zapisuji tabulky iuzlů: "
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:339
 #, c-format
 msgid ""
 "\n"
@@ -4181,73 +4096,73 @@ msgstr ""
 "\n"
 "Nemohu zapsat %d bloků do tabulky iuzlů počínaje %llu: %s\n"
 
-#: misc/mke2fs.c:351 misc/mke2fs.c:2175 misc/mke2fs.c:2429
+#: misc/mke2fs.c:353 misc/mke2fs.c:2181 misc/mke2fs.c:2435
 #, c-format
 msgid "done                            \n"
 msgstr "hotovo                          \n"
 
-#: misc/mke2fs.c:362
+#: misc/mke2fs.c:364
 msgid "while creating root dir"
 msgstr "při vytváření kořenového adresáře"
 
-#: misc/mke2fs.c:369
+#: misc/mke2fs.c:371
 msgid "while reading root inode"
 msgstr "při čtení kořenového iuzlu"
 
-#: misc/mke2fs.c:383
+#: misc/mke2fs.c:385
 msgid "while setting root inode ownership"
 msgstr "při nastavování vlastnictví kořenového iuzlu"
 
-#: misc/mke2fs.c:401
+#: misc/mke2fs.c:403
 msgid "while creating /lost+found"
 msgstr "při vytváření /lost+found"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:410
 msgid "while looking up /lost+found"
 msgstr "při vyhledávání /lost+found"
 
-#: misc/mke2fs.c:421
+#: misc/mke2fs.c:423
 msgid "while expanding /lost+found"
 msgstr "při zvětšování /lost+found"
 
-#: misc/mke2fs.c:436
+#: misc/mke2fs.c:438
 msgid "while setting bad block inode"
 msgstr "při nastavování iuzlu špatných bloků"
 
-#: misc/mke2fs.c:463
+#: misc/mke2fs.c:465
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Nedostatek paměti při mazání sektorů %d-%d\n"
 
-#: misc/mke2fs.c:473
+#: misc/mke2fs.c:475
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Varování: nemohu načíst blok 0: %s\n"
 
-#: misc/mke2fs.c:489
+#: misc/mke2fs.c:491
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Varování: nemohu vymazat sektor %d: %s\n"
 
-#: misc/mke2fs.c:505
+#: misc/mke2fs.c:507
 msgid "while initializing journal superblock"
 msgstr "při inicializaci superbloku žurnálu"
 
-#: misc/mke2fs.c:513
+#: misc/mke2fs.c:515
 msgid "Zeroing journal device: "
 msgstr "Nuluji zařízení žurnálu: "
 
-#: misc/mke2fs.c:525
+#: misc/mke2fs.c:527
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "při nulování zařízení žurnálu (blok %llu, počet %d)"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:546
 msgid "while writing journal superblock"
 msgstr "při zápisu superbloku žurnálu"
 
 # TODO pluralize
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:561
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -4256,122 +4171,122 @@ msgstr ""
 "pozor: nepoužito %'llu bloků.\n"
 "\n"
 
-#: misc/mke2fs.c:563
+#: misc/mke2fs.c:566
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Jmenovka systému souborů=%s\n"
 
-#: misc/mke2fs.c:566
+#: misc/mke2fs.c:569
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Typ OS: %s\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:571
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Velikost bloku=%u (log=%u)\n"
 
-#: misc/mke2fs.c:572
+#: misc/mke2fs.c:575
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Velikost clusteru=%u (log=%u)\n"
 
-#: misc/mke2fs.c:576
+#: misc/mke2fs.c:579
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Velikost fragmentu=%u (log=%u)\n"
 
-#: misc/mke2fs.c:578
+#: misc/mke2fs.c:581
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Krok=%u bloků, Šířka pásu=%u bloků\n"
 
-#: misc/mke2fs.c:580
+#: misc/mke2fs.c:583
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u iuzlů, %llu bloků\n"
 
-#: misc/mke2fs.c:582
+#: misc/mke2fs.c:585
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu bloků (%2.2f %%) rezervováno pro superuživatele\n"
 
-#: misc/mke2fs.c:585
+#: misc/mke2fs.c:588
 #, c-format
 msgid "First data block=%u\n"
 msgstr "První blok dat=%u\n"
 
-#: misc/mke2fs.c:587
+#: misc/mke2fs.c:590
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximum bloků v systému souborů=%'lu\n"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:594
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u skupin bloků\n"
 
-#: misc/mke2fs.c:593
+#: misc/mke2fs.c:596
 #, c-format
 msgid "%u block group\n"
 msgstr "%u skupina bloků\n"
 
-#: misc/mke2fs.c:596
+#: misc/mke2fs.c:599
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u bloků ve skupině, %u clusterů ve skupině\n"
 
-#: misc/mke2fs.c:599
+#: misc/mke2fs.c:602
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u bloků ve skupině, %u fragmentů ve skupině\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:604
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u iuzlů ve skupině\n"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:611
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Zálohy superbloku uloženy v blocích: "
 
-#: misc/mke2fs.c:687 misc/tune2fs.c:1165
+#: misc/mke2fs.c:690 misc/tune2fs.c:1156
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Neplatný interval_aktualizace_mmp: %s\n"
 
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:704
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Neplatný parametr kroku (stride): %s\n"
 
-#: misc/mke2fs.c:716
+#: misc/mke2fs.c:719
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Neplatný parametr šířka-pásu (stripe-width): %s\n"
 
-#: misc/mke2fs.c:739
+#: misc/mke2fs.c:742
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Neplatný parametr změny velikosti: %s\n"
 
-#: misc/mke2fs.c:746
+#: misc/mke2fs.c:749
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr "Maximum změny velkosti musí být větší než velikost systému souborů.\n"
 
-#: misc/mke2fs.c:770
+#: misc/mke2fs.c:773
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr "Revize 0 souborového systému nepodporuje změnu velikosti za běhu\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:811
 #, c-format
 msgid "Invalid quotatype parameter: %s\n"
 msgstr "Neplatný parametr druhu kvót: %s\n"
 
-#: misc/mke2fs.c:819
+#: misc/mke2fs.c:822
 #, c-format
 msgid ""
 "\n"
@@ -4410,7 +4325,7 @@ msgstr ""
 "\tquotatype=<druh kvót: usr (uživatelé), nebo grp (skupiny)>\n"
 "\n"
 
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:842
 #, c-format
 msgid ""
 "\n"
@@ -4421,7 +4336,7 @@ msgstr ""
 "Varování: šířka pruhu RAIDu %u není sudý násobek kroku (stride) %u.\n"
 "\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:881
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -4430,17 +4345,17 @@ msgstr ""
 "Chyba syntaxe v konfiguračním souboru mke2fs (%s, řádek č. %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:891 misc/tune2fs.c:393
+#: misc/mke2fs.c:894 misc/tune2fs.c:393
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Neplatný sada přepínačů systému souborů: %s\n"
 
-#: misc/mke2fs.c:903 misc/tune2fs.c:345
+#: misc/mke2fs.c:906 misc/tune2fs.c:345
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Nastaven neplatný přepínač připojení: %s\n"
 
-#: misc/mke2fs.c:1043
+#: misc/mke2fs.c:1046
 #, c-format
 msgid ""
 "\n"
@@ -4449,7 +4364,7 @@ msgstr ""
 "\n"
 "Váš soubor mke2fs.conf nedefinuje druh souborového systému %s.\n"
 
-#: misc/mke2fs.c:1047
+#: misc/mke2fs.c:1050
 #, c-format
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
@@ -4458,12 +4373,12 @@ msgstr ""
 "Pravděpodobně potřebujete nainstalovat aktualizovaný soubor mke2fs.conf.\n"
 "\n"
 
-#: misc/mke2fs.c:1051
+#: misc/mke2fs.c:1054
 #, c-format
 msgid "Aborting...\n"
 msgstr "Přerušuje se…\n"
 
-#: misc/mke2fs.c:1091
+#: misc/mke2fs.c:1094
 #, c-format
 msgid ""
 "\n"
@@ -4474,123 +4389,118 @@ msgstr ""
 "Pozor: fs_type (druh SS) %s není v mke2fs.conf definován\n"
 "\n"
 
-#: misc/mke2fs.c:1249
+#: misc/mke2fs.c:1252
 #, c-format
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Nemohu alokovat paměť pro novou proměnnou PATH.\n"
 
-#: misc/mke2fs.c:1290
+#: misc/mke2fs.c:1293
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Profil nebylo možné správně inicializovat (chyba: %ld).\n"
 
-#: misc/mke2fs.c:1330
+#: misc/mke2fs.c:1333
 #, c-format
 msgid "invalid block size - %s"
 msgstr "špatná velikost bloku – %s"
 
-#: misc/mke2fs.c:1334
+#: misc/mke2fs.c:1337
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Varování: velikost bloku %d není na většině systémů použitelná.\n"
 
-#: misc/mke2fs.c:1350
+#: misc/mke2fs.c:1353
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "špatná velikost clusteru – %s"
 
-#: misc/mke2fs.c:1362
+#: misc/mke2fs.c:1365
 msgid "Illegal number for blocks per group"
 msgstr "Neplatný počet bloků ve skupině"
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1370
 msgid "blocks per group must be multiple of 8"
 msgstr "bloky ve skupině musí být násobek 8"
 
-#: misc/mke2fs.c:1375
+#: misc/mke2fs.c:1378
 msgid "Illegal number for flex_bg size"
 msgstr "Neplatné číslo pro velikost flex_bg"
 
-#: misc/mke2fs.c:1381
+#: misc/mke2fs.c:1384
 msgid "flex_bg size must be a power of 2"
 msgstr "Velikost flex_bg musí být mocninou 2"
 
-#: misc/mke2fs.c:1391
+#: misc/mke2fs.c:1394
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "špatný podíl iuzlů %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1401
+#: misc/mke2fs.c:1404
 #, c-format
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Pozor: Přepínač -K je zastaralý a neměl by se již používat. Místo něj "
-"použijte rozšířený přepínač „-E nodiscard“!\n"
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Pozor: Přepínač -K je zastaralý a neměl by se již používat. Místo něj použijte rozšířený přepínač „-E nodiscard“!\n"
 
-#: misc/mke2fs.c:1415
+#: misc/mke2fs.c:1418
 msgid "in malloc for bad_blocks_filename"
 msgstr "v malloc pro bad_blocks_filename"
 
-#: misc/mke2fs.c:1425
+#: misc/mke2fs.c:1428
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "špatné procento rezervovaných bloků – %s"
 
-#: misc/mke2fs.c:1443
+#: misc/mke2fs.c:1446
 #, c-format
 msgid "bad revision level - %s"
 msgstr "špatné číslo revize – %s"
 
-#: misc/mke2fs.c:1455
+#: misc/mke2fs.c:1458
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "špatná velikost iuzlu – %s"
 
-#: misc/mke2fs.c:1475
+#: misc/mke2fs.c:1478
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "chybný počet iuzlů – %s"
 
-#: misc/mke2fs.c:1492
+#: misc/mke2fs.c:1495
 msgid "The -t option may only be used once"
 msgstr "Přepínač -t lze použít jen jednou"
 
-#: misc/mke2fs.c:1500
+#: misc/mke2fs.c:1503
 msgid "The -T option may only be used once"
 msgstr "Přepínač -T lze použít jen jednou"
 
-#: misc/mke2fs.c:1550 misc/mke2fs.c:2508
+#: misc/mke2fs.c:1553 misc/mke2fs.c:2514
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "při pokusu otevřít zařízení žurnálu %s\n"
 
-#: misc/mke2fs.c:1556
+#: misc/mke2fs.c:1559
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
-msgstr ""
-"Velikost bloku zařízení žurnálu (%d) menší než minimální velikost bloku %d\n"
+msgstr "Velikost bloku zařízení žurnálu (%d) menší než minimální velikost bloku %d\n"
 
-#: misc/mke2fs.c:1562
+#: misc/mke2fs.c:1565
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Použiji velikost bloku žurnálovacího zařízení: %d\n"
 
-#: misc/mke2fs.c:1573
+#: misc/mke2fs.c:1576
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "špatné bloky „%s“ na zařízení „%s“"
 
-#: misc/mke2fs.c:1583
+#: misc/mke2fs.c:1586
 msgid "filesystem"
 msgstr "systém souborů"
 
-#: misc/mke2fs.c:1596 resize/main.c:374
+#: misc/mke2fs.c:1599 resize/main.c:355
 msgid "while trying to determine filesystem size"
 msgstr "při pokusu zjistit velikost systému souborů"
 
-#: misc/mke2fs.c:1602
+#: misc/mke2fs.c:1605
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -4598,7 +4508,7 @@ msgstr ""
 "Nemohu zjistit velikost zařízení; musíte zadat\n"
 "velikost systému souborů\n"
 
-#: misc/mke2fs.c:1609
+#: misc/mke2fs.c:1612
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4610,16 +4520,16 @@ msgstr ""
 "         oddíl se používá. Možná budete muset pro opětovné načtení\n"
 "         své tabulky oddílů znovu zavést systém.\n"
 
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1629
 msgid "Filesystem larger than apparent device size."
 msgstr "Systém souborů větší než velikost zařízení."
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1649
 #, c-format
 msgid "Failed to parse fs types list\n"
 msgstr "Seznam druhů souborových systému se nezdařilo rozebrat\n"
 
-#: misc/mke2fs.c:1700
+#: misc/mke2fs.c:1703
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -4628,31 +4538,31 @@ msgstr ""
 "%s: Velikost zařízení (0x%llx bloků) %s je příliš velká, aby byla\n"
 "vyjádřena v 32 bitech za použití bloku o velikosti %d.\n"
 
-#: misc/mke2fs.c:1716
+#: misc/mke2fs.c:1719
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types (druhy SS) pro řešení v mke2fs.conf: "
 
-#: misc/mke2fs.c:1723
+#: misc/mke2fs.c:1726
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr "Vlastnosti systému souborů nejsou v revizi 0 podporovány\n"
 
-#: misc/mke2fs.c:1730
+#: misc/mke2fs.c:1733
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr "Řídké superbloky systému souborů nejsou v revizi 0 podporovány\n"
 
-#: misc/mke2fs.c:1742
+#: misc/mke2fs.c:1745
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Revize 0 systému souborů žurnály nepodporuje\n"
 
-#: misc/mke2fs.c:1756
+#: misc/mke2fs.c:1759
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "špatné procento rezervovaných bloků – %lf"
 
-#: misc/mke2fs.c:1772
+#: misc/mke2fs.c:1775
 #, c-format
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
@@ -4661,86 +4571,78 @@ msgstr ""
 "Vlastnosti resize_inode a meta_bg nejsou slučitelné.\n"
 "Obě nemohou být zapnuty současně.\n"
 
-#: misc/mke2fs.c:1789
+#: misc/mke2fs.c:1792
 msgid "while trying to determine hardware sector size"
 msgstr "při pokusu zjistit velikost hardwarového sektoru"
 
-#: misc/mke2fs.c:1795
+#: misc/mke2fs.c:1798
 msgid "while trying to determine physical sector size"
 msgstr "při pokusu určit velikost fyzického sektoru"
 
-#: misc/mke2fs.c:1828
+#: misc/mke2fs.c:1831
 msgid "while setting blocksize; too small for device\n"
 msgstr "při nastavování velikosti bloku; pro zařízení příliš malá hodnota\n"
 
-#: misc/mke2fs.c:1833
+#: misc/mke2fs.c:1836
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Pozor: zadaná velikost bloku %d je menší než velikost fyzického sektoru %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Pozor: zadaná velikost bloku %d je menší než velikost fyzického sektoru %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1867
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "varování: Není možné zjistit geometrii %s\n"
 
-#: misc/mke2fs.c:1867
+#: misc/mke2fs.c:1870
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "Zarovnání %s představuje posun o %'lu bajtů.\n"
 
-#: misc/mke2fs.c:1869
+#: misc/mke2fs.c:1872
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
-msgstr ""
-"Toto může vést k velmi špatnému výkonu, doporučuje se (nové) vytvoření "
-"oddílů.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Toto může vést k velmi špatnému výkonu, doporučuje se (nové) vytvoření oddílů.\n"
 
-#: misc/mke2fs.c:1880
+#: misc/mke2fs.c:1883
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-bajtové bloky příliš velké pro systém (max %d)"
 
-#: misc/mke2fs.c:1884
+#: misc/mke2fs.c:1887
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
-msgstr ""
-"Varování: %d-bajtové bloky příliš velké pro systém (max %d), donucen "
-"pokračovat\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Varování: %d-bajtové bloky příliš velké pro systém (max %d), donucen pokračovat\n"
 
-#: misc/mke2fs.c:1920
+#: misc/mke2fs.c:1925
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "bloky vyhrazené pro změnu velikosti za běhu nejsou podporovány na neřídkém\n"
 "\tsystému souborů"
 
-#: misc/mke2fs.c:1929
+#: misc/mke2fs.c:1934
 msgid "blocks per group count out of range"
 msgstr "počet bloků ve skupině mimo rozsah"
 
-#: misc/mke2fs.c:1944
+#: misc/mke2fs.c:1949
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr "Vlastnost flex_bg není povolena, takže její velikost nemůže být zadána"
 
-#: misc/mke2fs.c:1956
+#: misc/mke2fs.c:1961
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "špatná velikost iuzlu %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1974
+#: misc/mke2fs.c:1979
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "příliš mnoho iuzlů (%'llu), zvýšit poměr iuzlů?"
 
-#: misc/mke2fs.c:1981
+#: misc/mke2fs.c:1986
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "příliš mnoho iuzlů (%'llu), zadejte < 2^32 iuzlů"
 
-#: misc/mke2fs.c:1995
+#: misc/mke2fs.c:2000
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4751,7 +4653,7 @@ msgstr ""
 "\tsystém souborů s %'llu bloky, zadejte vyšší poměr_iuzlu (-i)\n"
 "\tnebo snižte počet iuzlů (-N).\n"
 
-#: misc/mke2fs.c:2114
+#: misc/mke2fs.c:2119
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -4761,45 +4663,43 @@ msgstr ""
 "Přepisuji existující systém souborů, toto může být odčiněno příkazem:\n"
 "   e2undo %s %s\n"
 
-#: misc/mke2fs.c:2128
+#: misc/mke2fs.c:2133
 msgid "while trying to setup undo file\n"
 msgstr "při pokusu nastavit soubor pro odvolání změn\n"
 
-#: misc/mke2fs.c:2154
+#: misc/mke2fs.c:2159
 msgid "Discarding device blocks: "
 msgstr "Zahazují se bloky zařízení: "
 
 # Continuation of "Calling BLKDISCARD from %llu to %llu "
-#: misc/mke2fs.c:2170
+#: misc/mke2fs.c:2176
 msgid "failed - "
 msgstr "selhalo – "
 
-#: misc/mke2fs.c:2277
+#: misc/mke2fs.c:2283
 msgid "while setting up superblock"
 msgstr "při nastavování superbloku"
 
-#: misc/mke2fs.c:2286
+#: misc/mke2fs.c:2292
 #, c-format
 msgid "Discard succeeded and will return 0s  - skipping inode table wipe\n"
-msgstr ""
-"Skartování (discard) uspělo a bude vráceno 0s – vynechá se výmaz tabulky "
-"iuzlů\n"
+msgstr "Skartování (discard) uspělo a bude vráceno 0s – vynechá se výmaz tabulky iuzlů\n"
 
-#: misc/mke2fs.c:2369
+#: misc/mke2fs.c:2375
 #, c-format
 msgid "unknown os - %s"
 msgstr "neznámý os – %s"
 
-#: misc/mke2fs.c:2421
+#: misc/mke2fs.c:2427
 #, c-format
 msgid "Allocating group tables: "
 msgstr "Alokují se tabulky skupin: "
 
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2431
 msgid "while trying to allocate filesystem tables"
 msgstr "při pokusu alokovat tabulky systému souborů"
 
-#: misc/mke2fs.c:2434
+#: misc/mke2fs.c:2440
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -4807,25 +4707,25 @@ msgstr ""
 "\n"
 "\tpři převodu bitmapy subclusterů"
 
-#: misc/mke2fs.c:2477
+#: misc/mke2fs.c:2483
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "při nulování bloku %llu na konci systému souborů"
 
-#: misc/mke2fs.c:2490
+#: misc/mke2fs.c:2496
 msgid "while reserving blocks for online resize"
 msgstr "při rezervaci bloků pro změnu velikosti za běhu"
 
-#: misc/mke2fs.c:2501 misc/tune2fs.c:640
+#: misc/mke2fs.c:2507 misc/tune2fs.c:640
 msgid "journal"
 msgstr "žurnál"
 
-#: misc/mke2fs.c:2513
+#: misc/mke2fs.c:2519
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Přidávám žurnál k zařízení %s: "
 
-#: misc/mke2fs.c:2520
+#: misc/mke2fs.c:2526
 #, c-format
 msgid ""
 "\n"
@@ -4834,22 +4734,22 @@ msgstr ""
 "\n"
 "\tpři pokusu přidat žurnál k zařízení %s"
 
-#: misc/mke2fs.c:2525 misc/mke2fs.c:2557 misc/tune2fs.c:669 misc/tune2fs.c:683
+#: misc/mke2fs.c:2531 misc/mke2fs.c:2563 misc/tune2fs.c:669 misc/tune2fs.c:683
 #, c-format
 msgid "done\n"
 msgstr "hotovo\n"
 
-#: misc/mke2fs.c:2534
+#: misc/mke2fs.c:2540
 #, c-format
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "V režimu jen-superdata bude vynechána tvorba žurnálu\n"
 
-#: misc/mke2fs.c:2545
+#: misc/mke2fs.c:2551
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Vytváří se žurnál (%'u bloků): "
 
-#: misc/mke2fs.c:2553
+#: misc/mke2fs.c:2559
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -4857,7 +4757,7 @@ msgstr ""
 "\n"
 "\tpři pokusu vytvořit žurnál"
 
-#: misc/mke2fs.c:2564 misc/tune2fs.c:446
+#: misc/mke2fs.c:2570 misc/tune2fs.c:446
 #, c-format
 msgid ""
 "\n"
@@ -4867,19 +4767,17 @@ msgstr ""
 "Chyba při zapínání ochrany proti násobnému připojení."
 
 # TODO: Pluralize
-#: misc/mke2fs.c:2569
+#: misc/mke2fs.c:2575
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
-msgstr ""
-"Ochrana proti násobnému připojení je zapnuta s aktualizačním intervalem %d "
-"sekund.\n"
+msgstr "Ochrana proti násobnému připojení je zapnuta s aktualizačním intervalem %d sekund.\n"
 
-#: misc/mke2fs.c:2582
+#: misc/mke2fs.c:2588
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Zapisuji superbloky a účtovací informace systému souborů: "
 
-#: misc/mke2fs.c:2589
+#: misc/mke2fs.c:2595
 #, c-format
 msgid ""
 "\n"
@@ -4888,7 +4786,7 @@ msgstr ""
 "\n"
 "Varování, měl jsem problémy při zápisu superbloků."
 
-#: misc/mke2fs.c:2591
+#: misc/mke2fs.c:2597
 #, c-format
 msgid ""
 "done\n"
@@ -4946,8 +4844,7 @@ msgstr "Spusťte prosím na tomto systému souborů e2fsck.\n"
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
-"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p "
-"mmp_update_interval]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p mmp_update_interval]\n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
@@ -5046,9 +4943,7 @@ msgstr ""
 #: misc/tune2fs.c:456
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
-msgstr ""
-"Ochrana před násobným připojením byla zapnuta s intervalem aktualizace "
-"%d s.\n"
+msgstr "Ochrana před násobným připojením byla zapnuta s intervalem aktualizace %d s.\n"
 
 #: misc/tune2fs.c:465
 msgid ""
@@ -5065,8 +4960,7 @@ msgstr "Chyba při čtení bitmap\n"
 #: misc/tune2fs.c:482
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
-msgstr ""
-"Magické číslo v bloku MMP se neshoduje. Očekáváno: %x, skutečnost: %x\n"
+msgstr "Magické číslo v bloku MMP se neshoduje. Očekáváno: %x, skutečnost: %x\n"
 
 #: misc/tune2fs.c:487
 msgid "while reading MMP block."
@@ -5131,17 +5025,16 @@ msgstr ""
 "\n"
 "\tpři pokusu vytvořit soubor žurnálu"
 
-#: misc/tune2fs.c:763
+#: misc/tune2fs.c:754
 msgid "Couldn't allocate memory to parse quota options!\n"
 msgstr "Nemohu alokovat paměť pro zpracování přepínačů kvóty!\n"
 
-#: misc/tune2fs.c:785
+#: misc/tune2fs.c:776
 msgid ""
 "\n"
 "Bad quota options specified.\n"
 "\n"
-"Following valid quota options are available (pass by separating with "
-"comma):\n"
+"Following valid quota options are available (pass by separating with comma):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
@@ -5156,105 +5049,98 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/tune2fs.c:846
+#: misc/tune2fs.c:837
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Nemohu zpracovat určení data/času: %s"
 
-#: misc/tune2fs.c:870 misc/tune2fs.c:883
+#: misc/tune2fs.c:861 misc/tune2fs.c:874
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "špatný počet připojení - %s"
 
-#: misc/tune2fs.c:899
+#: misc/tune2fs.c:890
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "špatné chování při chybách - %s"
 
-#: misc/tune2fs.c:926
+#: misc/tune2fs.c:917
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "špatné gid/jméno skupiny - %s"
 
-#: misc/tune2fs.c:959
+#: misc/tune2fs.c:950
 #, c-format
 msgid "bad interval - %s"
 msgstr "Špatný interval - %s"
 
-#: misc/tune2fs.c:988
+#: misc/tune2fs.c:979
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "špatný podíl rezervovaných bloků - %s"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:994
 msgid "-o may only be specified once"
 msgstr "-o může být zadáno jen jednou"
 
-#: misc/tune2fs.c:1012
+#: misc/tune2fs.c:1003
 msgid "-O may only be specified once"
 msgstr "-O může být zadáno jen jednou"
 
-#: misc/tune2fs.c:1027
+#: misc/tune2fs.c:1018
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "špatný počet rezervovaných bloků - %s"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1047
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "špatné uid/jméno uživatele - %s"
 
-#: misc/tune2fs.c:1073
+#: misc/tune2fs.c:1064
 #, c-format
 msgid "bad inode size - %s"
 msgstr "špatná velikost iuzlu – %s"
 
-#: misc/tune2fs.c:1080
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Velikost iuzlu musí být mocnina dvou – %s"
 
-#: misc/tune2fs.c:1174
+#: misc/tune2fs.c:1165
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "interval_aktualizace_mmp je příliš velký: %lu\n"
 
-#: misc/tune2fs.c:1179
+#: misc/tune2fs.c:1170
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
-msgid_plural ""
-"Setting multiple mount protection update interval to %lu seconds\n"
-msgstr[0] ""
-"Nastavuje se interval aktualizace ochrany proti násobnému připojení na %'lu "
-"sekundu\n"
-msgstr[1] ""
-"Nastavuje se interval aktualizace ochrany proti násobnému připojení na %'lu "
-"sekundy\n"
-msgstr[2] ""
-"Nastavuje se interval aktualizace ochrany proti násobnému připojení na %'lu "
-"sekund\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Nastavuje se interval aktualizace ochrany proti násobnému připojení na %'lu sekundu\n"
+msgstr[1] "Nastavuje se interval aktualizace ochrany proti násobnému připojení na %'lu sekundy\n"
+msgstr[2] "Nastavuje se interval aktualizace ochrany proti násobnému připojení na %'lu sekund\n"
 
-#: misc/tune2fs.c:1202
+#: misc/tune2fs.c:1193
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Neplatný kroku (stride) RAIDu: %s\n"
 
-#: misc/tune2fs.c:1217
+#: misc/tune2fs.c:1208
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Neplatná šířka pruhu RAIDu (stripe-width): %s\n"
 
-#: misc/tune2fs.c:1232
+#: misc/tune2fs.c:1223
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Neplatný hashovací algoritmus: %s\n"
 
-#: misc/tune2fs.c:1238
+#: misc/tune2fs.c:1229
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Implicitní hashovací algoritmus se nastavuje na %s (%d)\n"
 
-#: misc/tune2fs.c:1257
+#: misc/tune2fs.c:1248
 #, c-format
 msgid ""
 "\n"
@@ -5287,31 +5173,31 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:1723
+#: misc/tune2fs.c:1714
 msgid "Failed to read inode bitmap\n"
 msgstr "Čtení bitmapy iuzlů selhalo.\n"
 
-#: misc/tune2fs.c:1728
+#: misc/tune2fs.c:1719
 msgid "Failed to read block bitmap\n"
 msgstr "Čtení bitmapy bloků selhalo\n"
 
-#: misc/tune2fs.c:1745 resize/resize2fs.c:784
+#: misc/tune2fs.c:1736 resize/resize2fs.c:802
 msgid "blocks to be moved"
 msgstr "bloky pro přesun"
 
-#: misc/tune2fs.c:1748
+#: misc/tune2fs.c:1739
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr "Během zvětšování iuzlu selhala alokace bitmapy bloků\n"
 
-#: misc/tune2fs.c:1754
+#: misc/tune2fs.c:1745
 msgid "Not enough space to increase inode size \n"
 msgstr "Nedostatek místa pro zvětšení iuzlu\n"
 
-#: misc/tune2fs.c:1759
+#: misc/tune2fs.c:1750
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "Během změny velikosti iuzlu selhala realokace bloků\n"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1782
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -5319,16 +5205,16 @@ msgstr ""
 "Chyba při měnění velikost iuzlu.\n"
 "Spusťte e2undo, abyste vrátili změny provedené na systému souborů.\n"
 
-#: misc/tune2fs.c:1818
+#: misc/tune2fs.c:1809
 msgid "Couldn't allocate memory for tdb filename\n"
 msgstr "Nemohu alokovat paměť pro název souboru TDB\n"
 
-#: misc/tune2fs.c:1840
+#: misc/tune2fs.c:1831
 #, c-format
 msgid "while trying to delete %s"
 msgstr "při pokusu smazat %s"
 
-#: misc/tune2fs.c:1850
+#: misc/tune2fs.c:1841
 #, c-format
 msgid ""
 "To undo the tune2fs operation please run the command\n"
@@ -5339,7 +5225,7 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/tune2fs.c:1919
+#: misc/tune2fs.c:1910
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -5348,62 +5234,62 @@ msgstr ""
 "Magické číslo bloku MMP je chybné. Můžete jej zkusit opravit pomocí:\n"
 "„e2fsck -f %s“\n"
 
-#: misc/tune2fs.c:1937
+#: misc/tune2fs.c:1928
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Velikost iuzlu již je %lu\n"
 
-#: misc/tune2fs.c:1943
+#: misc/tune2fs.c:1934
 #, c-format
 msgid "Shrinking the inode size is not supported\n"
 msgstr "Zmenšování velikosti iuzlu není podporováno\n"
 
-#: misc/tune2fs.c:1990
+#: misc/tune2fs.c:1981
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Nastavuje se maximální počet připojení na %d\n"
 
-#: misc/tune2fs.c:1996
+#: misc/tune2fs.c:1987
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Nastavuje se aktuální počet připojení na %d\n"
 
-#: misc/tune2fs.c:2001
+#: misc/tune2fs.c:1992
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Nastavuje se chování při chybách na %d\n"
 
-#: misc/tune2fs.c:2006
+#: misc/tune2fs.c:1997
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Nastavuje se GID rezervovaných bloků na %lu\n"
 
-#: misc/tune2fs.c:2011
+#: misc/tune2fs.c:2002
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "interval mezi kontrolami je příliš dlouhý (%'lu)"
 
-#: misc/tune2fs.c:2018
+#: misc/tune2fs.c:2009
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Interval mezi kontrolami se nastavuje na %'lu sekund\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2016
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Procento rezervovaných bloků se nastavuje na %g %% (%'llu bloků)\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2022
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "počet rezervovaných bloků je příliš velký (%'llu)"
 
-#: misc/tune2fs.c:2038
+#: misc/tune2fs.c:2029
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Počet rezervovaných bloků se nastavuje na %'llu\n"
 
-#: misc/tune2fs.c:2044
+#: misc/tune2fs.c:2035
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -5411,7 +5297,7 @@ msgstr ""
 "\n"
 "Systém souborů již má řídké superbloky.\n"
 
-#: misc/tune2fs.c:2051
+#: misc/tune2fs.c:2042
 #, c-format
 msgid ""
 "\n"
@@ -5420,7 +5306,7 @@ msgstr ""
 "\n"
 "Příznak řídkých superbloků nastaven.  %s"
 
-#: misc/tune2fs.c:2056
+#: misc/tune2fs.c:2047
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -5428,63 +5314,61 @@ msgstr ""
 "\n"
 "Odstranění superpříznaku řídkosti není podporováno.\n"
 
-#: misc/tune2fs.c:2064
+#: misc/tune2fs.c:2055
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Nastavuje se čas poslední kontroly systému souborů na %s\n"
 
-#: misc/tune2fs.c:2070
+#: misc/tune2fs.c:2061
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Nastavuje se UID rezervovaných bloků na %lu\n"
 
-#: misc/tune2fs.c:2102
+#: misc/tune2fs.c:2093
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "Chybné použití clear_mmp. Je třeba jej použít s -f\n"
 
-#: misc/tune2fs.c:2120
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:2111
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr "Vlastnost kvóty smí být změněna, jen když je systém souborů odpojen.\n"
 
-#: misc/tune2fs.c:2153
+#: misc/tune2fs.c:2144
 msgid "Invalid UUID format\n"
 msgstr "Neplatný formát UUID\n"
 
-#: misc/tune2fs.c:2166
+#: misc/tune2fs.c:2157
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr "Velikost iuzlu smí být změněna, jen když je systém souborů odpojen.\n"
 
-#: misc/tune2fs.c:2174
+#: misc/tune2fs.c:2165
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
-"Na souborových systémech se zapnutou vlastností flex_bg není změna "
-"velikosti\n"
+"Na souborových systémech se zapnutou vlastností flex_bg není změna velikosti\n"
 "iuzlu podporována.\n"
 
-#: misc/tune2fs.c:2187
+#: misc/tune2fs.c:2178
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Velikost iuzlu se nastavuje na %lu\n"
 
-#: misc/tune2fs.c:2190
+#: misc/tune2fs.c:2181
 #, c-format
 msgid "Failed to change inode size\n"
 msgstr "Změna velikosti iuzlu selhala.\n"
 
-#: misc/tune2fs.c:2201
+#: misc/tune2fs.c:2192
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Velikost kroku (stride) se nastavuje na %d\n"
 
-#: misc/tune2fs.c:2206
+#: misc/tune2fs.c:2197
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Šířka pruhu (stripe width) se nastavuje na %d\n"
 
-#: misc/tune2fs.c:2213
+#: misc/tune2fs.c:2204
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Implicitní rozšířené přepínače při přípojení se nastavují na „%s“\n"
@@ -5604,8 +5488,7 @@ msgid ""
 "%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
 msgstr ""
 "Tento systém souborů bude automaticky kontrolován každých %d připojení nebo\n"
-"%g dní, podle toho, co nastane dříve. Pro změnu použijte tune2fs -c nebo -"
-"i.\n"
+"%g dní, podle toho, co nastane dříve. Pro změnu použijte tune2fs -c nebo -i.\n"
 
 #: misc/uuidd.c:48
 #, c-format
@@ -5801,16 +5684,7 @@ msgstr "při otevírání %s"
 msgid "while getting stat information for %s"
 msgstr "při zjišťování stat informací o %s"
 
-#: resize/main.c:331
-#, c-format
-msgid ""
-"%s: The combination of flex_bg and\n"
-"\t!resize_inode features is not supported by resize2fs.\n"
-msgstr ""
-"%s: Kombinace vlastností flex_bg a\n"
-"\t!resize_inode není podporována nástrojem resize2fs.\n"
-
-#: resize/main.c:344 resize/main.c:452
+#: resize/main.c:325 resize/main.c:437
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -5819,30 +5693,30 @@ msgstr ""
 "Spusťte prosím nejdříve „e2fsck -f %s“.\n"
 "\n"
 
-#: resize/main.c:348
+#: resize/main.c:329
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Odhadovaná minimální velikost systému souborů: %llu\n"
 
-#: resize/main.c:384
+#: resize/main.c:365
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Chybná nová velikost: %s\n"
 
-#: resize/main.c:392
+#: resize/main.c:381
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Nová velikost je příliš, aby byla vyjádřena ve 32 bitech\n"
 
-#: resize/main.c:404
+#: resize/main.c:389
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Nová velikost je menší než minimum (%llu)\n"
 
-#: resize/main.c:410
+#: resize/main.c:395
 msgid "Invalid stride length"
 msgstr "Neplatná délka kroku"
 
-#: resize/main.c:434
+#: resize/main.c:419
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -5853,7 +5727,7 @@ msgstr ""
 "Požadovali jste novou velikost %'llu bloků.\n"
 "\n"
 
-#: resize/main.c:441
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The filesystem is already %llu blocks long.  Nothing to do!\n"
@@ -5862,17 +5736,26 @@ msgstr ""
 "Souborový systém již je dlouhý %'llu bloků. Není co dělat!\n"
 "\n"
 
-#: resize/main.c:456
+#: resize/main.c:457
+#, c-format
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Kombinace vlastností flex_bg a\n"
+"\t!resize_inode není podporována nástrojem resize2fs.\n"
+
+#: resize/main.c:463
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr "Velikost systému souborů %s se mění na %'llu (%dk) bloků.\n"
 
-#: resize/main.c:465
+#: resize/main.c:472
 #, c-format
 msgid "while trying to resize %s"
 msgstr "při pokusu změnit velikost %s"
 
-#: resize/main.c:468
+#: resize/main.c:475
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -5881,7 +5764,7 @@ msgstr ""
 "Po přerušené změně velikosti, prosím, opravte souborový systém pomocí\n"
 "„e2fsck -fy %s“\n"
 
-#: resize/main.c:474
+#: resize/main.c:481
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu blocks long.\n"
@@ -5890,7 +5773,7 @@ msgstr ""
 "Systém souborů na %s je nyní %'llu bloků dlouhý.\n"
 "\n"
 
-#: resize/main.c:489
+#: resize/main.c:496
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "při pokusu zkrátit %s"
@@ -5906,77 +5789,75 @@ msgstr ""
 msgid "On-line shrinking not supported"
 msgstr "Zmenšování za běhu není podporováno"
 
-#: resize/online.c:63
+#: resize/online.c:69
 msgid "Filesystem does not support online resizing"
 msgstr "Systém souborů nepodporuje změnu velikosti za běhu"
 
-#: resize/online.c:70
+#: resize/online.c:78
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr "Nedostatek rezervovaných GDT bloků pro změnu velikosti za běhu"
+
+#: resize/online.c:85
+msgid "Kernel does not support resizing a file system this large"
+msgstr "Jádro nepodporuje změnu velikosti souborového systému na tuto velikost"
+
+#: resize/online.c:93
 #, c-format
 msgid "while trying to open mountpoint %s"
 msgstr "při pokusu otevřít přípojný bod %s"
 
-#: resize/online.c:92 resize/online.c:116
+#: resize/online.c:115 resize/online.c:132
 msgid "Permission denied to resize filesystem"
 msgstr "Povolení ke změně velikosti systému souborů zamítnuto"
 
-#: resize/online.c:95 resize/online.c:122
+#: resize/online.c:118 resize/online.c:138
 msgid "While checking for on-line resizing support"
 msgstr "Při zjišťování podpory změny velikosti za běhu"
 
-#: resize/online.c:107
-msgid "Kernel does not support resizing a file system this large"
-msgstr "Jádro nepodporuje změnu velikosti souborového systému na tuto velikost"
-
-#: resize/online.c:119
+#: resize/online.c:135
 msgid "Kernel does not support online resizing"
 msgstr "Jádro nepodporuje změnu velikost za běhu"
 
-#: resize/online.c:152
+#: resize/online.c:168
 #, c-format
 msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
 msgstr "Mění se velikosti za běhu %s na %'llu (%dk) bloků.\n"
 
-#: resize/online.c:162
+#: resize/online.c:178
 msgid "While trying to extend the last group"
 msgstr "Při pokusu rozšířit poslední skupinu"
 
-#: resize/online.c:216
+#: resize/online.c:232
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Při pokusu přidat skupinu č. %d"
 
-#: resize/online.c:227
+#: resize/online.c:243
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"Systém souborů v %s je připojen do %s a změna velikost za běhu není na tomto "
-"systému podporována.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Systém souborů v %s je připojen do %s a změna velikost za běhu není na tomto systému podporována.\n"
 
-#: resize/resize2fs.c:348
+#: resize/resize2fs.c:346
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "iuzlů (%'llu) musí být méně než %'u"
 
-#: resize/resize2fs.c:576
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "rezervované bloky"
 
-#: resize/resize2fs.c:789
+#: resize/resize2fs.c:807
 msgid "meta-data blocks"
 msgstr "bloky meta-dat"
 
-#: resize/resize2fs.c:1735
+#: resize/resize2fs.c:1753
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
-msgstr ""
-"Toto by se nikdy nemělo stát: iuzly pro změnu velikosti jsou poškozeny!\n"
+msgstr "Toto by se nikdy nemělo stát: iuzly pro změnu velikosti jsou poškozeny!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.42.4"
-msgstr "Knihovna EXT2FS verze 1.42.2"
+msgid "EXT2FS Library version 1.42.6"
+msgstr "Knihovna EXT2FS verze 1.42.6"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -6521,14 +6402,11 @@ msgstr "I/O Channel nepodporuje 64bitová čísla bloků"
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"Kvůli chybějícímu souboru mtab nelze zjistit, zda-li je systém souborů "
-"připojený"
+msgstr "Kvůli chybějícímu souboru mtab nelze zjistit, zda-li je systém souborů připojený"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
-msgstr ""
-"Souborový systém je příliš velký na to, aby se použily zastaralé bitmapy"
+msgstr "Souborový systém je příliš velký na to, aby se použily zastaralé bitmapy"
 
 #: lib/ext2fs/ext2_err.c:149
 msgid "MMP: invalid magic number"
@@ -6686,13 +6564,10 @@ msgstr "Chybné magické číslo v profile_file_data_t"
 #~ msgstr "%s je připojen. "
 
 #~ msgid "@g %g @b @B uninitialized but @i @B in use.\n"
-#~ msgstr ""
-#~ "Bitmapa bloků skupiny %g neinicializována, ačkoliv bitmapa iuzlů je "
-#~ "použita.\n"
+#~ msgstr "Bitmapa bloků skupiny %g neinicializována, ačkoliv bitmapa iuzlů je použita.\n"
 
 #~ msgid "@i %i should not have EOFBLOCKS_FL set (size %Is, lblk %r)\n"
-#~ msgstr ""
-#~ "Iuzel %i by neměl mít nastaveno EOFBLOCKS_FL (velikost %Is, lblk %r)\n"
+#~ msgstr "Iuzel %i by neměl mít nastaveno EOFBLOCKS_FL (velikost %Is, lblk %r)\n"
 
 #~ msgid "Couldn't determine journal size"
 #~ msgstr "Velikost žurnálu nelze určit"
@@ -6759,9 +6634,7 @@ msgstr "Chybné magické číslo v profile_file_data_t"
 #~ msgstr "ioctl BLKGETSIZE"
 
 #~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-#~ msgstr ""
-#~ "Rozšířený atribut v iuzlu %i má hash (%N), který není platný (musí být "
-#~ "0)\n"
+#~ msgstr "Rozšířený atribut v iuzlu %i má hash (%N), který není platný (musí být 0)\n"
 
 #~ msgid "while calling ext2fs_block_iterate"
 #~ msgstr "při volání ext2fs_block_iterate"
@@ -6792,8 +6665,7 @@ msgstr "Chybné magické číslo v profile_file_data_t"
 #~ msgstr "Přehození bajtů"
 
 #~ msgid "Byte-swapping filesystems not compiled in this version of e2fsck\n"
-#~ msgstr ""
-#~ "Přehození bajtů systémů souborů není zabudováno v této verzi e2fsck\n"
+#~ msgstr "Přehození bajtů systémů souborů není zabudováno v této verzi e2fsck\n"
 
 #~ msgid "Incompatible options not allowed when byte-swapping.\n"
 #~ msgstr "Při přehození bajtů nejsou dovoleny nekompatibilní přepínače.\n"
@@ -6811,8 +6683,7 @@ msgstr "Chybné magické číslo v profile_file_data_t"
 #~ "Filesystem too large.  No more than 2**31-1 blocks\n"
 #~ "\t (8TB using a blocksize of 4k) are currently supported."
 #~ msgstr ""
-#~ "Souborový systém je příliš velký. V současnosti není podporováno více "
-#~ "jak\n"
+#~ "Souborový systém je příliš velký. V současnosti není podporováno více jak\n"
 #~ "\t2**31-1 bloků (8 TB při 4k blocích)."
 
 #~ msgid ""
@@ -6822,8 +6693,7 @@ msgstr "Chybné magické číslo v profile_file_data_t"
 #~ "\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Varování: některá jádra z řady 2.4 nepodporují na ext3 bloky větší než "
-#~ "4096\n"
+#~ "Varování: některá jádra z řady 2.4 nepodporují na ext3 bloky větší než 4096\n"
 #~ "\tJe-li to váš případ, použijte „-b 4096“.\n"
 #~ "\n"
 
@@ -6872,8 +6742,7 @@ msgstr "Chybné magické číslo v profile_file_data_t"
 #~ msgstr "Duplikovaný/špatný blok(y) v inode %i:"
 
 #~ msgid "Forcibly clearing HTREE flag on @i %d (%q).  (Beta test code)\n"
-#~ msgstr ""
-#~ "Vynuceně mažu příznak HTREE v inode %d (%q). (Kód v beta testování)\n"
+#~ msgstr "Vynuceně mažu příznak HTREE v inode %d (%q). (Kód v beta testování)\n"
 
 #~ msgid ""
 #~ "%8d blocks used (%d%%)\n"
index 421c729..f5e0bda 100644 (file)
Binary files a/po/de.gmo and b/po/de.gmo differ
index e66a282..0e7b39e 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -4,7 +4,7 @@
 #
 # Olaf Klemke <olke@users.sourceforge.net>,2002.
 # Marc Langer <marc@marclanger.de>,2003.
-# Philipp Thomas <pth@suse.de>, 2007, 2008, 2009, 2010, 2011, 2012.
+# Philipp Thomas <pth@suse.de>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.42.2\n"
+"Project-Id-Version: e2fsprogs-1.42.6\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2012-06-12 14:40-0400\n"
-"PO-Revision-Date: 2012-04-13 12:41+0200\n"
+"POT-Creation-Date: 2012-09-21 12:16-0400\n"
+"PO-Revision-Date: 2013-01-27 00:23+0100\n"
 "Last-Translator: Philipp Thomas <pth@suse.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -78,10 +78,10 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:176
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:177
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
-msgstr "Bad block %u außerhalb des gültigen Bereichs; ignoriert.\n"
+msgstr "„Bad block“ %u außerhalb des gültigen Bereichs; ignoriert.\n"
 
 #: e2fsck/badblocks.c:46
 msgid "while sanity checking the bad blocks inode"
@@ -92,10 +92,10 @@ msgid "while reading the bad blocks inode"
 msgstr "während des Lesens des „Bad Block“-Inodes"
 
 #: e2fsck/badblocks.c:72 e2fsck/iscan.c:110 e2fsck/scantest.c:107
-#: e2fsck/unix.c:1298 e2fsck/unix.c:1386 misc/badblocks.c:1214
+#: e2fsck/unix.c:1334 e2fsck/unix.c:1422 misc/badblocks.c:1214
 #: misc/badblocks.c:1222 misc/badblocks.c:1236 misc/badblocks.c:1248
 #: misc/dumpe2fs.c:588 misc/e2image.c:1189 misc/e2image.c:1307
-#: misc/e2image.c:1320 misc/mke2fs.c:192 misc/tune2fs.c:1907 resize/main.c:303
+#: misc/e2image.c:1320 misc/mke2fs.c:193 misc/tune2fs.c:1898 resize/main.c:303
 #, c-format
 msgid "while trying to open %s"
 msgstr "beim Versuch, %s zu öffnen"
@@ -105,7 +105,7 @@ msgstr "beim Versuch, %s zu öffnen"
 msgid "while trying popen '%s'"
 msgstr "beim Versuch, „%s“ mittels „popen“ zu öffnen"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:199
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:200
 msgid "while reading in list of bad blocks from file"
 msgstr "beim Lesen der „Bad Block“-Liste aus der Datei"
 
@@ -116,9 +116,7 @@ msgstr "beim Updaten des „Bad Block“-Inodes"
 #: e2fsck/badblocks.c:131
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Warnung: Nicht zulässiger Block %u im „Bad Blocks“-Inode gefunden! "
-"Bereinigt.\n"
+msgstr "Warnung: Nicht zulässiger Block %u im „Bad Blocks“-Inode gefunden! Bereinigt.\n"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -174,7 +172,7 @@ msgstr "Blockanzahl nicht zulässig!\n"
 #: e2fsck/extend.c:50
 #, c-format
 msgid "Couldn't allocate block buffer (size=%d)\n"
-msgstr "Konnte keinen Blockpuffer (Größe=%d) reservieren.\n"
+msgstr "Es konnte kein Blockpuffer (Größe=%d) reserviert werden\n"
 
 #: e2fsck/flushb.c:35
 #, c-format
@@ -191,12 +189,12 @@ msgstr "BLKFLSBUF ioctl nicht unterstützt!  Kann Puffer nicht leeren.\n"
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Aufruf: %s [-F] [-I inode_buffer_blocks] Gerät\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:930
+#: e2fsck/iscan.c:81 e2fsck/unix.c:963
 #, c-format
 msgid "while opening %s for flushing"
-msgstr "beim Öffnen von %s für die Puffer-Leerung."
+msgstr "beim Öffnen von %s für die Puffer-Leerung"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:936 resize/main.c:276
+#: e2fsck/iscan.c:86 e2fsck/unix.c:969 resize/main.c:276
 #, c-format
 msgid "while trying to flush %s"
 msgstr "während des Rückschreibeversuches auf %s"
@@ -245,11 +243,11 @@ msgstr "beim Versuch, %s erneut zu öffnen"
 
 #: e2fsck/message.c:113
 msgid "aextended attribute"
-msgstr "aerweiterte Eigenschaft"
+msgstr "aerweiterte Attribute"
 
 #: e2fsck/message.c:114
 msgid "Aerror allocating"
-msgstr "AFehler beim Zuweisen"
+msgstr "AFehler beim Reservieren von Platz für"
 
 #: e2fsck/message.c:115
 msgid "bblock"
@@ -265,7 +263,7 @@ msgstr "ckomprimieren"
 
 #: e2fsck/message.c:118
 msgid "Cconflicts with some other fs @b"
-msgstr "CKonflikte mit anderen Dateisystemen @b"
+msgstr "CKonflikte mit einem anderen Dateisystemenblock"
 
 #: e2fsck/message.c:119
 msgid "iinode"
@@ -309,7 +307,7 @@ msgstr "gGruppe"
 
 #: e2fsck/message.c:129
 msgid "hHTREE @d @i"
-msgstr "hHTREE @d @i"
+msgstr "hHTREE @dinode"
 
 #: e2fsck/message.c:130
 msgid "llost+found"
@@ -317,7 +315,7 @@ msgstr "llost+found"
 
 #: e2fsck/message.c:131
 msgid "Lis a link"
-msgstr "List ein Link"
+msgstr "List eine Verknüpfung"
 
 #: e2fsck/message.c:132
 msgid "mmultiply-claimed"
@@ -365,7 +363,7 @@ msgstr "xErweiterung"
 
 #: e2fsck/message.c:143
 msgid "zzero-length"
-msgstr "zNull-Länge"
+msgstr "zmit Länge Null"
 
 #: e2fsck/message.c:154
 msgid "<The NULL inode>"
@@ -467,7 +465,7 @@ msgstr "mehrfach beanspruchte Inode-Liste"
 #: e2fsck/pass1b.c:610 e2fsck/pass1b.c:729
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
-msgstr "interner Fehler; dup_blk für %llu wurde nicht gefunden\n"
+msgstr "interner Fehler: dup_blk für %llu wurde nicht gefunden\n"
 
 #: e2fsck/pass1b.c:820
 msgid "returned from clone_file_block"
@@ -534,7 +532,7 @@ msgstr "i„magic inode“-Liste"
 
 #: e2fsck/pass1.c:1417
 msgid "multiply claimed block map"
-msgstr "Den Eintrag in der Liste belegter Blöcke verdoppeln"
+msgstr "mehrfach referenzierte Blockliste"
 
 #: e2fsck/pass1.c:1518
 msgid "ext attr block map"
@@ -547,11 +545,11 @@ msgstr "%6lu(%c): erwartete %6lu erhielt phys %6lu (Blockanzahl %lld)\n"
 
 #: e2fsck/pass1.c:2627
 msgid "block bitmap"
-msgstr "Block Bitmap"
+msgstr "Block-Bitmap"
 
 #: e2fsck/pass1.c:2633
 msgid "inode bitmap"
-msgstr "Inode Bitmap"
+msgstr "Inode-Bitmap"
 
 #: e2fsck/pass1.c:2639
 msgid "inode table"
@@ -563,7 +561,7 @@ msgstr "Durchgang 2"
 
 #: e2fsck/pass2.c:805
 msgid "Can not continue."
-msgstr "Fortsetzung nicht möglich."
+msgstr "das Programm kann nicht fortfahren."
 
 #: e2fsck/pass3.c:77
 msgid "inode done bitmap"
@@ -639,7 +637,7 @@ msgstr "Abbrechen"
 
 #: e2fsck/problem.c:63
 msgid "Split"
-msgstr "Aufsplitten"
+msgstr "Aufteilen"
 
 #: e2fsck/problem.c:64
 msgid "Continue"
@@ -647,7 +645,7 @@ msgstr "Fortsetzen"
 
 #: e2fsck/problem.c:65
 msgid "Clone multiply-claimed blocks"
-msgstr "multiply claimed block map"
+msgstr "mehrfach referenzierte BLöcke werden geklont"
 
 #: e2fsck/problem.c:66
 msgid "Delete file"
@@ -659,7 +657,7 @@ msgstr "Ausgaben unterdrücken"
 
 #: e2fsck/problem.c:68
 msgid "Unlink"
-msgstr "Unlink"
+msgstr "Trennen"
 
 #: e2fsck/problem.c:69
 msgid "Clear HTree index"
@@ -719,7 +717,7 @@ msgstr "ABGEBROCHEN"
 
 #: e2fsck/problem.c:91
 msgid "SPLIT"
-msgstr "ABGESPALTET"
+msgstr "ABGESPALTEn"
 
 #: e2fsck/problem.c:92
 msgid "CONTINUING"
@@ -727,7 +725,7 @@ msgstr "SETZE FORT"
 
 #: e2fsck/problem.c:93
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
-msgstr "DOPPELTE/DEFEKTE BLÖCKE DUPLIZIERT"
+msgstr "MEHRFACH REFERENZIERTE BLÖCKE GEKLONT"
 
 #: e2fsck/problem.c:94
 msgid "FILE DELETED"
@@ -743,21 +741,21 @@ msgstr "GETRENNT"
 
 #: e2fsck/problem.c:97
 msgid "HTREE INDEX CLEARED"
-msgstr "HTREE INDEX BEREINIGT"
+msgstr "HTREE-INDEX BEREINIGT"
 
 #: e2fsck/problem.c:98
 msgid "WILL RECREATE"
-msgstr "ANGELEGT"
+msgstr "WIRD WIEDER AUFGEBAUT"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:107
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "@b @B für @g %g ist nicht in @g.  (@b %b)\n"
+msgstr "@b @B für @g %g ist nicht in @g. (@b %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:111
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "@i @B für @g %g ist nicht in @g.  (@b %b)\n"
+msgstr "@i @B für @g %g ist nicht in @g. (@b %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
@@ -766,7 +764,7 @@ msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
 msgstr ""
-"@i Tabelle für @g %g ist nicht in @g.  (@b %b)\n"
+"@i Tabelle für @g %g ist nicht in @g. (@b %b)\n"
 "WARNUNG: GROSSER DATENVERLUST IST MÖGLICH.\n"
 
 #. @-expanded: \n
@@ -788,9 +786,9 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"@S ist unlesbar bzw. beschreibt kein gültiges ext2\n"
-"@f.  Wenn @v gültig ist und ein ext2\n"
-"@f (kein swap oder ufs usw.) enthält,  dann ist der @S\n"
+"Der @S ist unlesbar bzw. beschreibt kein gültiges ext2\n"
+"@f. Wenn @v gültig ist und ein ext2\n"
+"@f (kein swap oder ufs usw.) enthält, dann ist der @S\n"
 "beschädigt, und sie könnten e2fsck mit einem anderen @S:\n"
 "    e2fsck -b %S <@v>\n"
 "\n"
@@ -804,7 +802,7 @@ msgid ""
 "The physical size of the @v is %c @bs\n"
 "Either the @S or the partition table is likely to be corrupt!\n"
 msgstr ""
-"Die @f Größe ( laut @S) ist %b @bs\n"
+"Die @f-Größe ( laut @S) ist %b @bs\n"
 "Die physikalische Größe von @v ist %c @bs\n"
 "Entweder der @S oder die Partionstabelle ist beschädigt!\n"
 
@@ -817,19 +815,18 @@ msgid ""
 "This version of e2fsck does not support fragment sizes different\n"
 "from the @b size.\n"
 msgstr ""
-"@S @b_size = %b, fragsize = %c.\n"
-"Diese Version von e2fsck unterstützt keine von @b-Größen verschiedene "
-"Fragmentgrößen.\n"
+"@S-@b_size = %b, fragsize = %c.\n"
+"Diese Version von e2fsck unterstützt keine von @b-Größen verschiedene Fragmentgrößen.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
 #: e2fsck/problem.c:145
 msgid "@S @bs_per_group = %b, should have been %c\n"
-msgstr "@S @bs_per_group = %b, sollte %c sein.\n"
+msgstr "@bs_per_group im @S = %b, sollte %c sein\n"
 
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
 #: e2fsck/problem.c:150
 msgid "@S first_data_@b = %b, should have been %c\n"
-msgstr "@S first_data_@b = %b, sollte %c haben.\n"
+msgstr "first_data_@b im @S = %b, sollte %c sein\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
@@ -838,7 +835,7 @@ msgid ""
 "@f did not have a UUID; generating one.\n"
 "\n"
 msgstr ""
-"@f hat keinen UUID ; generiere einen.\n"
+"@f hat keinen UUID; es wird eine generiert.\n"
 "\n"
 
 #: e2fsck/problem.c:160
@@ -855,20 +852,20 @@ msgstr ""
 "neu geordnet werden müssen, oder ein Teil der Inode-Tabelle\n"
 "verschoben werden muss, könnte es helfen, e2fsck erst einmal\n"
 "mit der Option „-b %S“ zu starten. Das Problem könnte\n"
-"im primären Blockgruppenbezeichner liegen, und seine\n"
+"im primären Blockgruppenbezeichner liegen und seine\n"
 "Sicherungskopie in Ordnung sein.\n"
 "\n"
 
 #. @-expanded: Corruption found in superblock.  (%s = %N).\n
 #: e2fsck/problem.c:169
 msgid "Corruption found in @S.  (%s = %N).\n"
-msgstr "Beschädigung gefunden in @S.  (%s = %N).\n"
+msgstr "Beschädigung gefunden in @S. (%s = %N).\n"
 
 #. @-expanded: Error determining size of the physical device: %m\n
 #: e2fsck/problem.c:174
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
-msgstr "Fehler bei der Feststellung der Größe des physikalischen @v: %m\n"
+msgstr "Fehler bei der Feststellung der Größe des physischen @v: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
 #: e2fsck/problem.c:179
@@ -877,7 +874,7 @@ msgstr "@i-Anzahl in @S ist %i, sollte %j sein.\n"
 
 #: e2fsck/problem.c:183
 msgid "The Hurd does not support the filetype feature.\n"
-msgstr "Hurd unterstützt das Dateityp-Feature nicht.\n"
+msgstr "Hurd unterstützt keine Dateitypen.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:188
@@ -888,12 +885,12 @@ msgstr "@S hat ein defektes @j (@i %i).\n"
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:193
 msgid "External @j has multiple @f users (unsupported).\n"
-msgstr "Externes @j hat mehrere @f Nutzer (nicht unterstützt).\n"
+msgstr "Externes @j hat mehrere @f-Nutzer (nicht unterstützt).\n"
 
 #. @-expanded: Can't find external journal\n
 #: e2fsck/problem.c:198
 msgid "Can't find external @j\n"
-msgstr "Kann kein externes @j finden.\n"
+msgstr "Kann kein externes @j finden\n"
 
 #. @-expanded: External journal has bad superblock\n
 #: e2fsck/problem.c:203
@@ -912,37 +909,39 @@ msgstr "Externes @j unterstützt nicht @f\n"
 #: e2fsck/problem.c:213
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
-"format.\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
-"Ext3 @j @S ist eine unbekannter Type %N (nicht unterstützt).\n"
-"Es ist möglich, dass ihr e2fsck älter ist und/oder dieses @j Format nicht "
-"unterstützt.\n"
-"Es ist ebenso möglich, dass @j @S defekt ist.\n"
+"Der Superblock des Dateisystem-Journals hat den unbekannten Type %N (nicht unterstützt).\n"
+"Es ist möglich, dass ihr e2fsck älter ist und/oder dieses @j-Format nicht unterstützt.\n"
+"Es ist ebenso möglich, dass der @j-@S defekt ist.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:221
 msgid "@j @S is corrupt.\n"
-msgstr "Ext3 @j @S ist defekt.\n"
+msgstr "der @j-@S ist defekt.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:226
 #, c-format
 msgid "@S has_@j flag is clear, but a @j %s is present.\n"
-msgstr "ext3 Recovery-Flag sauber, aber ein @j %s ist vorhanden.\n"
+msgstr ""
+"Der Bitschalter has_journal im Superblock ist nicht gesetzt, aber ein \n"
+"@j %s ist vorhanden.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:231
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
 msgstr ""
-"@S hat das ext3 „needs_recovery“-Flag gesetzt, aber ein @j ist nicht "
-"vorhanden.\n"
+"Im @S ist der Bitschalter „needs_recovery“ gesetzt, aber ein @j ist\n"
+"nicht vorhanden.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:236
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
-msgstr "ext3 Recovery-Flag sauber, aber das @j enthält Daten.\n"
+msgstr ""
+"Der Bitschalter „Wiederherstellung nötig“ im @S ist nicht gesetzt, aber das\n"
+"@j enthält Daten.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:241
@@ -952,7 +951,7 @@ msgstr "Bereinige @j"
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
 #: e2fsck/problem.c:246 e2fsck/problem.c:695
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr "@f hat Eigenschfts-Kennzeichen gesetzt, ist aber ein Revision 0 @f. "
+msgstr "@f hat Eigenschfts-Bitschalter gesetzt, ist aber ein Revision-0-@f. "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 #: e2fsck/problem.c:251
@@ -962,39 +961,39 @@ msgstr "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
 #: e2fsck/problem.c:256
 msgid "@I %B (%b) found in @o @i %i.\n"
-msgstr "@I @b #%B (%b) gefunden in @o @i %i.\n"
+msgstr "@I @b #%B (%b) in @o @i %i gefunden.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
 #: e2fsck/problem.c:261
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
-msgstr "bereits bereinigt @b #%B (%b) gefunden in @o @i %i.\n"
+msgstr "Bereits bereinigter %B (%b) in @o @i %i gefunden.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
 #: e2fsck/problem.c:266
 #, c-format
 msgid "@I @o @i %i in @S.\n"
-msgstr "@I @o @i %i in @S.\n"
+msgstr "@I @o @i %i im @S.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
 #: e2fsck/problem.c:271
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
-msgstr "@I @i %i in @o @i Liste.\n"
+msgstr "Illegaler Inode %i in der Liste der verwaisten Inodes.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:276
 msgid "@j @S has an unknown read-only feature flag set.\n"
-msgstr "Ext3 @j @S hat ein unbekanntes Nur-Lesen-Flag gesetzt.\n"
+msgstr "der @j-@S hat einen unbekannten Nur-Lesen-Bitschalter gesetzt.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:281
 msgid "@j @S has an unknown incompatible feature flag set.\n"
-msgstr "Ext3 @j @S hat ein unbekanntes Inkompatibel-Flag gesetzt.\n"
+msgstr "im @j-@S ist ein unbekannter Bitschalter für inkompatible Eigenschaft gesetzt.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
 #: e2fsck/problem.c:286
 msgid "@j version not supported by this e2fsck.\n"
-msgstr "@j Version wird von diesem e2fsck nicht unterstützt.\n"
+msgstr "diese @j-Version wird von diesem e2fsck nicht unterstützt.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
@@ -1015,7 +1014,7 @@ msgid ""
 "Error moving @j: %m\n"
 "\n"
 msgstr ""
-"Fehler beim Verschieben von  @j: %m\n"
+"Fehler beim Verschieben von @j: %m\n"
 "\n"
 
 #. @-expanded: Found invalid V2 journal superblock fields (from V1 journal).\n
@@ -1027,8 +1026,8 @@ msgid ""
 "Clearing fields beyond the V1 @j @S...\n"
 "\n"
 msgstr ""
-"Fand unvollständige V2 @j @S Felder (vom V1 Journal).\n"
-"Bereinige die Felder hinter V1 @j @S...\n"
+"Unvollständige V2-@j-@S-Felder (vom V1-Journal) gefunden.\n"
+"Die Felder nach dem V1-@j-@S werden bereinigt...\n"
 "\n"
 
 #. @-expanded: Run journal anyway
@@ -1040,8 +1039,8 @@ msgstr "Starte @j trotzdem"
 #: e2fsck/problem.c:312
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
 msgstr ""
-"Recovery-Kennzeichen in Backup @S nicht gesetzt, @j wird trotzdem "
-"gestartet.\n"
+"Der Bitschalter fÜr Wiederherstellung ist im Sicherungs-Superblock nicht\n"
+"gesetzt, das @j wird daher trotzdem gestartet.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
@@ -1050,7 +1049,7 @@ msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
 msgstr ""
-"Sichere @j @i @b Information.\n"
+"Die Informationen des Journal-Inodeblocks werden gesichert.\n"
 "\n"
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
@@ -1066,13 +1065,12 @@ msgstr ""
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:328
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"Resize_@i nicht aktiviert, aber die zu modifgizierende Inod ist nicht-Null."
+msgstr "Resize_@i ist nicht aktiviert, aber die zu modifgizierende @i ist nicht-Null."
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:333
 msgid "Resize @i not valid.  "
-msgstr "@r ist kein @d.  "
+msgstr "Resize-@i ist ungültig.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
@@ -1098,7 +1096,7 @@ msgstr ""
 #: e2fsck/problem.c:347
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
-msgstr "@S Hinweis für externen Superblock @s %X"
+msgstr "@S-Hinweis für externen Superblock @s %X.  "
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
@@ -1113,32 +1111,28 @@ msgstr ""
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
 #: e2fsck/problem.c:357
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
-msgstr "Die Prüfsumme des @g -Deskriptors %g ist %04x, sie sollte %04y sein.  "
+msgstr "Die Prüfsumme des @g-Deskriptors %g ist %04x, sie sollte %04y sein.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
 #: e2fsck/problem.c:362
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
-msgstr ""
-"@g -Deskriptor %g ist als nicht initialisiert gekennzeichnet ohne eine "
-"gesetzte Eigenschaft.\n"
+msgstr "@g-Deskriptor %g ist als nicht initialisiert gekennzeichnet ohne eine gesetzte Eigenschaft.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
 #: e2fsck/problem.c:367
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
-msgstr ""
-"@g Deskriptor %g hat eine ungültige Anzahl ungenutzter Inodes von %b.  "
+msgstr "@g-Deskriptor %g hat eine ungültige Anzahl ungenutzter Inodes von %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
 #: e2fsck/problem.c:372
 msgid "Last @g @b @B uninitialized.  "
-msgstr "Die letzte @g @b @B ist nicht initialisiert.  "
+msgstr "Die letzte Gruppen-Blockbitmap ist nicht initialisiert.  "
 
 #: e2fsck/problem.c:377
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
-msgstr ""
-"Journaltransaktion %i war beschädigt, die Wiederholung wurde abgegrochen.\n"
+msgstr "Journaltransaktion %i war beschädigt, die Wiederholung wurde abgegrochen.\n"
 
 #: e2fsck/problem.c:381
 msgid "The test_fs flag is set (and ext4 is available).  "
@@ -1150,12 +1144,10 @@ msgstr "Die Kennung test_fs wurde gesetzt (und ext4 ist verfügbar).  "
 #: e2fsck/problem.c:386
 msgid ""
 "@S last mount time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set)  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)  "
 msgstr ""
 "Der Zeitpunkt des letzten Einhängens von @S liegt in der Zukunft.\n"
-"\t(weniger als ein Tag, wahrscheinlich aufgrund falsch gesetzter Hardware-"
-"Uhr)  "
+"\t(weniger als ein Tag, wahrscheinlich aufgrund falsch gesetzter Hardware-Uhr)  "
 
 #. @-expanded: superblock last write time is in the future.\n
 #. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
@@ -1163,17 +1155,15 @@ msgstr ""
 #: e2fsck/problem.c:392
 msgid ""
 "@S last write time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set).  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set).  "
 msgstr ""
 "Der Zeitpunkt des letzten Schreibens von @S liegt in der Zukunft.\n"
-"\t(weniger als ein Tag, wahrscheinlich aufgrund falsch gesetzter Hardware-"
-"Uhr)  "
+"\t(weniger als ein Tag, wahrscheinlich aufgrund falsch gesetzter Hardware-Uhr)  "
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
 #: e2fsck/problem.c:398
 msgid "One or more @b @g descriptor checksums are invalid.  "
-msgstr "Die Prüfsumme eines oder mehrerer @g -Deskriptoren ist ungültig.  "
+msgstr "Die Prüfsumme eines oder mehrerer @g-Deskriptoren ist ungültig.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
 #: e2fsck/problem.c:403
@@ -1187,21 +1177,18 @@ msgstr "Setze die Anzahl der freien Blöcke auf %c (war %b)\n"
 
 #. @-expanded: Making quota inode %i (%Q) hidden.\n
 #: e2fsck/problem.c:413
-#, fuzzy
 msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"Verstecke @q Inodes.\n"
-"\n"
+msgstr "Quota-Inode %i (%Q) wird versteckt.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
 #: e2fsck/problem.c:418
 msgid "@S has invalid MMP block.  "
-msgstr "@S hat einen ungültigen MMP Block.  "
+msgstr "der @S hat einen ungültigen MMP-Block.  "
 
 #. @-expanded: superblock has invalid MMP magic.  
 #: e2fsck/problem.c:423
 msgid "@S has invalid MMP magic.  "
-msgstr "@S besitzt eine falsche MMP Magic number.  "
+msgstr "der @S besitzt eine falsche MMP-Kennung.  "
 
 #: e2fsck/problem.c:428
 #, c-format
@@ -1216,7 +1203,7 @@ msgstr "ext2fs_check_desc: %m\n"
 #. @-expanded: Pass 1: Checking inodes, blocks, and sizes\n
 #: e2fsck/problem.c:440
 msgid "Pass 1: Checking @is, @bs, and sizes\n"
-msgstr "Durchgang 1: Prüfe @is, @bs, und Größen\n"
+msgstr "Durchgang 1: Prüfe @is, @bs und Größen\n"
 
 #. @-expanded: root inode is not a directory.  
 #: e2fsck/problem.c:444
@@ -1231,13 +1218,13 @@ msgstr "@r hat dtime gesetzt (vielleicht durch ein zu altes mke2fs).  "
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
 #: e2fsck/problem.c:454
 msgid "Reserved @i %i (%Q) has @n mode.  "
-msgstr "Reservierte @i %i %Q hat einen falschen Modus.  "
+msgstr "Reservierte @i %i (%Q) hat einen ungültigen Modus.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
 #: e2fsck/problem.c:459
 #, c-format
 msgid "@D @i %i has zero dtime.  "
-msgstr "@D @i %i hat \"zero dtime\".  "
+msgstr "dtime in @D @i %i ist Null.  "
 
 #. @-expanded: inode %i is in use, but has dtime set.  
 #: e2fsck/problem.c:464
@@ -1249,58 +1236,58 @@ msgstr "@i %i ist in Benutzung, aber hat dtime gesetzt.  "
 #: e2fsck/problem.c:469
 #, c-format
 msgid "@i %i is a @z @d.  "
-msgstr "@i %i ist ein @z @d.  "
+msgstr "@i %i ist ein Verzeichnis mit Länge Null.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:474
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr "@g %g's @b @B auf %b @C.\n"
+msgstr "die Blockbitmap von @g %g auf %b überschneided sich mit einem anderen FS-Block.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:479
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr "@g %g's @i @B auf %b @C.\n"
+msgstr "die @i-@B von @g %g bei %b überschneided sich mit einem anderen FS-Block.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:484
 msgid "@g %g's @i table at %b @C.\n"
-msgstr "@g %g's @i Tabelle auf %b @C.\n"
+msgstr "die @i-Tablle von Gruppe %g bei %b steht in Konflikt mit einem anderen Dateisystemblock.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
 #: e2fsck/problem.c:489
 msgid "@g %g's @b @B (%b) is bad.  "
-msgstr "@g %g's @b @B (%b) ist ungültig.  "
+msgstr "die @b-@B (%b) von @g %g ist ungültig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
 #: e2fsck/problem.c:494
 msgid "@g %g's @i @B (%b) is bad.  "
-msgstr "@g %g's @i @B (%b) ist ungültig.  "
+msgstr "die @i-@B (%b) von @g %g ist ungültig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
 #: e2fsck/problem.c:499
 msgid "@i %i, i_size is %Is, @s %N.  "
-msgstr "@i %i, i_size ist %Is, @s %N.  "
+msgstr "@i %i, i_size ist %Is, sollte %N sein.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
 #: e2fsck/problem.c:504
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
-msgstr "@i %i, i_@bs ist %Ib, @s %N.  "
+msgstr "@i %i, i_@bs ist %Ib, sollte %N sein.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
 #: e2fsck/problem.c:509
 msgid "@I %B (%b) in @i %i.  "
-msgstr "@I @b #%B (%b) in @i %i.  "
+msgstr "illegaler %B (%b) in @i %i.  "
 
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
 #: e2fsck/problem.c:514
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
-msgstr "@b #%B (%b) überlappt @f metadata in @i %i.  "
+msgstr "%B (%b) überlappt @f-Metadaten in @i %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
 #: e2fsck/problem.c:519
 #, c-format
 msgid "@i %i has illegal @b(s).  "
-msgstr "@i %i hat unzulässigen @b(s).  "
+msgstr "@i %i hat unzulässige(n) Block/Blöcke.  "
 
 #. @-expanded: Too many illegal blocks in inode %i.\n
 #: e2fsck/problem.c:524
@@ -1311,12 +1298,12 @@ msgstr "Zu viele unzulässige @bs in @i %i.\n"
 #. @-expanded: illegal %B (%b) in bad block inode.  
 #: e2fsck/problem.c:529
 msgid "@I %B (%b) in bad @b @i.  "
-msgstr "@I @b #%B (%b) in bad @b @i.  "
+msgstr "@I %B (%b) in ungültiger @b-@i.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
 #: e2fsck/problem.c:534
 msgid "Bad @b @i has illegal @b(s).  "
-msgstr "Bad @b @i hat unzulässigen @b(s).  "
+msgstr "Bad-@b @i hat unzulässige(n) Block/Blöcke.  "
 
 #. @-expanded: Duplicate or bad block in use!\n
 #: e2fsck/problem.c:539
@@ -1326,7 +1313,7 @@ msgstr "Doppelter oder unzulässiger @b in Gebrauch!\n"
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
 #: e2fsck/problem.c:544
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr "Bad @b %b benutzt als bad @b @i indirekt @b.  "
+msgstr "Ungültiger @b %b wird benutzt als indirekter Block der Badblock-Inode.  "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
@@ -1340,9 +1327,9 @@ msgid ""
 "in the @f.\n"
 msgstr ""
 "\n"
-"Defekter @b @i ist wahrscheinlich beschädigt worden. Sie sollten\n"
-"nun eher innehalten und „e2fsck -c“ ausführen, um nach defekten\n"
-"Blöcken in @f zu suchen.\n"
+"Die Badblock-Indode ist wahrscheinlich beschädigt worden. Sie sollten\n"
+"nun innehalten und „e2fsck -c“ ausführen, um nach defekten Blöcken in\n"
+"dem @f zu suchen.\n"
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
@@ -1352,7 +1339,7 @@ msgid ""
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
 "\n"
-"Wenn der @b wirklich defekt ist, kann der @f nicht repariert werden.\n"
+"Wenn der @b wirklich defekt ist, kann das @f nicht repariert werden.\n"
 
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
@@ -1363,51 +1350,51 @@ msgid ""
 "that the @b is really OK.  But there are no guarantees.\n"
 "\n"
 msgstr ""
-"Sie können @b von der @b - Liste  löschen  \n"
-"und hoffen das @b wirklich in Ordnung ist, es \n"
-"gibt aber KEINE GARANTIEN.\n"
+"Sie können diesen @b von der Liste der defekten Blöcke löschen\n"
+"und hoffen, das dieser wirklich in Ordnung ist, es gibt aber\n"
+"KEINE GARANTIEN.\n"
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
 #: e2fsck/problem.c:567
 msgid "The primary @S (%b) is on the bad @b list.\n"
-msgstr "Der primäre @S (%b) ist auf der bad @b Liste.\n"
+msgstr "Der primäre @S (%b) ist auf der Liste der defekten Blöcke.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
 #: e2fsck/problem.c:572
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr "Block %b im primären Deskriptor @g ist auf der bad @b Liste\n"
+msgstr "Block %b im primären Deskriptor @g ist auf der Liste der defekten Blöcke\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
 #: e2fsck/problem.c:578
 msgid "Warning: Group %g's @S (%b) is bad.\n"
-msgstr "Warnung: Gruppe %g's @S (%b) ist ungültig.\n"
+msgstr "Warnung: der @S von Gruppe %g (%b) ist defekt.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
 #: e2fsck/problem.c:583
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr "Warnung: Gruppe %g's Kopie vom Deskriptor @g hat einen bad @b (%b).\n"
+msgstr "Warnung: die Kopie des Gruppen-Deskriptors von Gruppe %g hat einen defekten Block (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
 #: e2fsck/problem.c:589
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr "Programmfehler?  @b #%b verlangt ohne Grund in process_bad_@b.\n"
+msgstr "Programmfehler?  @b #%b wird ohne Grund in process_bad_@b verlangt.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
 #: e2fsck/problem.c:595
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
-msgstr "@A %N grenzt an @b(s) in @b @g %g for %s: %m\n"
+msgstr "@A %N zusammenhängenende(m/n) Block/Blöcken in der @b-@g %g für %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
 #: e2fsck/problem.c:600
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
-msgstr "@A @b Puffer zum Verschieben %s\n"
+msgstr "@A einen @b-Puffer zum Verschieben von %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
 #: e2fsck/problem.c:605
 msgid "Relocating @g %g's %s from %b to %c...\n"
-msgstr "Verschiebe @g %g's %s von %b nach %c...\n"
+msgstr "Verschiebe Gruppe %g's %s von %b nach %c...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
 #: e2fsck/problem.c:610
@@ -1418,57 +1405,56 @@ msgstr "Verschiebe @g %g's %s nach %c...\n"
 #. @-expanded: Warning: could not read block %b of %s: %m\n
 #: e2fsck/problem.c:615
 msgid "Warning: could not read @b %b of %s: %m\n"
-msgstr "Warnung: kann  @b %b von %s: %m nicht lesen\n"
+msgstr "Warnung: @b %b von %s konnte nicht gelesen werden: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
 #: e2fsck/problem.c:620
 msgid "Warning: could not write @b %b for %s: %m\n"
-msgstr "Warnung: kann  @b %b von %s: %m nicht schreiben\n"
+msgstr "Warnung: @b %b von %s konnte nicht geschrieben werden: %m\n"
 
 #. @-expanded: error allocating inode bitmap (%N): %m\n
 #: e2fsck/problem.c:625 e2fsck/problem.c:1460
 msgid "@A @i @B (%N): %m\n"
-msgstr "@A @i @B (%N): %m\n"
+msgstr "@A die @i-@B (%N): %m\n"
 
 #. @-expanded: error allocating block bitmap (%N): %m\n
 #: e2fsck/problem.c:630
 msgid "@A @b @B (%N): %m\n"
-msgstr "@A @i @B (%N): %m\n"
+msgstr "@A die @i-@B (%N): %m\n"
 
 #. @-expanded: error allocating icount link information: %m\n
 #: e2fsck/problem.c:635
 #, c-format
 msgid "@A icount link information: %m\n"
-msgstr "@A icount link information: %m\n"
+msgstr "@A die „icount link information“: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
 #: e2fsck/problem.c:640
 #, c-format
 msgid "@A @d @b array: %m\n"
-msgstr "@A @d @b array: %m\n"
+msgstr "@A das @d-@b-Feld: %m\n"
 
 #. @-expanded: Error while scanning inodes (%i): %m\n
 #: e2fsck/problem.c:645
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
-msgstr "Fehler während der Suche @is (%i): %m\n"
+msgstr "Fehler während des Durchsuchens der @is (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
 #: e2fsck/problem.c:650
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
-msgstr "Fehler beim Iterieren über @bs in @i %i: %m\n"
+msgstr "Fehler beim Iterieren über die Blöcke in @i %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
 #: e2fsck/problem.c:655
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr ""
-"Fehler beim Speichern von @i count Informationen (@i=%i, count=%N): %m\n"
+msgstr "Fehler beim Speichern der @i Anzahl-Informationen (@i=%i, count=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
 #: e2fsck/problem.c:660
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr "Fehler beim Speichern @d @b Informationen (@i=%i, @b=%b, num=%N): %m\n"
+msgstr "Fehler beim Speichern der @d-@b-Informationen (@i=%i, @b=%b, num=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
 #: e2fsck/problem.c:666
@@ -1480,7 +1466,7 @@ msgstr "Fehler beim Lesen von @i %i: %m\n"
 #: e2fsck/problem.c:674
 #, c-format
 msgid "@i %i has imagic flag set.  "
-msgstr "@i %i hat Imagic-Flag gesetzt.  "
+msgstr "@i %i hat den Imagic-Bitschalter gesetzt.  "
 
 #. @-expanded: Special (device/socket/fifo/symlink) file (inode %i) has immutable\n
 #. @-expanded: or append-only flag set.  
@@ -1490,27 +1476,25 @@ msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
-"Spezielle (@v/socket/fifo/symlink) Datei (@i %i) hat immutable\n"
-"oder append-only Flag gesetzt.  "
+"Spezielle (@v/socket/fifo/symlink) Datei (@i %i) hat den Bitschalter für\n"
+"unveränderbar oder nur-anängen gesetzt.  "
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
 #: e2fsck/problem.c:685
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
-msgstr "@i %i hat @cion Flag gesetzt auf @f ohne @cion Unterstützung.  "
+msgstr "@i %i hat den Bitschalter für @c gesetzt auf einem @f ohne Unterstützung dafür.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
 #: e2fsck/problem.c:690
 #, c-format
 msgid "Special (@v/socket/fifo) @i %i has non-zero size.  "
-msgstr ""
-"Spezielle (@v/socket/fifo/symlink) Datei (@i %i) hat immutable\n"
-"oder append-only Flag gesetzt.  "
+msgstr "Spezielle (@v/socket/fifo) @i %i hat die Größe Null. "
 
 #. @-expanded: journal inode is not in use, but contains data.  
 #: e2fsck/problem.c:700
 msgid "@j @i is not in use, but contains data.  "
-msgstr "@i %i ist in Benutzung, aber hat dtime gesetzt.  "
+msgstr "@j %i wird nicht verwendet, aber enthält Daten.  "
 
 #. @-expanded: journal is not regular file.  
 #: e2fsck/problem.c:705
@@ -1521,57 +1505,57 @@ msgstr "@j ist keine reguläre Datei.  "
 #: e2fsck/problem.c:710
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
-msgstr "@i %i war Teil der orphaned @i Liste.  "
+msgstr "@i %i war Teil der Liste verwaister Inodes.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
 #: e2fsck/problem.c:716
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr "@is,  die Teile einer defekten Liste mit verwaisten Links waren.  "
+msgstr "@is gefunden, die Teil einer defekten verketteten Liste von verwaisten @is waren.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
 #: e2fsck/problem.c:721
 msgid "@A refcount structure (%N): %m\n"
-msgstr "@A icount structure: %m\n"
+msgstr "@A die refcount-Structure (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
 #: e2fsck/problem.c:726
 msgid "Error reading @a @b %b for @i %i.  "
-msgstr "Fehler beim Lesen @a @b %b for @i %i.  "
+msgstr "Fehler beim Lesen des Blocks für erweiterte Attribute %b f @i %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
 #: e2fsck/problem.c:731
 msgid "@i %i has a bad @a @b %b.  "
-msgstr "@i %i hat defekten @a @b %b.  "
+msgstr "@i %i hat einen defekten erweiterte-Attribute-Block %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
 #: e2fsck/problem.c:736
 msgid "Error reading @a @b %b (%m).  "
-msgstr "Fehler beim Lesen @a @b %b (%m).  "
+msgstr "Fehler beim Lesen des Blocks für erweiterte Attribute (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
 #: e2fsck/problem.c:741
 msgid "@a @b %b has reference count %r, @s %N.  "
-msgstr "@a @b %b hat den Referenzzähler %r, richtig wäre %N.  "
+msgstr "Der Referenzzähler des Blocks für @a %b ist %r, richtig wäre %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
 #: e2fsck/problem.c:746
 msgid "Error writing @a @b %b (%m).  "
-msgstr "Fehler beim Schreiben @a @b %b (%m).  "
+msgstr "Fehler beim Schreiben des Blocks für @a %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
 #: e2fsck/problem.c:751
 msgid "@a @b %b has h_@bs > 1.  "
-msgstr "@a @b %b hat h_blocks > 1.  "
+msgstr "der Block für @a %b hat h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute block %b.  
 #: e2fsck/problem.c:756
 msgid "@A @a @b %b.  "
-msgstr "@A @a @b %b.  "
+msgstr "@A den Block für erweiterte Attribute %b.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
 #: e2fsck/problem.c:761
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr "@a @b %b ist defekt (allocation collision).  "
+msgstr "der @b für @a %b ist defekt (Kollision der Platzanforderungen).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
 #: e2fsck/problem.c:766
@@ -1581,7 +1565,7 @@ msgstr "@a @b %b ist defekt (ungültiger Name).  "
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
 #: e2fsck/problem.c:771
 msgid "@a @b %b is corrupt (@n value).  "
-msgstr "@a @b %b ist defekt (ungültiger Wert).  "
+msgstr "der @b für @a %b ist defekt (ungültiger Wert).  "
 
 #. @-expanded: inode %i is too big.  
 #: e2fsck/problem.c:776
@@ -1592,7 +1576,7 @@ msgstr "@i %i ist zu groß.  "
 #. @-expanded: %B (%b) causes directory to be too big.  
 #: e2fsck/problem.c:780
 msgid "%B (%b) causes @d to be too big.  "
-msgstr "@b #%B (%b) macht @d zu groß.  "
+msgstr "%B (%b) macht @d zu groß.  "
 
 #: e2fsck/problem.c:785
 msgid "%B (%b) causes file to be too big.  "
@@ -1612,24 +1596,24 @@ msgstr "@i %i hat INDEX_FL Flag auf @f gesetzt ohne HTREE-Unterstützung.\n"
 #: e2fsck/problem.c:800
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
-msgstr "@i %i hat INDEX_FL flag gesetzt, ist aber kein @d.\n"
+msgstr "@i %i hat den INDEX_FL-Bitschalter gesetzt, ist aber kein @d.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
 #: e2fsck/problem.c:805
 #, c-format
 msgid "@h %i has an @n root node.\n"
-msgstr "@h %i hat einen unvollständigen root node.\n"
+msgstr "@h %i hat einen unvollständigen Wurzelknoten („root node“).\n"
 
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
 #: e2fsck/problem.c:810
 msgid "@h %i has an unsupported hash version (%N)\n"
-msgstr "@h %i hat eine nicht unterstützte hash-Version (%N)\n"
+msgstr "@h %i hat eine nicht unterstützte Hash-Version (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
 #: e2fsck/problem.c:815
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr "@h %i benutzt einen nicht unterstützten htree root node flag.\n"
+msgstr "@h %i benutzt einen nicht unterstützten Bitschalter für einen Htree-Wurzelknoten.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
 #: e2fsck/problem.c:820
@@ -1643,8 +1627,8 @@ msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
 msgstr ""
-"Defekter @b @i hat einen indirekten @b (%b), der mit\n"
-"den @f Metadaten in Konflikt steht.  "
+"der @i für defekte Blöcke hat einen indirekten @b (%b), der mit\n"
+"den @f-Metadaten in Konflikt steht.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
 #: e2fsck/problem.c:831
@@ -1655,45 +1639,43 @@ msgstr "Erzeugung von Vergrösserungs-@i scheiterte: %m."
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
 #: e2fsck/problem.c:836
 msgid "@i %i has a extra size (%IS) which is @n\n"
-msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+msgstr "@h %i hat eine ungültige Extragröße (%IS)\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
 #: e2fsck/problem.c:841
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
-msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+msgstr "ein erweitertes Attribut in @i %i hat eine ungültige namelen von %N\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
 #: e2fsck/problem.c:846
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
-msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+msgstr "ein erweitertes Attribut in @i %i hat einen ungültigen Werteversatz von %N\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
 #: e2fsck/problem.c:851
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+msgstr "ein erweitertes Attribut in @i %i hat einen ungültigen Werteblock von %N (muß 0 sein)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
 #: e2fsck/problem.c:856
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "@h %i hat eine zu große Verzeichnistiefe von (%N)\n"
+msgstr "ein erweitertes Attribut in @i %i hat eine ungültige Wertegröße von %N\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
 #: e2fsck/problem.c:861
 msgid "@a in @i %i has a hash (%N) which is @n\n"
-msgstr "@a in %i hat einen @n Hashwert von (%N)\n"
+msgstr "ein erweitertes Attribut in @i %i hat den ungültigen Hash %N\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
 #: e2fsck/problem.c:866
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
-msgstr ""
-"@i ist ein %It aber es sieht so aus, als ob es tatsächlich ein Verzeichnis "
-"ist.\n"
+msgstr "@i %i ist ein %It, aber es sieht so aus, als ob es tatsächlich ein Verzeichnis ist.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
 #: e2fsck/problem.c:871
 #, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
-msgstr "Fehler beim Iterieren über Baum @x in @i %i: %m\n"
+msgstr "Fehler beim Iterieren über den @xs-Baum @x in @i %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
@@ -1702,7 +1684,7 @@ msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
 msgstr ""
-"Das Iterieren der Extents in @i %i scheiterte\n"
+"Das Iterieren der Erweiterungen (extents) in @i %i scheiterte\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
 
 #. @-expanded: inode %i has an invalid extent\n
@@ -1712,7 +1694,7 @@ msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
-"@i %i hat eine @n Erweiterung\n"
+"@i %i hat eine @ne Erweiterung\n"
 "\t(logischer @b %c, @n physischer @b %b, Länge %N)\n"
 
 #. @-expanded: inode %i has an invalid extent\n
@@ -1722,35 +1704,31 @@ msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
-"@i %i hat eine @n Erweiterung\n"
+"@i %i hat eine ungültige Erweiterung\n"
 "\t(logischer @b %c, physischer @b %b, @n Länge %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
 #: e2fsck/problem.c:892
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"@i %i hat  EXTENTS_FL Kennung auf einem @f ohne Unterstützung für "
-"Erweiterungen.\n"
+msgstr "@i %i hat  EXTENTS_FL-Bitschalter gesetzt, obwohl das @f Erweiterungen nicht unterstützt.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
 #: e2fsck/problem.c:897
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"@i %i besitzt das Erweiterungsformat, aber dem @S fehlt die Eigenschaft "
-"EXTENTS\n"
+msgstr "@i %i besitzt das Erweiterungsformat, aber dem @S fehlt die Eigenschaft EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
 #: e2fsck/problem.c:902
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
-msgstr "@i %i fehlt EXTENT_FL, aber hat das Format einer Erweiterungs-@i\n"
+msgstr "der @i %i fehlt EXTENT_FL, sie hat aber das Format einer Erweiterung\n"
 
 #: e2fsck/problem.c:907
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
-msgstr "Schneller Symlink %i hat EXTENT_FL gesetzt.  "
+msgstr "In schnellem Symlink %i ist EXTENT_FL gesetzt.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
@@ -1759,19 +1737,19 @@ msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"@i %i hat unregelmässige Erweitertungen\n"
+"@i %i hat unregelmässige Erweiterungen\n"
 "\t(@n logischer @b %c, physischer @b %b, Länge %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
 #: e2fsck/problem.c:916
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
-msgstr "@i %i hat einen ungültigen Extent-Knoten (blk %b, lblk %c)\n"
+msgstr "@i %i hat einen ungültigen Erweiterungs-Knoten (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
 #: e2fsck/problem.c:921
 #, c-format
 msgid "Error converting subcluster @b @B: %m\n"
-msgstr "Fehler beim umwandeln der Subcluster-Bitmap: %m\n"
+msgstr "Fehler beim Umwandeln der Subcluster-Blockbitmap: %m\n"
 
 #. @-expanded: quota inode is not regular file.  
 #: e2fsck/problem.c:926
@@ -1781,17 +1759,17 @@ msgstr "die @q-@i ist keine reguläre Datei.  "
 #. @-expanded: quota inode is not in use, but contains data.  
 #: e2fsck/problem.c:931
 msgid "@q @i is not in use, but contains data.  "
-msgstr "@q %i wird nicht benutzt, enthält aber Daten.  "
+msgstr "@q-@i wird nicht benutzt, enthält aber Daten.  "
 
 #. @-expanded: quota inode is visible to the user.  
 #: e2fsck/problem.c:936
 msgid "@q @i is visible to the user.  "
-msgstr "@q @i ist sichtbar für den Benutzer.  "
+msgstr "die @q-@i ist sichtbar für den Benutzer.  "
 
 #. @-expanded: The bad block inode looks invalid.  
 #: e2fsck/problem.c:941
 msgid "The bad @b @i looks @n.  "
-msgstr "Die „Bad Blocks“-Inode sieht ungültig aus.  "
+msgstr "Die Inode für defekte Blöcke sieht ungültig aus.  "
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
@@ -1800,7 +1778,7 @@ msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
-"@i %i hat Erweitertungen der Länge Null\n"
+"@i %i hat eine Erweitertung der Länge Null\n"
 "\t(@n logischer @b %c, physischer @b %b)\n"
 
 #. @-expanded: \n
@@ -1813,46 +1791,46 @@ msgid ""
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Doppelter @bs gefunden... starte Scan nach doppelten @b.\n"
-"Durchgang 1B: Suche nach doppelten/defekten @bs\n"
+"Führe zusätzliche Läufe durch, um die von mehr als einer @i beanspruchten Blöcke zu klären...\n"
+"Durchgang 1B: Suche nach mehrfach beanspruchten Blöcken\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
 #: e2fsck/problem.c:959
 #, c-format
 msgid "@m @b(s) in @i %i:"
-msgstr "@m @b(s) in @i %i:"
+msgstr "@me(r) Block/Blöcke in @i %i:"
 
 #: e2fsck/problem.c:974
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
-msgstr "Fehlen beim Prüfen von Inodes (%i): %m\n"
+msgstr "Fehlen beim Prüfen der Inodes (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
 #: e2fsck/problem.c:979
 #, c-format
 msgid "@A @i @B (@i_dup_map): %m\n"
-msgstr "@A @i @B (inode_dup_map): %m\n"
+msgstr "@A die @i-@B (inode_dup_map): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
 #: e2fsck/problem.c:984
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
-msgstr "Fehler beim Durchlaufen der @bs in @i %i (%s): %m\n"
+msgstr "Fehler beim Iterieren über die Blöcke in @i %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
 #: e2fsck/problem.c:989 e2fsck/problem.c:1304
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr "Fehler bei der Anpassung des refcount für @a @b %b (@i %i): %m\n"
+msgstr "Fehler bei der Anpassung des Referenzzählers des Blocks für @a %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
 #: e2fsck/problem.c:994
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
-msgstr "Durchgang 1C: Prüfe Verzeichnisse nach @is mit doppelten @bs.\n"
+msgstr "Durchgang 1C: Durchsuche Verzeichnisse nach @is mit mehrfach belegten Blöcken.\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
 #: e2fsck/problem.c:1000
 msgid "Pass 1D: Reconciling @m @bs\n"
-msgstr "Durchgang 1D: Gleiche doppelte @bs ab\n"
+msgstr "Durchgang 1D: Gleiche mehrfach belegte Blöcke ab\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
@@ -1861,18 +1839,18 @@ msgid ""
 "File %Q (@i #%i, mod time %IM) \n"
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
-"Datei %Q (@i #%i, Modifikationszeitpunkt %IM) \n"
-"  hat %B doppelte @b(s), gemeinsam genutzt mit %N Datei(en):\n"
+"Datei %Q (@i #%i, Änderungszeit %IM) \n"
+"  hat %r mehrfach belegte(n) Block/Böcke, gemeinsam genutzt mit %N Datei(en):\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
 #: e2fsck/problem.c:1011
 msgid "\t%Q (@i #%i, mod time %IM)\n"
-msgstr "\t%Q (@i #%i, mod time %IM)\n"
+msgstr "\t%Q (@i #%i, Änderungszeit %IM)\n"
 
 #. @-expanded: \t<filesystem metadata>\n
 #: e2fsck/problem.c:1016
 msgid "\t<@f metadata>\n"
-msgstr "\t<@f metadata>\n"
+msgstr "\t<@f-Metadaten>\n"
 
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
@@ -1881,7 +1859,7 @@ msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
 msgstr ""
-"(es gibt %N @is, die doppelte/defekte @bs enthalten.)\n"
+"(es gibt %N @is, die mehrfach belegte Blöcke enthalten.)\n"
 "\n"
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
@@ -1891,34 +1869,34 @@ msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
 msgstr ""
-"Duplizierte @bs bereits neu zugeordnet bzw. geklont.\n"
+"mehrfach belegte Blöcke wurden bereits neu zugeordnet bzw. geklont.\n"
 "\n"
 
 #: e2fsck/problem.c:1039
 #, c-format
 msgid "Couldn't clone file: %m\n"
-msgstr "Kann die Datei %m nicht klonen.\n"
+msgstr "Kann eine Datei nicht klonen: %m\n"
 
 #. @-expanded: Pass 2: Checking directory structure\n
 #: e2fsck/problem.c:1045
 msgid "Pass 2: Checking @d structure\n"
-msgstr "Durchgang 2: Prüfe @d Struktur\n"
+msgstr "Durchgang 2: Prüfe die @dstruktur\n"
 
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
 #: e2fsck/problem.c:1050
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
-msgstr "Falsche @i Nummer für „.“ in @d @i %i.\n"
+msgstr "Falsche @inummer für „.“ in Verzeichnisinode %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
 #: e2fsck/problem.c:1055
 msgid "@E has @n @i #: %Di.\n"
-msgstr "@E hat falsche @i #: %Di.\n"
+msgstr "@E hat falsche @i-Nr.: %Di.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
 #: e2fsck/problem.c:1060
 msgid "@E has @D/unused @i %Di.  "
-msgstr "@E hat @D/unbenutzt @i %Di.  "
+msgstr "@E hat gelöschte/unbenutzt @i %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
 #: e2fsck/problem.c:1065
@@ -1928,17 +1906,17 @@ msgstr "@E @L nach „.“  "
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
 #: e2fsck/problem.c:1070
 msgid "@E points to @i (%Di) located in a bad @b.\n"
-msgstr "@E zeigt auf @i (%Di) in einem defekten @b.\n"
+msgstr "@E zeigt auf eine @i (%Di) in einem defekten @b.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
 #: e2fsck/problem.c:1075
 msgid "@E @L to @d %P (%Di).\n"
-msgstr "@E @L nach @d %P (%Di).\n"
+msgstr "@E @L mit @d %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
 #: e2fsck/problem.c:1080
 msgid "@E @L to the @r.\n"
-msgstr "@E @L zur @r.\n"
+msgstr "@E @L mit der @r.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
 #: e2fsck/problem.c:1085
@@ -1955,37 +1933,37 @@ msgstr "Fehlende „.“ in @d @i %i.\n"
 #: e2fsck/problem.c:1095
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
-msgstr "Fehlende „..“ in @d @i %i.\n"
+msgstr "Fehlender Eintrag „..“ in @dinode %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
 #: e2fsck/problem.c:1100
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr "Erster @e „%Dn“ (inode=%Di) in @d @i %i (%p) @s „.“\n"
+msgstr "Der erste @e „%Dn“ (@i=%Di) in @d-@i %i (%p) sollte „.“ sein\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
 #: e2fsck/problem.c:1105
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
-msgstr "Zweiter @e „%Dn“ (inode=%Di) in @d @i %i @s „..“\n"
+msgstr "Der zweite @e „%Dn“ (inode=%Di) in @d-@i %i sollte „..“ sein\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
 #: e2fsck/problem.c:1110
 msgid "i_faddr @F %IF, @s zero.\n"
-msgstr "i_faddr @F %IF, @s null.\n"
+msgstr "i_faddr @F %IF, sollte Null sein.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
 #: e2fsck/problem.c:1115
 msgid "i_file_acl @F %If, @s zero.\n"
-msgstr "i_file_acl @F %If, @s null.\n"
+msgstr "i_file_acl @F %If, sollte Null sein.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
 #: e2fsck/problem.c:1120
 msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl @F %Id, @s null.\n"
+msgstr "i_dir_acl @F %Id, sollte Null sein.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1125
 msgid "i_frag @F %N, @s zero.\n"
-msgstr "i_frag @F %N, @s null.\n"
+msgstr "i_frag @F %N, sollte Null sein.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1130
@@ -1995,54 +1973,54 @@ msgstr "i_fsize @F %N, @s null.\n"
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
 #: e2fsck/problem.c:1135
 msgid "@i %i (%Q) has @n mode (%Im).\n"
-msgstr "@i %i (%Q) hat einen falschen Modus (%Im).\n"
+msgstr "@i %i (%Q) hat einen ungültigen Modus (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
 #: e2fsck/problem.c:1140
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
-msgstr "@d @i %i, @b %B, Offset %N: @d defekt\n"
+msgstr "@d-@i %i, @b %B, Offset %N: @d defekt\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
 #: e2fsck/problem.c:1145
 msgid "@d @i %i, %B, offset %N: filename too long\n"
-msgstr "@d @i %i, @b %B, offset %N: Dateiname zu lang\n"
+msgstr "@d-@i %i, @b %B, offset %N: Dateiname zu lang\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
 #: e2fsck/problem.c:1150
 msgid "@d @i %i has an unallocated %B.  "
-msgstr "@d @i %i hat einen nicht zugewiesenen @b #%B.  "
+msgstr "@d-@i %i hat einen nicht zugewiesenen %B.  "
 
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
 #: e2fsck/problem.c:1155
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "„.“ @d @e in @d @i %i ist nicht NULL-terminiert\n"
+msgstr "@d-@e „.“ in @d-@i %i ist nicht NULL-terminiert\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
 #: e2fsck/problem.c:1160
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "„..“ @d @e in @d @i %i ist nicht NULL-terminiert\n"
+msgstr "@d-@e „..“ in @d-@i %i ist nicht NULL-terminiert\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
 #: e2fsck/problem.c:1165
 msgid "@i %i (%Q) is an @I character @v.\n"
-msgstr "@i %i (%Q) ist ein @I Zeichen @v.\n"
+msgstr "@i %i (%Q) ist ein @I zeichenorientiertes Gerät.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
 #: e2fsck/problem.c:1170
 msgid "@i %i (%Q) is an @I @b @v.\n"
-msgstr "@i %i (%Q) ist ein @I @b @v.\n"
+msgstr "@i %i (%Q) ist ein @I blockorientiertes Gerät.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
 #: e2fsck/problem.c:1175
 msgid "@E is duplicate '.' @e.\n"
-msgstr "@E ist ein doppelter „.“ @e.\n"
+msgstr "@E ist ein doppelter @e für „.“.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
 #: e2fsck/problem.c:1180
 msgid "@E is duplicate '..' @e.\n"
-msgstr "@E ist ein doppelter „..“ @e.\n"
+msgstr "@E ist ein doppelter @e für „..“.\n"
 
 #: e2fsck/problem.c:1185 e2fsck/problem.c:1485
 #, c-format
@@ -2052,35 +2030,35 @@ msgstr "Interner Fehler: kann dir_info für %i nicht finden.\n"
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
 #: e2fsck/problem.c:1190
 msgid "@E has rec_len of %Dr, @s %N.\n"
-msgstr "@E hat rec_len von %Dr, sollte %N sein.\n"
+msgstr "@E hat eine rec_len von %Dr, sollte %N sein.\n"
 
 #. @-expanded: error allocating icount structure: %m\n
 #: e2fsck/problem.c:1195
 #, c-format
 msgid "@A icount structure: %m\n"
-msgstr "@A icount structure: %m\n"
+msgstr "@A die icount-Structur: %m\n"
 
 #. @-expanded: Error iterating over directory blocks: %m\n
 #: e2fsck/problem.c:1200
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
-msgstr "Fehler beim Durchlaufen der @d @bs: %m\n"
+msgstr "Fehler beim Durchlaufen der @dblöcke: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
 #: e2fsck/problem.c:1205
 msgid "Error reading @d @b %b (@i %i): %m\n"
-msgstr "Lesefehler @d @b %b (@i %i): %m\n"
+msgstr "Fehler beim Lesen des @dblocks %b (@i %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
 #: e2fsck/problem.c:1210
 msgid "Error writing @d @b %b (@i %i): %m\n"
-msgstr "Schreibfehler @d @b %b (@i %i): %m\n"
+msgstr "Fehler beim Schreiben von @dblock %b (@i %i): %m\n"
 
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
 #: e2fsck/problem.c:1215
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
-msgstr "@A neu @d @b for @i %i (%s): %m\n"
+msgstr "@A einen neuen @dblock für @i %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
 #: e2fsck/problem.c:1220
@@ -2092,7 +2070,7 @@ msgstr "Fehler bei der Freigabe von @i %i: %m\n"
 #: e2fsck/problem.c:1225
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
-msgstr "Verzeichniseintrag für „.“ in %p (%i) ist gross.\n"
+msgstr "Verzeichniseintrag für „.“ in %p (%i) ist groß.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
 #: e2fsck/problem.c:1230
@@ -2102,12 +2080,12 @@ msgstr "@i %i (%Q) ist ein @I FIFO.\n"
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
 #: e2fsck/problem.c:1235
 msgid "@i %i (%Q) is an @I socket.\n"
-msgstr "@i %i (%Q) ist ein @I Socket.\n"
+msgstr "@i %i (%Q) ist ein illegaler Socket.\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
 #: e2fsck/problem.c:1240
 msgid "Setting filetype for @E to %N.\n"
-msgstr "Setze Dateitype für @E auf %N.\n"
+msgstr "Setze den Dateitype für @E auf %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
 #: e2fsck/problem.c:1245
@@ -2122,7 +2100,7 @@ msgstr "@E hat Dateityp gesetzt.\n"
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
 #: e2fsck/problem.c:1255
 msgid "@E has a @z name.\n"
-msgstr "@E hat einen Namen der Länge Null..\n"
+msgstr "@E hat einen Namen der Länge Null.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
 #: e2fsck/problem.c:1260
@@ -2137,18 +2115,17 @@ msgstr "@a @b @F ist falsch (%If).\n"
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
 #: e2fsck/problem.c:1270
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"@f enthält große Dateien, aber das LARGE_FILE Flag in @S ist nicht gesetzt.\n"
+msgstr "@f enthält große Dateien, aber im @S den Bitschalter LARGE_FILE nicht gesetzt.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
 #: e2fsck/problem.c:1275
 msgid "@p @h %d: %B not referenced\n"
-msgstr "@p @h %d: Node (%B) nicht referenziert\n"
+msgstr "@p @h %d: %B ist nicht referenziert\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
 #: e2fsck/problem.c:1280
 msgid "@p @h %d: %B referenced twice\n"
-msgstr "@p @h %d: Node (%B) doppelt referenziert\n"
+msgstr "@p @h %d: %B doppelt referenziert\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
 #: e2fsck/problem.c:1285
@@ -2163,18 +2140,18 @@ msgstr "@p @h %d: %B hat ungültigen Maximalhash\n"
 #. @-expanded: invalid HTREE directory inode %d (%q).  
 #: e2fsck/problem.c:1295
 msgid "@n @h %d (%q).  "
-msgstr "Invalid @h %d (%q).  "
+msgstr "Ungültige @h %d (%q).  "
 
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
 #: e2fsck/problem.c:1299
 msgid "@p @h %d (%q): bad @b number %b.\n"
-msgstr "@p @h %d (%q): bad @b number %b.\n"
+msgstr "@p @h %d (%q): falsche Blocknummer %b.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
 #: e2fsck/problem.c:1309
 #, c-format
 msgid "@p @h %d: root node is @n\n"
-msgstr "@p @h %d: root node is invalid\n"
+msgstr "@p @h %d: Wurzelknotenist ungültig\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
 #: e2fsck/problem.c:1314
@@ -2184,7 +2161,7 @@ msgstr "@p @h %d: %B hat eine ungültige Begrenzung (%N)\n"
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
 #: e2fsck/problem.c:1319
 msgid "@p @h %d: %B has @n count (%N)\n"
-msgstr "@p @h %d: %B hat einen ungültigen Zähler (%N)\n"
+msgstr "@p @h %d: %B hat einen ungültigen Zählerstand (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
 #: e2fsck/problem.c:1324
@@ -2194,12 +2171,12 @@ msgstr "@p @h %d: %B hat eine unsortierte Hashtabelle\n"
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
 #: e2fsck/problem.c:1329
 msgid "@p @h %d: %B has @n depth (%N)\n"
-msgstr "@p @h %d: %B has eine ungültige Tiefe (%N)\n"
+msgstr "@p @h %d: %B hat eine ungültige Tiefe (%N)\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
 #: e2fsck/problem.c:1334
 msgid "Duplicate @E found.  "
-msgstr "Doppelte @E gefunden.  "
+msgstr "Doppelter @E gefunden.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
@@ -2221,14 +2198,14 @@ msgid ""
 "\tMarking %p (%i) to be rebuilt.\n"
 "\n"
 msgstr ""
-"Doppelte @e '%Dn' gefunden.\n"
-"\tMarkiere %p (%i) für die Neuerstellung.\n"
+"Doppelter @e „%Dn“ gefunden.\n"
+"\t%p (%i) wird für die Neuerstellung markiert.\n"
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1349
 msgid "i_blocks_hi @F %N, @s zero.\n"
-msgstr "i_blocks_hi @F %N, @s zero.\n"
+msgstr "i_blocks_hi @F %N, sollte Null sein.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
 #: e2fsck/problem.c:1354
@@ -2238,12 +2215,12 @@ msgstr "Unerwarteter @b in @h %d (%q).\n"
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
 #: e2fsck/problem.c:1358
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
-msgstr "@i %i wurde in @g %g gefunden, für die _INODE_UNINIT gesetzt ist.\n"
+msgstr "@E referenziert @i %Di in @g %g, für die _INODE_UNINIT gesetzt ist.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
 #: e2fsck/problem.c:1363
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr "@i %i wurde im Bereich ungenutzter Inodes von @g %g gefunden.\n"
+msgstr "@E verweist auf @i %Di,  die im Bereich ungenutzter Inodes von @g %g zu finden ist.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1368
@@ -2253,7 +2230,7 @@ msgstr "i_file_acl_hi @F %N, sollte Null sein.\n"
 #. @-expanded: Pass 3: Checking directory connectivity\n
 #: e2fsck/problem.c:1375
 msgid "Pass 3: Checking @d connectivity\n"
-msgstr "Durchgang 3: Prüfe @d Verknüpfungen\n"
+msgstr "Durchgang 3: Prüfe @d-Verknüpfungen\n"
 
 #. @-expanded: root inode not allocated.  
 #: e2fsck/problem.c:1380
@@ -2263,13 +2240,13 @@ msgstr "@r nicht zugeordnet. "
 #. @-expanded: No room in lost+found directory.  
 #: e2fsck/problem.c:1385
 msgid "No room in @l @d.  "
-msgstr "Kein Platz in @l @d.  "
+msgstr "Kein Platz im Verzeichnis @l.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
 #: e2fsck/problem.c:1390
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
-msgstr "Nicht verbundene @d @i %i (%p)\n"
+msgstr "Nicht verbundene @d-@i %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
 #: e2fsck/problem.c:1395
@@ -2279,23 +2256,23 @@ msgstr "/@l nicht gefunden.  "
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
 #: e2fsck/problem.c:1400
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
-msgstr "„..“ in %Q (%i) ist %P (%j), @s %q (%d).\n"
+msgstr "„..“ in %Q (%i) ist %P (%j), sollte %q (%d) sein.\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
 #: e2fsck/problem.c:1405
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr "Falscher oder fehlender /@l.  Wiederverbinden nicht möglich.\n"
+msgstr "Falsches oder fehlendes Verzeichnis /@l.  Wiederverbinden nicht möglich.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
 #: e2fsck/problem.c:1410
 #, c-format
 msgid "Could not expand /@l: %m\n"
-msgstr "Erweitern nicht möglich /@l: %m\n"
+msgstr "Erweitern von /@l nicht möglich: %m\n"
 
 #: e2fsck/problem.c:1415
 #, c-format
 msgid "Could not reconnect %i: %m\n"
-msgstr "Wiederverbinden nicht möglich %i: %m\n"
+msgstr "Wiederverbinden von %i nicht möglich: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
 #: e2fsck/problem.c:1420
@@ -2307,31 +2284,31 @@ msgstr "Fehler während der Suche nach /@l: %m\n"
 #: e2fsck/problem.c:1425
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
-msgstr "ext2fs_new_@b: %m während des Versuches /@l @d zu erzeugen.\n"
+msgstr "ext2fs_new_@b: %m während des Versuches, @d /@l zu erzeugen.\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
 #: e2fsck/problem.c:1430
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
-msgstr "ext2fs_new_@i: %m während des Versuches /@l @d zu erzeugen.\n"
+msgstr "ext2fs_new_@i: %m während des Versuches, @d /@l zu erzeugen.\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
 #: e2fsck/problem.c:1435
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
-msgstr "ext2fs_new_dir_@b: %m während des Versuches /@l @d zu erzeugen.\n"
+msgstr "ext2fs_new_dir_@b: %m während des Versuches, @d /@l zu erzeugen.\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
 #: e2fsck/problem.c:1440
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr "ext2fs_write_dir_@b: %m während des Schreibens von @d @b für /@l\n"
+msgstr "ext2fs_write_dir_@b: %m während des Schreibens des @d-@bs für /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
 #: e2fsck/problem.c:1445
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
-msgstr "Fehler während der Einstellung von @i count auf @i %i\n"
+msgstr "Fehler während des Anpassens der @i-Anzahl auf @i %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
@@ -2341,7 +2318,7 @@ msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
 msgstr ""
-"Konnte Parent von @i %i: %m nicht reparieren\n"
+"Konnte den Eigentümer von @i %i nicht reparieren: %m\n"
 "\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
@@ -2352,30 +2329,30 @@ msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
-"Parent von @i %i konnte nicht repariert werden: \n"
-"parent @d nicht gefunden.\n"
+"Eigentümer von @i %i konnte nicht repariert werden: \n"
+"@deintrag des Eigentümers wurde nicht gefunden.\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
 #: e2fsck/problem.c:1465
 #, c-format
 msgid "Error creating root @d (%s): %m\n"
-msgstr "Fehler beim Erzeugen des root @d (%s): %m\n"
+msgstr "Fehler beim Erzeugen des Wurzelverzeichnisses (%s): %m\n"
 
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
 #: e2fsck/problem.c:1470
 #, c-format
 msgid "Error creating /@l @d (%s): %m\n"
-msgstr "Fehler beim Erzeugen des /@l @d (%s): %m\n"
+msgstr "Fehler beim Erzeugen des Verzeichnisses /@l (%s): %m\n"
 
 #. @-expanded: root inode is not a directory; aborting.\n
 #: e2fsck/problem.c:1475
 msgid "@r is not a @d; aborting.\n"
-msgstr "@r ist kein @d; breche ab.\n"
+msgstr "die Wurzelinode ist kein @d; Abbruch.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
 #: e2fsck/problem.c:1480
 msgid "Cannot proceed without a @r.\n"
-msgstr "Kann ohne @r nicht fortsetzen.\n"
+msgstr "Ohne Wurzelinode ist weiteres Arbeiten nicht möglich.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
 #: e2fsck/problem.c:1490
@@ -2408,18 +2385,18 @@ msgstr "Durchgang 4: Überprüfe die Referenzzähler\n"
 #: e2fsck/problem.c:1534
 #, c-format
 msgid "@u @z @i %i.  "
-msgstr "@I @o @i %i in @S.  "
+msgstr "@ue @I %i @z.  "
 
 #. @-expanded: unattached inode %i\n
 #: e2fsck/problem.c:1539
 #, c-format
 msgid "@u @i %i\n"
-msgstr "@u @i %i\n"
+msgstr "@ue @i %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
 #: e2fsck/problem.c:1544
 msgid "@i %i ref count is %Il, @s %N.  "
-msgstr "@i %i Referenzzähler ist %Il, @s %N.  "
+msgstr "Der Referenzzähler von @i %i ist %Il, @s aber %N sein.  "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
@@ -2432,13 +2409,12 @@ msgid ""
 msgstr ""
 "WARNUNG: PROGRAMMIERFEHLER IN E2FSCK!\n"
 "\tODER EIN TROTTEL (SIE) PRÜFT EIN EINGEHÄNGTES (AKTIVES) DATEISYSTEM.\n"
-"@i_link_info[%i] ist %N, @i.i_links_count ist %Il.  Sie sollten identisch "
-"sein!\n"
+"@i_link_info[%i] ist %N, @i.i_links_count ist %Il.  Sie sollten identisch sein!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
 #: e2fsck/problem.c:1558
 msgid "Pass 5: Checking @g summary information\n"
-msgstr "Durchgang 5: Überprüfe @g Zusammenfassung\n"
+msgstr "Durchgang 5: Überprüfe die zusammengefasste Gruppeninformation\n"
 
 #. @-expanded: Padding at end of inode bitmap is not set. 
 #: e2fsck/problem.c:1563
@@ -2453,12 +2429,12 @@ msgstr "Auffüllbyte am Ende von @b @B ist nicht gesetzt. "
 #. @-expanded: block bitmap differences: 
 #: e2fsck/problem.c:1573
 msgid "@b @B differences: "
-msgstr "@b @B differieren: "
+msgstr "Unterschiede in der @b-@B: "
 
 #. @-expanded: inode bitmap differences: 
 #: e2fsck/problem.c:1593
 msgid "@i @B differences: "
-msgstr "@i @B differieren: "
+msgstr "Unterschiede in der @i-@B: "
 
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
 #: e2fsck/problem.c:1613
@@ -2468,7 +2444,7 @@ msgstr "Die Anzahl freier @is ist falsch für @g #%g (%i, gezählt=%j).\n"
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
 #: e2fsck/problem.c:1618
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
-msgstr "Die Anzahl Verzeichnisse ist falsch für @g #%g (%i, gezählt=%j).\n"
+msgstr "Die Anzahl der Verzeichnisse ist falsch für @g #%g (%i, gezählt=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
 #: e2fsck/problem.c:1623
@@ -2488,16 +2464,12 @@ msgstr "Die Anzahl freier Blöcke ist falsch (%b, gezählt=%c).\n"
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 #: e2fsck/problem.c:1638
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"PROGRAMMIERFEHLER: @f (#%N) @B Endpunkte (%b, %c) passen nicht zu den "
-"berechneten @B Endpunkten (%i, %j)\n"
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "PROGRAMMIERFEHLER: Dateisystem (#%N) @B-Endpunkte (%b, %c) passen nicht mit den berechneten @B-Endpunkten (%i, %j) überein\n"
 
 #: e2fsck/problem.c:1644
 msgid "Internal error: fudging end of bitmap (%N)\n"
-msgstr "Interner Fehler: fudging end of bitmap (%N)\n"
+msgstr "Interner Fehler: das Ende der Bitmap (%N) wird erraten\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
 #: e2fsck/problem.c:1649
@@ -2509,30 +2481,28 @@ msgstr "Fehler beim hineinkopieren von @i @B: %m\n"
 #: e2fsck/problem.c:1654
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
-msgstr "Fehler beim hineinkopieren von @b @B: %m\n"
+msgstr "Fehler beim Hineinkopieren der Ersatz-Blockbitmap: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
 #: e2fsck/problem.c:1679
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
-msgstr ""
-"Blöcke von @g %g sind in Beutzung obwohl @g als BLOCK_UNINIT markiert ist\n"
+msgstr "Blöcke von @g %g sind in Beutzung, obwohl @g als BLOCK_UNINIT markiert ist\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
 #: e2fsck/problem.c:1684
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
-msgstr ""
-"@g %g @i(s) sind in Benutzung obwohl @g als INODE_UNINIT markiert ist\n"
+msgstr "Die @isw der @g %g sind in Benutzung, obwohl @g als INODE_UNINIT markiert ist\n"
 
 #. @-expanded: Recreate journal
 #: e2fsck/problem.c:1691
 msgid "Recreate @j"
-msgstr "@j zurücksetzen"
+msgstr "@j wird wiederhergestellt"
 
 #: e2fsck/problem.c:1696
 msgid "Update quota info for quota type %N"
-msgstr ""
+msgstr "Quota-Info für Typ %N wird aktualisiert"
 
 #: e2fsck/problem.c:1815
 #, c-format
@@ -2551,7 +2521,7 @@ msgstr "benutzter Speicher: %d, vergangende Zeit: %6.3f/%6.3f/%6.3f\n"
 #: e2fsck/scantest.c:98
 #, c-format
 msgid "size of inode=%d\n"
-msgstr "Größe des Inode=%d\n"
+msgstr "Größe der Inode=%d\n"
 
 #: e2fsck/scantest.c:119
 msgid "while starting inode scan"
@@ -2600,8 +2570,7 @@ msgid ""
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock "
-"list\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
@@ -2629,165 +2598,165 @@ msgstr ""
 " -l bad_blocks_file   zur Liste der defekten Blöcke hinzufügen\n"
 " -L bad_blocks_file   Liste der defekten Blöcke definieren\n"
 
-#: e2fsck/unix.c:130
+#: e2fsck/unix.c:131
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u Dateien (%0d.%d%% nicht zusammenhängend), %llu/%llu Blöcke\n"
 
-#: e2fsck/unix.c:137
+#: e2fsck/unix.c:157
 #, c-format
 msgid ""
 "\n"
-"%8u inode used (%2.2f%%)\n"
+"%12u inode used (%2.2f%%, out of %u)\n"
 msgid_plural ""
 "\n"
-"%8u inodes used (%2.2f%%)\n"
+"%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
 "\n"
-"%8u Inode ist in Benutzung (%2.2f%%)\n"
+"%12u Inode ist in Benutzung (%2.2f%% von %u)\n"
 msgstr[1] ""
 "\n"
-"%u Inodes sind in Benutzung (%2.2f%%)\n"
+"%12u Inodes sind in Benutzung (%2.2f%% von %u)\n"
 
-#: e2fsck/unix.c:141
+#: e2fsck/unix.c:161
 #, c-format
-msgid "%8u non-contiguous file (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous files (%0d.%d%%)\n"
-msgstr[0] "%8u nicht zusammenhängende Datei (%0d.%d%%)\n"
-msgstr[1] "%8u nicht zusammenhängende Dateien (%0d.%d%%)\n"
+msgid "%12u non-contiguous file (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
+msgstr[0] "%12u nicht zusammenhängende Datei (%0d.%d%%)\n"
+msgstr[1] "%12u nicht zusammenhängende Dateien (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:146
+#: e2fsck/unix.c:166
 #, c-format
-msgid "%8u non-contiguous directory (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous directories (%0d.%d%%)\n"
-msgstr[0] "%8u nicht zusammenhängendes Verzeichnis (%0d.%d%%)\n"
-msgstr[1] "%8u nicht zusammenhängende Verzeichnisse (%0d.%d%%)\n"
+msgid "%12u non-contiguous directory (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
+msgstr[0] "%12u nicht zusammenhängendes Verzeichnis (%0d.%d%%)\n"
+msgstr[1] "%12u nicht zusammenhängende Verzeichnisse (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:151
+#: e2fsck/unix.c:171
 #, c-format
-msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
 msgstr "         # von Inodes mit ind/dind/tind Blöcken: %u/%u/%u\n"
 
-#: e2fsck/unix.c:159
-msgid "         Extent depth histogram: "
-msgstr "         Erweiterungstiefe Histogramm: "
+#: e2fsck/unix.c:179
+msgid "             Extent depth histogram: "
+msgstr " Histogramm der Tiefe von Erweiterungen: "
 
-#: e2fsck/unix.c:168
+#: e2fsck/unix.c:188
 #, c-format
-msgid "%8llu block used (%2.2f%%)\n"
-msgid_plural "%8llu blocks used (%2.2f%%)\n"
-msgstr[0] "%8llu Block wird benutzt (%2.2f%%)\n"
-msgstr[1] "%8llu Blöcke werden benutzt (%2.2f%%)\n"
+msgid "%12llu block used (%2.2f%%, out of %llu)\n"
+msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
+msgstr[0] "%12llu Block wird benutzt (%2.2f%% von %llu)\n"
+msgstr[1] "%12llu Blöcke werden benutzt (%2.2f%% von %llu)\n"
 
-#: e2fsck/unix.c:171
+#: e2fsck/unix.c:192
 #, c-format
-msgid "%8u bad block\n"
-msgid_plural "%8u bad blocks\n"
-msgstr[0] "%u ungültiger Block\n"
-msgstr[1] "%u ungültige Blöcke\n"
+msgid "%12u bad block\n"
+msgid_plural "%12u bad blocks\n"
+msgstr[0] "%12u ungültiger Block\n"
+msgstr[1] "%12u ungültige Blöcke\n"
 
-#: e2fsck/unix.c:173
+#: e2fsck/unix.c:194
 #, c-format
-msgid "%8u large file\n"
-msgid_plural "%8u large files\n"
-msgstr[0] "%8u große Datei\n"
-msgstr[1] "%8u große Dateien\n"
+msgid "%12u large file\n"
+msgid_plural "%12u large files\n"
+msgstr[0] "%12u große Datei\n"
+msgstr[1] "%12u große Dateien\n"
 
-#: e2fsck/unix.c:175
+#: e2fsck/unix.c:196
 #, c-format
 msgid ""
 "\n"
-"%8u regular file\n"
+"%12u regular file\n"
 msgid_plural ""
 "\n"
-"%8u regular files\n"
+"%12u regular files\n"
 msgstr[0] ""
 "\n"
-"%8u reguläre Datei\n"
+"%12u reguläre Datei\n"
 msgstr[1] ""
 "\n"
-"%8u reguläre Dateien\n"
+"%12u reguläre Dateien\n"
 
-#: e2fsck/unix.c:177
+#: e2fsck/unix.c:198
 #, c-format
-msgid "%8u directory\n"
-msgid_plural "%8u directories\n"
-msgstr[0] "%8u Verzeichnis\n"
-msgstr[1] "%8u Verzeichnisse\n"
+msgid "%12u directory\n"
+msgid_plural "%12u directories\n"
+msgstr[0] "%12u Verzeichnis\n"
+msgstr[1] "%12u Verzeichnisse\n"
 
-#: e2fsck/unix.c:179
+#: e2fsck/unix.c:200
 #, c-format
-msgid "%8u character device file\n"
-msgid_plural "%8u character device files\n"
-msgstr[0] "%8u zeichenorientierte Gerätedatei\n"
-msgstr[1] "%8u zeichenorientierte Gerätedateien\n"
+msgid "%12u character device file\n"
+msgid_plural "%12u character device files\n"
+msgstr[0] "%12u zeichenorientierte Gerätedatei\n"
+msgstr[1] "%12u zeichenorientierte Gerätedateien\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:203
 #, c-format
-msgid "%8u block device file\n"
-msgid_plural "%8u block device files\n"
-msgstr[0] "%8u Blockgerätedatei\n"
-msgstr[1] "%8u Blockgerätedateien\n"
+msgid "%12u block device file\n"
+msgid_plural "%12u block device files\n"
+msgstr[0] "%12u Blockgerätedatei\n"
+msgstr[1] "%12u Blockgerätedateien\n"
 
-#: e2fsck/unix.c:184
+#: e2fsck/unix.c:205
 #, c-format
-msgid "%8u fifo\n"
-msgid_plural "%8u fifos\n"
-msgstr[0] "%8u Fifo\n"
-msgstr[1] "%8u Fifos\n"
+msgid "%12u fifo\n"
+msgid_plural "%12u fifos\n"
+msgstr[0] "%12u Fifo\n"
+msgstr[1] "%12u Fifos\n"
 
-#: e2fsck/unix.c:186
+#: e2fsck/unix.c:207
 #, c-format
-msgid "%8u link\n"
-msgid_plural "%8u links\n"
-msgstr[0] "%8u Verknüpfung\n"
-msgstr[1] "%8u Verknüpfungen\n"
+msgid "%12u link\n"
+msgid_plural "%12u links\n"
+msgstr[0] "%12u Verknüpfung\n"
+msgstr[1] "%12u Verknüpfungen\n"
 
-#: e2fsck/unix.c:189
+#: e2fsck/unix.c:210
 #, c-format
-msgid "%8u symbolic link"
-msgid_plural "%8u symbolic links"
-msgstr[0] "%8u symbolische Verknüpfung"
-msgstr[1] "%8u symbolische Verknüpfungen"
+msgid "%12u symbolic link"
+msgid_plural "%12u symbolic links"
+msgstr[0] "%12u symbolische Verknüpfung"
+msgstr[1] "%12u symbolische Verknüpfungen"
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:212
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u schnelle symbolische Verknüpfung)\n"
 msgstr[1] " (%u schnelle symbolische Verknüpfungen)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:216
 #, c-format
-msgid "%8u socket\n"
-msgid_plural "%8u sockets\n"
-msgstr[0] "%8u Socket\n"
-msgstr[1] "%8u Sockets\n"
+msgid "%12u socket\n"
+msgid_plural "%12u sockets\n"
+msgstr[0] "%12u Socket\n"
+msgstr[1] "%12u Sockets\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:220
 #, c-format
-msgid "%8u file\n"
-msgid_plural "%8u files\n"
-msgstr[0] "%8u Datei\n"
-msgstr[1] "%8u Dateien\n"
+msgid "%12u file\n"
+msgid_plural "%12u files\n"
+msgstr[0] "%12u Datei\n"
+msgstr[1] "%12u Dateien\n"
 
-#: e2fsck/unix.c:212 misc/badblocks.c:983 misc/tune2fs.c:1979 misc/util.c:147
+#: e2fsck/unix.c:234 misc/badblocks.c:983 misc/tune2fs.c:1970 misc/util.c:147
 #: resize/main.c:247
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "bei der Prüfung, ob %s eingehängt ist."
 
-#: e2fsck/unix.c:230
-#, fuzzy, c-format
+#: e2fsck/unix.c:254
+#, c-format
 msgid "Warning!  %s is %s.\n"
-msgstr "Warnung!  %s ist eingehängt.\n"
+msgstr "Warnung!  %s ist %s.\n"
 
-#: e2fsck/unix.c:237
+#: e2fsck/unix.c:261
 #, c-format
 msgid "%s is %s.\n"
-msgstr ""
+msgstr "%s ist %s.\n"
 
-#: e2fsck/unix.c:240
+#: e2fsck/unix.c:264
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2795,7 +2764,7 @@ msgstr ""
 "Fortsetzung nicht möglich, breche ab.\n"
 "\n"
 
-#: e2fsck/unix.c:242
+#: e2fsck/unix.c:266
 msgid ""
 "\n"
 "\n"
@@ -2805,86 +2774,83 @@ msgid ""
 msgstr ""
 "\n"
 "\n"
-"WARNUNG!!!  Das Dateisystem ist eingehängt, Wenn Sie fortfahren, "
-"***WERDEN***\n"
+"WARNUNG!!!  Das Dateisystem ist eingehängt, Wenn Sie fortfahren, ***WERDEN***\n"
 "Sie ***SCHWERWIEGENDE*** Schäden am Dateisystem verursachen.\n"
 "\n"
 
-#: e2fsck/unix.c:247
+#: e2fsck/unix.c:271
 msgid "Do you really want to continue"
 msgstr "Wirklich fortfahren"
 
-#: e2fsck/unix.c:249
+#: e2fsck/unix.c:273
 #, c-format
 msgid "check aborted.\n"
 msgstr "Prüfung abgebrochen.\n"
 
-#: e2fsck/unix.c:339
+#: e2fsck/unix.c:363
 msgid " contains a file system with errors"
 msgstr " enthält ein fehlerhaftes Dateisystem"
 
-#: e2fsck/unix.c:341
+#: e2fsck/unix.c:365
 msgid " was not cleanly unmounted"
 msgstr " wurde nicht ordnungsgemäß ausgehängt"
 
-#: e2fsck/unix.c:343
+#: e2fsck/unix.c:367
 msgid " primary superblock features different from backup"
 msgstr "Eigenschaften des primären Superblocks unterscheiden sich vom Backup"
 
-#: e2fsck/unix.c:347
+#: e2fsck/unix.c:371
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " wurde %u mal ohne Überprüfung eingehängt"
 
-#: e2fsck/unix.c:354
+#: e2fsck/unix.c:378
 msgid " has filesystem last checked time in the future"
-msgstr ""
-" hat einen in der Zukunft liegenden Zeitpunkt der letzten Püfung des "
-"Dateisystems"
+msgstr " hat einen in der Zukunft liegenden Zeitpunkt der letzten Püfung des Dateisystems"
 
-#: e2fsck/unix.c:360
+#: e2fsck/unix.c:384
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " wurde %u Tage ohne Überprüfung genutzt"
 
-#: e2fsck/unix.c:369
+#: e2fsck/unix.c:393
 msgid ", check forced.\n"
 msgstr ", Prüfung erzwungen.\n"
 
-#: e2fsck/unix.c:402
+#: e2fsck/unix.c:426
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: sauber, %u/%u Dateien, %llu/%llu Blöcke"
 
-#: e2fsck/unix.c:421
+#: e2fsck/unix.c:445
 msgid " (check deferred; on battery)"
 msgstr " (Prüfung nach nächstem Einhängen)"
 
-#: e2fsck/unix.c:424
+#: e2fsck/unix.c:448
 msgid " (check after next mount)"
 msgstr " (Prüfung nach nächstem Einhängen)"
 
-#: e2fsck/unix.c:426
+#: e2fsck/unix.c:450
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (Prüfung nach %ld Einhängevorgängen)"
 
-#: e2fsck/unix.c:576
+#: e2fsck/unix.c:600
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "Fehler: Kann /dev/null (%s) nicht öffnen\n"
 
-#: e2fsck/unix.c:645
+#: e2fsck/unix.c:669
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Invalid EA version.\n"
 
-#: e2fsck/unix.c:672
+#: e2fsck/unix.c:696
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Unbekannte erweiterte Option: %s\n"
 
-#: e2fsck/unix.c:697
+#: e2fsck/unix.c:721
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2893,56 +2859,55 @@ msgstr ""
 "Syntaxfehler in der Konfigurationsdatei von e2fsck (%s, Zeile %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:766
+#: e2fsck/unix.c:790
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fehler bei Überprüfung des Datei-Deskriptors %d: %s\n"
 
-#: e2fsck/unix.c:770
+#: e2fsck/unix.c:794
 msgid "Invalid completion information file descriptor"
 msgstr "Ungültiger „completion information“-Datei-Deskriptor"
 
-#: e2fsck/unix.c:785
+#: e2fsck/unix.c:809
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Nur eine der Optionen -p/-a, -n oder -y darf angegeben werden."
 
-#: e2fsck/unix.c:806
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Die -t Option wird von dieser e2fsck-Version nicht unterstützt.\n"
 
-#: e2fsck/unix.c:837 e2fsck/unix.c:909 misc/tune2fs.c:811 misc/tune2fs.c:1100
-#: misc/tune2fs.c:1118
+#: e2fsck/unix.c:861 e2fsck/unix.c:933 misc/tune2fs.c:802 misc/tune2fs.c:1091
+#: misc/tune2fs.c:1109
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nicht möglich „%s“ aufzulösen"
 
-#: e2fsck/unix.c:888
+#: e2fsck/unix.c:912
 msgid "The -n and -D options are incompatible."
 msgstr "Die Optionen -n und -D schliessen sich gegenseitig aus."
 
-#: e2fsck/unix.c:893
+#: e2fsck/unix.c:917
 msgid "The -n and -c options are incompatible."
 msgstr "Die Optionen -n und -c schliessen sich gegenseitig aus."
 
-#: e2fsck/unix.c:898
+#: e2fsck/unix.c:922
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Die Optionen -n und -l/-L schliessen sich gegenseitig aus."
 
-#: e2fsck/unix.c:943
+#: e2fsck/unix.c:976
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
-msgstr ""
-"Die -c und -l/-L Optionen dürfen nicht gleichzeitig verwendet werden.\n"
+msgstr "Die -c und -l/-L Optionen dürfen nicht gleichzeitig verwendet werden.\n"
 
-#: e2fsck/unix.c:991
+#: e2fsck/unix.c:1024
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr "2FSCK_JBD_DEBUG \"%s\" ist keine Ganzzahl\n"
 
-#: e2fsck/unix.c:1000
+#: e2fsck/unix.c:1033
 #, c-format
 msgid ""
 "\n"
@@ -2953,20 +2918,18 @@ msgstr ""
 "Ungültiges nicht-numerisches Argument für -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1089
+#: e2fsck/unix.c:1122
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
 msgstr ""
 "MMP Intervall ist %u Sekunden und die gesammte Wartezeit ist %u Sekunden.\n"
 "Bitte warten...\n"
 
-#: e2fsck/unix.c:1106 e2fsck/unix.c:1111
+#: e2fsck/unix.c:1139 e2fsck/unix.c:1144
 msgid "while checking MMP block"
 msgstr "beim Prüfen des MMP-Blocks"
 
-#: e2fsck/unix.c:1113 misc/tune2fs.c:1912
+#: e2fsck/unix.c:1146 misc/tune2fs.c:1903
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
@@ -2975,48 +2938,48 @@ msgstr ""
 "starten Sie bitte:\n"
 "„tune2fs -f -E clear_mmp {device}“\n"
 
-#: e2fsck/unix.c:1163
+#: e2fsck/unix.c:1196
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fehler: ext2fs-Bibliotheks-Version ist zu alt!\n"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1204
 msgid "while trying to initialize program"
 msgstr "bei der Programminitialisierung"
 
-#: e2fsck/unix.c:1194
+#: e2fsck/unix.c:1227
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tBenutze %s, %s\n"
 
-#: e2fsck/unix.c:1206
+#: e2fsck/unix.c:1239
 msgid "need terminal for interactive repairs"
 msgstr "Benötige ein Terminal für interaktive Reparaturen"
 
-#: e2fsck/unix.c:1256
+#: e2fsck/unix.c:1292
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s versuche es mit Backup-Blöcken...\n"
 
-#: e2fsck/unix.c:1258
+#: e2fsck/unix.c:1294
 msgid "Superblock invalid,"
 msgstr "Superblock ungültig"
 
-#: e2fsck/unix.c:1259
+#: e2fsck/unix.c:1295
 msgid "Group descriptors look bad..."
 msgstr "Gruppen-Deskriptoren scheinen defekt zu sein..."
 
-#: e2fsck/unix.c:1269
+#: e2fsck/unix.c:1305
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s beim Benutzen der Backup-Blöcke"
 
-#: e2fsck/unix.c:1273
+#: e2fsck/unix.c:1309
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: es wird zum originalen Superblock zurück gekehrt\n"
 
-#: e2fsck/unix.c:1301
+#: e2fsck/unix.c:1337
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3026,32 +2989,31 @@ msgstr ""
 "von e2fsck (oder der Dateisystem-Superblock ist defekt).\n"
 "\n"
 
-#: e2fsck/unix.c:1307
+#: e2fsck/unix.c:1343
 msgid "Could this be a zero-length partition?\n"
 msgstr "Könnte es eine Partion der Länge Null sein?\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1346
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Sie benötigen %s- oder root-Rechte für das Dateisystem.\n"
 
-#: e2fsck/unix.c:1315
+#: e2fsck/unix.c:1351
 msgid "Possibly non-existent or swap device?\n"
-msgstr ""
-"Möglicherweise ist die Partition nicht vorhanden oder eine Swap-Partition?\n"
+msgstr "Möglicherweise ist die Partition nicht vorhanden oder eine Swap-Partition?\n"
 
-#: e2fsck/unix.c:1318
+#: e2fsck/unix.c:1354
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Ist das Dateisystem eingehängt or exklusiv von einem anderen Programm\n"
 "\n"
 "geöffnet worden?\n"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1357
 msgid "Possibly non-existent device?\n"
 msgstr "Ist das Gerät möglicherweise nicht vorhanden?\n"
 
-#: e2fsck/unix.c:1324
+#: e2fsck/unix.c:1360
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3059,44 +3021,40 @@ msgstr ""
 "Laufwerk ist schreibgeschützt, nutzen Sie die -n Option\n"
 "um es im Nur-Lesen-Modus zu prüfen.\n"
 
-#: e2fsck/unix.c:1389
+#: e2fsck/unix.c:1425
 msgid "Get a newer version of e2fsck!"
 msgstr "Neuere Version von e2fsck benötigt!"
 
-#: e2fsck/unix.c:1437
+#: e2fsck/unix.c:1469
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "während der Prüfung des ext3-Journals für %s"
 
-#: e2fsck/unix.c:1448
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
-msgstr ""
-"Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur-"
-"Lesen-Modus ist.\n"
+#: e2fsck/unix.c:1480
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Warnung: Überspringe Journal-Wiederherstellung, da das Dateisystem im Nur-Lesen-Modus ist.\n"
 
-#: e2fsck/unix.c:1461
+#: e2fsck/unix.c:1493
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "Superblock-Flags konntan auf %s nicht gesetzt werden\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1499
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "bei der Wiederherstellung des ext3-Journals von %s"
 
-#: e2fsck/unix.c:1492
+#: e2fsck/unix.c:1523
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s besitzt nicht unterstützte Eigenschaft(en):"
 
-#: e2fsck/unix.c:1507
+#: e2fsck/unix.c:1538
 #, c-format
 msgid "%s: warning: compression support is experimental.\n"
 msgstr "%s: Warnung: Die Kompressionsunterstützung ist experimentell.\n"
 
-#: e2fsck/unix.c:1513
+#: e2fsck/unix.c:1544
 #, c-format
 msgid ""
 "%s: e2fsck not compiled with HTREE support,\n"
@@ -3105,25 +3063,25 @@ msgstr ""
 "%s: e2fsck wurde ohne Unterstützung für HTREE kompiliert,\n"
 "\taber das Dateisystem %s besitzt HTREE Verzeichnisse.\n"
 
-#: e2fsck/unix.c:1565
+#: e2fsck/unix.c:1596
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s beim Lesen des Bad-Block-Inodes\n"
 
-#: e2fsck/unix.c:1568
+#: e2fsck/unix.c:1599
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Das verheißt nichts gutes, aber wir versuchen es trotzdem ..\n"
 
-#: e2fsck/unix.c:1609
+#: e2fsck/unix.c:1640
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Erstelle Journal (%d Blöcke): "
 
-#: e2fsck/unix.c:1619
+#: e2fsck/unix.c:1650
 msgid " Done.\n"
 msgstr " Erledigt.\n"
 
-#: e2fsck/unix.c:1620
+#: e2fsck/unix.c:1651
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
@@ -3131,24 +3089,24 @@ msgstr ""
 "\n"
 "*** Journal wurde wiederhergestellt - Dateisystem ist nun wieder ext3 ***\n"
 
-#: e2fsck/unix.c:1643
+#: e2fsck/unix.c:1674
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Beginne e2fsck neu ...\n"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1678
 msgid "while resetting context"
 msgstr "beim Rücksetzen des Kontexts"
 
-#: e2fsck/unix.c:1654
+#: e2fsck/unix.c:1685
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck abgebrochen.\n"
 
-#: e2fsck/unix.c:1659
+#: e2fsck/unix.c:1690
 msgid "aborted"
 msgstr "abgebrochen"
 
-#: e2fsck/unix.c:1671 e2fsck/util.c:67
+#: e2fsck/unix.c:1702 e2fsck/util.c:67
 #, c-format
 msgid ""
 "\n"
@@ -3157,12 +3115,12 @@ msgstr ""
 "\n"
 "%s: ***** DATEISYSTEM WURDE VERÄNDERT *****\n"
 
-#: e2fsck/unix.c:1675
+#: e2fsck/unix.c:1706
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** LINUX MUSS NEU GESTARTET WERDEN *****\n"
 
-#: e2fsck/unix.c:1683 e2fsck/util.c:73
+#: e2fsck/unix.c:1714 e2fsck/util.c:73
 #, c-format
 msgid ""
 "\n"
@@ -3173,7 +3131,7 @@ msgstr ""
 "%s: ********** WARNUNG: Noch Fehler im Dateisystem  **********\n"
 "\n"
 
-#: e2fsck/unix.c:1723
+#: e2fsck/unix.c:1754
 msgid "while setting block group checksum info"
 msgstr "beim Setzen der Blockgruppen-Prüfsummeninfo"
 
@@ -3256,9 +3214,7 @@ msgstr "Schreibe Block- und Inode-Bitmaps"
 #: e2fsck/util.c:302
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
-msgstr ""
-"während des wiederholten Versuches, Block- und Inode-Bitmaps für %s zu "
-"schreiben."
+msgstr "während des wiederholten Versuches, Block- und Inode-Bitmaps für %s zu schreiben."
 
 #: e2fsck/util.c:314
 #, c-format
@@ -3308,12 +3264,8 @@ msgid "while allocating zeroizing buffer"
 msgstr "beim reservieren eines Puffers zum Nullen"
 
 #: e2fsck/util.c:788
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"UNERWARTETE INKONSISTENZ: das Dateisystem wird modifiziert während fsck "
-"läuft.\n"
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "UNERWARTETE INKONSISTENZ: das Dateisystem wird modifiziert während fsck läuft.\n"
 
 #: misc/badblocks.c:69
 msgid "done                                                 \n"
@@ -3323,14 +3275,12 @@ msgstr "erledigt                                             \n"
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
-"max_bad_blocks]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
 "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
 "       device [last_block [first_block]]\n"
 msgstr ""
 "Aufruf: %s [-b Blockgröße] [-i Eingabedatei] [-o Ausgabedatei] [-svwnf]\n"
-"        [-c Blöcke_auf_einmal] [-d "
-"Verzögerungsfaktor_zwischen_Lesedurchgängen]\n"
+"        [-c Blöcke_auf_einmal] [-d Verzögerungsfaktor_zwischen_Lesedurchgängen]\n"
 "        [-e maximale_Bad_Blocks] [-p Anzahl_Durchgänge]\n"
 "        [-t Testmuster [-t Testmuster [...]]]\n"
 "        Gerät [letzter_Block [Startblock]]\n"
@@ -3411,13 +3361,11 @@ msgstr "Lesen und Vergleichen:"
 
 #: misc/badblocks.c:771
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
-msgstr ""
-"Suche nach defekten Blöcken im zerstörungsfreien Lesen+Schreiben-Modus\n"
+msgstr "Suche nach defekten Blöcken im zerstörungsfreien Lesen+Schreiben-Modus\n"
 
 #: misc/badblocks.c:777
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr ""
-"Suche nach defekten Blöcken (zerstörungsfreier Lesen+Schreiben-Modus)\n"
+msgstr "Suche nach defekten Blöcken (zerstörungsfreier Lesen+Schreiben-Modus)\n"
 
 #: misc/badblocks.c:784
 msgid ""
@@ -3439,8 +3387,7 @@ msgstr "%s ist eingehängt; "
 
 #: misc/badblocks.c:990
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr ""
-"Badblocks wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
+msgstr "Badblocks wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
 
 #: misc/badblocks.c:995
 msgid "it's not safe to run badblocks!\n"
@@ -3453,8 +3400,7 @@ msgstr "%s wird offensichtlich vom System genutzt; "
 
 #: misc/badblocks.c:1003
 msgid "badblocks forced anyway.\n"
-msgstr ""
-"Badblocks wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
+msgstr "Badblocks wird trotzdem erzwungen. Hoffentlich ist /etc/mtab nicht korrekt.\n"
 
 #: misc/badblocks.c:1023
 #, c-format
@@ -3478,8 +3424,7 @@ msgstr "Zufälliges Testmuster ist im Nur-Lesen-Modus nicht erlaubt"
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
-msgstr ""
-"Größe des Gerätes ist nicht feststellbar. Sie müssen sie manuell angeben.\n"
+msgstr "Größe des Gerätes ist nicht feststellbar. Sie müssen sie manuell angeben.\n"
 
 #: misc/badblocks.c:1189
 msgid "while trying to determine device size"
@@ -3513,69 +3458,68 @@ msgstr "Durchgang beendet, %u defekte Blöcke gefunden. (%d/%d/%d Fehler)\n"
 
 #: misc/chattr.c:86
 #, c-format
-msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
-msgstr "Aufruf: %s [-RVf] [-+=AacDdeijsSu] [-v Version] Dateien...\n"
+msgid "Usage: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] files...\n"
+msgstr "Aufruf: %s [-RVf] [-+=AaCcDdeijsSu] [-v Version] Dateien...\n"
 
-#: misc/chattr.c:154
+#: misc/chattr.c:155
 #, c-format
 msgid "bad version - %s\n"
 msgstr "falsche Version - %s\n"
 
-#: misc/chattr.c:201 misc/lsattr.c:116
+#: misc/chattr.c:202 misc/lsattr.c:116
 #, c-format
 msgid "while trying to stat %s"
 msgstr "beim Auslesen des Status von %s"
 
-#: misc/chattr.c:208
+#: misc/chattr.c:209
 #, c-format
 msgid "while reading flags on %s"
 msgstr "beim Lesens der Flags in %s"
 
-#: misc/chattr.c:217 misc/chattr.c:236
+#: misc/chattr.c:218 misc/chattr.c:237
 #, c-format
 msgid "Clearing extent flag not supported on %s"
 msgstr ""
 "Das Zurücksetzen des Kennzeichens für „Erweiterung“ wird auf %s\n"
 "\tnicht unterstützt"
 
-#: misc/chattr.c:222 misc/chattr.c:241
+#: misc/chattr.c:223 misc/chattr.c:242
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Flags von %s wie folgt gesetzt: "
 
-#: misc/chattr.c:250
+#: misc/chattr.c:251
 #, c-format
 msgid "while setting flags on %s"
 msgstr "beim Setzen der Flags in %s"
 
-#: misc/chattr.c:258
+#: misc/chattr.c:259
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version von %s gesetzt auf %lu\n"
 
-#: misc/chattr.c:262
+#: misc/chattr.c:263
 #, c-format
 msgid "while setting version on %s"
 msgstr "beim Setzen der Version in %s"
 
-#: misc/chattr.c:282
+#: misc/chattr.c:283
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Konnte Pfad-Variable in chattr_dir_proc nicht reservieren"
 
-#: misc/chattr.c:322
+#: misc/chattr.c:323
 msgid "= is incompatible with - and +\n"
 msgstr "= ist inkompatibel mit - und +\n"
 
-#: misc/chattr.c:330
+#: misc/chattr.c:331
 msgid "Must use '-v', =, - or +\n"
 msgstr "Benutze „-v“, =, - oder +\n"
 
 #: misc/dumpe2fs.c:55
 #, c-format
 msgid "Usage: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Aufruf: %s [-bfhixV] [-o superblock=<Nummer>] [-o blocksize=<Nummer>] Gerät\n"
+msgstr "Aufruf: %s [-bfhixV] [-o superblock=<Nummer>] [-o blocksize=<Nummer>] Gerät\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -3717,9 +3661,9 @@ msgstr ""
 "Journal-Start:            %u\n"
 
 #: misc/dumpe2fs.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "Journal errno:            %d\n"
-msgstr "Jounalnutzer:            %s\n"
+msgstr "Jounal-Fehlernummer:      %d\n"
 
 #: misc/dumpe2fs.c:401 misc/tune2fs.c:218
 msgid "while reading journal superblock"
@@ -3753,7 +3697,7 @@ msgstr ""
 msgid "Journal users:            %s\n"
 msgstr "Jounalnutzer:            %s\n"
 
-#: misc/dumpe2fs.c:442 misc/mke2fs.c:662 misc/tune2fs.c:1137
+#: misc/dumpe2fs.c:442 misc/mke2fs.c:665 misc/tune2fs.c:1128
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Speicher zum Parsen der Optionen konnte nicht reserviert werden!\n"
@@ -3792,12 +3736,12 @@ msgstr ""
 "\tblocksize=<Blockgrösse>\n"
 "\n"
 
-#: misc/dumpe2fs.c:554 misc/mke2fs.c:1525
+#: misc/dumpe2fs.c:554 misc/mke2fs.c:1528
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tBenutze %s\n"
 
-#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1923
+#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1914
 #: resize/main.c:305
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
@@ -3845,8 +3789,7 @@ msgstr "beim Schreiben der Inode-Bitmap"
 #: misc/e2image.c:1341
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
-msgstr ""
-"beim Versuch, das Qcow2-Image (%s) in ein rohes Image (%s) zu konvertieren"
+msgstr "beim Versuch, das Qcow2-Image (%s) in ein rohes Image (%s) zu konvertieren"
 
 #: misc/e2label.c:58
 #, c-format
@@ -3868,7 +3811,7 @@ msgstr "e2label: Lesefehler im Superblock\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: Kein ext2 Dateisystem\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2074
+#: misc/e2label.c:97 misc/tune2fs.c:2065
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Warnung: Name zu lang, kürze ihn.\n"
@@ -3883,7 +3826,7 @@ msgstr "e2label: cannot seek to superblock again\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: Fehler beim Schreiben des Superblocks\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:803
+#: misc/e2label.c:117 misc/tune2fs.c:794
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Aufruf: e2label Gerät [neuer_Name]\n"
@@ -4007,9 +3950,7 @@ msgstr "Kann keinen Speicher für Dateisystemtypen reservieren.\n"
 
 #: misc/fsck.c:884
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
 msgstr ""
 "%s: überspringe die ungültige Zeile in /etc/fstab: bind mount mit\n"
 " Durchgangsnummer für fsck, die nicht Null ist\n"
@@ -4029,11 +3970,8 @@ msgid "--waiting-- (pass %d)\n"
 msgstr "--warten-- (Durchgang %d)\n"
 
 #: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"Aufruf: fsck [-AMNPRTV] [ -C [ fd ] ] [-t Datesystemtyp] [FS-Optionen] "
-"[Dateisystem...]\n"
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Aufruf: fsck [-AMNPRTV] [ -C [ fd ] ] [-t Datesystemtyp] [FS-Optionen] [Dateisystem...]\n"
 
 #: misc/fsck.c:1120
 #, c-format
@@ -4060,7 +3998,7 @@ msgstr "Beim Lesen der Flags von %s"
 msgid "While reading version on %s"
 msgstr "Beim Lesen der Version von %s"
 
-#: misc/mke2fs.c:114
+#: misc/mke2fs.c:115
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4069,8 +4007,7 @@ msgid ""
 "\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-"
-"count]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]\n"
 msgstr ""
 "Aufruf: %s [-c|-l Dateiname] [-b Blockgröße] [-C Clustergröße]\n"
 "\t[-i Bytes-pro-Inode] [-I Inodegrösse] [-J Journal-Optionen]\n"
@@ -4082,132 +4019,130 @@ msgstr ""
 "\t[-t Dateisystemtyp] [-T Verwendungs-Typ ] [-U UUID] [-jnqvFKSV]\n"
 "\tGerät [Block-Anzahl]\n"
 
-#: misc/mke2fs.c:217
+#: misc/mke2fs.c:218
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Es wird ausgeführt: %s\n"
 
-#: misc/mke2fs.c:221
+#: misc/mke2fs.c:222
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "während des Versuchs, „%s“ auszuführen"
 
-#: misc/mke2fs.c:228
+#: misc/mke2fs.c:229
 msgid "while processing list of bad blocks from program"
 msgstr "beim Auswerten der „Bad Block“-Liste vom Programm"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:256
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Block %d im primären Superblock/Gruppendeskriptorbereich defekt.\n"
 
-#: misc/mke2fs.c:257
+#: misc/mke2fs.c:258
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Die Blöcke %u bis einschließlich %u müssen in Ordung sein, um ein\n"
 "\tDateisystem zu erstellen.\n"
 
-#: misc/mke2fs.c:260
+#: misc/mke2fs.c:261
 msgid "Aborting....\n"
 msgstr "Abbruch...\n"
 
-#: misc/mke2fs.c:280
+#: misc/mke2fs.c:281
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
 "\tbad blocks.\n"
 "\n"
 msgstr ""
-"Warnung: die Sicherung des Superblock bzw. Gruppendeskriptors in Block %u "
-"enthält\n"
+"Warnung: die Sicherung des Superblock bzw. Gruppendeskriptors in Block %u enthält\n"
 "\tdefekte Blöcke.\n"
 "\n"
 
-#: misc/mke2fs.c:299
+#: misc/mke2fs.c:300
 msgid "while marking bad blocks as used"
 msgstr "beim Markieren von defekten Blöcken als „belegt“"
 
-#: misc/mke2fs.c:316
+#: misc/mke2fs.c:317
 msgid "Writing inode tables: "
 msgstr "Inode-Tabellen werden geschrieben: "
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:339
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %llu: %s\n"
 msgstr ""
 "\n"
-"%d Blöcke konnten nicht in die Inoden-Tabellen beginnend bei %llu "
-"geschrieben werden: %s\n"
+"%d Blöcke konnten nicht in die Inoden-Tabellen beginnend bei %llu geschrieben werden: %s\n"
 
-#: misc/mke2fs.c:351 misc/mke2fs.c:2175 misc/mke2fs.c:2429
+#: misc/mke2fs.c:353 misc/mke2fs.c:2181 misc/mke2fs.c:2435
 #, c-format
 msgid "done                            \n"
 msgstr "erledigt                        \n"
 
-#: misc/mke2fs.c:362
+#: misc/mke2fs.c:364
 msgid "while creating root dir"
 msgstr "beim Erstellen des Wurzelverzeichnisses"
 
-#: misc/mke2fs.c:369
+#: misc/mke2fs.c:371
 msgid "while reading root inode"
 msgstr "beim Lesen des Root-Inode"
 
-#: misc/mke2fs.c:383
+#: misc/mke2fs.c:385
 msgid "while setting root inode ownership"
 msgstr "beim Setzen des Root-Inode-Eigentümers"
 
-#: misc/mke2fs.c:401
+#: misc/mke2fs.c:403
 msgid "while creating /lost+found"
 msgstr "beim Erstellen von /lost+found"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:410
 msgid "while looking up /lost+found"
 msgstr "beim Suchen von /lost+found"
 
-#: misc/mke2fs.c:421
+#: misc/mke2fs.c:423
 msgid "while expanding /lost+found"
 msgstr "beim Expandieren von /lost+found"
 
-#: misc/mke2fs.c:436
+#: misc/mke2fs.c:438
 msgid "while setting bad block inode"
 msgstr "beim Setzen des „Bad Block“-Inodes"
 
-#: misc/mke2fs.c:463
+#: misc/mke2fs.c:465
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Speicher voll beim Löschen der Sektoren %d-%d\n"
 
-#: misc/mke2fs.c:473
+#: misc/mke2fs.c:475
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Warnung: konnte Block %s nicht lesen\n"
 
-#: misc/mke2fs.c:489
+#: misc/mke2fs.c:491
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Warnung: konnte Sektor %d: %s nicht löschen\n"
 
-#: misc/mke2fs.c:505
+#: misc/mke2fs.c:507
 msgid "while initializing journal superblock"
 msgstr "beim Initialisieren des Journal-Superblocks"
 
-#: misc/mke2fs.c:513
+#: misc/mke2fs.c:515
 msgid "Zeroing journal device: "
 msgstr "Überschreibe Journal-Device mit Nullen: "
 
-#: misc/mke2fs.c:525
+#: misc/mke2fs.c:527
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "beim Überschreiben des Journal-Device mit Nullen (Block %llu, Nr. %d)"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:546
 msgid "while writing journal superblock"
 msgstr "beim Schreiben des Journal-Superblocks"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:561
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -4216,126 +4151,124 @@ msgstr ""
 "Warnung: %llu Blöcke unbenutzt.\n"
 "\n"
 
-#: misc/mke2fs.c:563
+#: misc/mke2fs.c:566
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Dateisystem-Label=%s\n"
 
-#: misc/mke2fs.c:566
+#: misc/mke2fs.c:569
 #, c-format
 msgid "OS type: %s\n"
 msgstr "OS-Typ: %s\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:571
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blockgröße=%u (log=%u)\n"
 
-#: misc/mke2fs.c:572
+#: misc/mke2fs.c:575
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Clustergröße=%u (log=%u)\n"
 
-#: misc/mke2fs.c:576
+#: misc/mke2fs.c:579
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentgröße=%u (log=%u)\n"
 
-#: misc/mke2fs.c:578
+#: misc/mke2fs.c:581
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Stride=%u Blöcke, Stripebreite=%u Blöcke\n"
 
-#: misc/mke2fs.c:580
+#: misc/mke2fs.c:583
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u Inodes, %llu Blöcke\n"
 
-#: misc/mke2fs.c:582
+#: misc/mke2fs.c:585
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu Blöcke (%2.2f%%) reserviert für den Superuser\n"
 
-#: misc/mke2fs.c:585
+#: misc/mke2fs.c:588
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Erster Datenblock=%u\n"
 
-#: misc/mke2fs.c:587
+#: misc/mke2fs.c:590
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximale Dateisystem-Blöcke=%lu\n"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:594
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u Blockgruppen\n"
 
-#: misc/mke2fs.c:593
+#: misc/mke2fs.c:596
 #, c-format
 msgid "%u block group\n"
 msgstr "%u Blockgruppe\n"
 
-#: misc/mke2fs.c:596
+#: misc/mke2fs.c:599
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u Blöcke pro Gruppe, %u Cluster pro Gruppe\n"
 
-#: misc/mke2fs.c:599
+#: misc/mke2fs.c:602
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u Blöcke pro Gruppe, %u Fragmente pro Gruppe\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:604
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u Inodes pro Gruppe\n"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:611
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblock-Sicherungskopien gespeichert in den Blöcken: "
 
-#: misc/mke2fs.c:687 misc/tune2fs.c:1165
+#: misc/mke2fs.c:690 misc/tune2fs.c:1156
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Ungültiges mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:704
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ungültiger \"stride\"-Parameter: %s\n"
 
-#: misc/mke2fs.c:716
+#: misc/mke2fs.c:719
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Ungültiger Stripebreite-Parameter: %s\n"
 
-#: misc/mke2fs.c:739
+#: misc/mke2fs.c:742
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Ungültiger \"resize\"-Parameter: %s\n"
 
-#: misc/mke2fs.c:746
+#: misc/mke2fs.c:749
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"Das Maximum der Vergrösserung muss oberhalb als der Dateisystem-Grösse "
-"liegen.\n"
+msgstr "Das Maximum der Vergrösserung muss oberhalb als der Dateisystem-Grösse liegen.\n"
 
-#: misc/mke2fs.c:770
+#: misc/mke2fs.c:773
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 "Online-Grössenänderungen werden bei Revison 0 Dateisystemen nicht\n"
 "\tunterstützt\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:811
 #, c-format
 msgid "Invalid quotatype parameter: %s\n"
 msgstr "Ungültiger Quotatyp-Parameter: %s\n"
 
-#: misc/mke2fs.c:819
+#: misc/mke2fs.c:822
 #, c-format
 msgid ""
 "\n"
@@ -4376,7 +4309,7 @@ msgstr ""
 "\tquotatype=<usr ODER grp>\n"
 "\n"
 
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:842
 #, c-format
 msgid ""
 "\n"
@@ -4388,7 +4321,7 @@ msgstr ""
 "\tStride %u.\n"
 "\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:881
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -4397,17 +4330,17 @@ msgstr ""
 "Syntax Fehler in der Konfigurationsdatei von mkefs (%s, Zeile %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:891 misc/tune2fs.c:393
+#: misc/mke2fs.c:894 misc/tune2fs.c:393
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ungültige Dateisystem-Option gesetzt: %s\n"
 
-#: misc/mke2fs.c:903 misc/tune2fs.c:345
+#: misc/mke2fs.c:906 misc/tune2fs.c:345
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ungültige Einhänge-Option gesetzt: %s\n"
 
-#: misc/mke2fs.c:1043
+#: misc/mke2fs.c:1046
 #, c-format
 msgid ""
 "\n"
@@ -4416,22 +4349,21 @@ msgstr ""
 "\n"
 "Ihre mke2fs.conf Datei enhält keine Definitiion des %s Dateisystems.\n"
 
-#: misc/mke2fs.c:1047
+#: misc/mke2fs.c:1050
 #, c-format
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
-"Sie müssen wahrscheinlich eine aktualisierte mke2fs.conf Datei "
-"installieren.\n"
+"Sie müssen wahrscheinlich eine aktualisierte mke2fs.conf Datei installieren.\n"
 "\n"
 
-#: misc/mke2fs.c:1051
+#: misc/mke2fs.c:1054
 #, c-format
 msgid "Aborting...\n"
 msgstr "Breche ab...\n"
 
-#: misc/mke2fs.c:1091
+#: misc/mke2fs.c:1094
 #, c-format
 msgid ""
 "\n"
@@ -4442,122 +4374,118 @@ msgstr ""
 "Warnung: Der fs_type %s ist in mke2fs.conf nicht definiert\n"
 "\n"
 
-#: misc/mke2fs.c:1249
+#: misc/mke2fs.c:1252
 #, c-format
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Kann keinen Speicher für den neuen PATH reservieren\n"
 
-#: misc/mke2fs.c:1290
+#: misc/mke2fs.c:1293
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Das Profil konnte nicht erfolgreich initiiert werden (Fehler: %ld).\n"
 
-#: misc/mke2fs.c:1330
+#: misc/mke2fs.c:1333
 #, c-format
 msgid "invalid block size - %s"
 msgstr "bad block Größe - %s"
 
-#: misc/mke2fs.c:1334
+#: misc/mke2fs.c:1337
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Warnung: Blockgröße %d ist auf den meisten Systemen unbrauchbar.\n"
 
-#: misc/mke2fs.c:1350
+#: misc/mke2fs.c:1353
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "unzulässige Clustergröße - %s"
 
-#: misc/mke2fs.c:1362
+#: misc/mke2fs.c:1365
 msgid "Illegal number for blocks per group"
 msgstr "unzulässige Angabe für Blöcke pro Gruppe"
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1370
 msgid "blocks per group must be multiple of 8"
 msgstr "Anzahl der Blöcke pro Gruppe muss ein Vielfaches von 8 sein"
 
-#: misc/mke2fs.c:1375
+#: misc/mke2fs.c:1378
 msgid "Illegal number for flex_bg size"
 msgstr "Illegale Zahl für flex_bg Größe"
 
-#: misc/mke2fs.c:1381
+#: misc/mke2fs.c:1384
 msgid "flex_bg size must be a power of 2"
 msgstr "flex_bg Größe muss eine Zweierpotenz sein"
 
-#: misc/mke2fs.c:1391
+#: misc/mke2fs.c:1394
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "Unzulässiges Inode-Verhältnis %s (Min %d/Max %d"
 
-#: misc/mke2fs.c:1401
+#: misc/mke2fs.c:1404
 #, c-format
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Warnung: die Option -K ist veraltet und sollte nicht mehr verwendet werden. "
-"Verwenden Sie bitte stattdessen die erweiterte Option „-E nodiscard“\n"
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Warnung: die Option -K ist veraltet und sollte nicht mehr verwendet werden. Verwenden Sie bitte stattdessen die erweiterte Option „-E nodiscard“\n"
 
-#: misc/mke2fs.c:1415
+#: misc/mke2fs.c:1418
 msgid "in malloc for bad_blocks_filename"
 msgstr "in malloc for bad_blocks_filename"
 
-#: misc/mke2fs.c:1425
+#: misc/mke2fs.c:1428
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "Unzulässige \"Reservierte Blöcke\"-Prozentangabe - %s"
 
-#: misc/mke2fs.c:1443
+#: misc/mke2fs.c:1446
 #, c-format
 msgid "bad revision level - %s"
 msgstr "ungültiges Intervall - %s"
 
-#: misc/mke2fs.c:1455
+#: misc/mke2fs.c:1458
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "Unzulässige Inode-Größe - %s"
 
-#: misc/mke2fs.c:1475
+#: misc/mke2fs.c:1478
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "ungültiges Intervall - %s"
 
-#: misc/mke2fs.c:1492
+#: misc/mke2fs.c:1495
 msgid "The -t option may only be used once"
 msgstr "Die Option -t darf nur eimal angegeben werden"
 
-#: misc/mke2fs.c:1500
+#: misc/mke2fs.c:1503
 msgid "The -T option may only be used once"
 msgstr "Die Option -T darf nur eimal angegeben werden"
 
-#: misc/mke2fs.c:1550 misc/mke2fs.c:2508
+#: misc/mke2fs.c:1553 misc/mke2fs.c:2514
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "beim Versuch, das Journal-Device %s zu öffnen\n"
 
-#: misc/mke2fs.c:1556
+#: misc/mke2fs.c:1559
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Journal-Device Blockgröße (%d) kleiner als Minimum-Blockgröße %d\n"
 
-#: misc/mke2fs.c:1562
+#: misc/mke2fs.c:1565
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Verwende die Blockgrösse des Geräts: %d\n"
 
-#: misc/mke2fs.c:1573
+#: misc/mke2fs.c:1576
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "ungültige Blöcke  „%s“ auf Gerät „%s“"
 
-#: misc/mke2fs.c:1583
+#: misc/mke2fs.c:1586
 msgid "filesystem"
 msgstr "Dateisystem"
 
-#: misc/mke2fs.c:1596 resize/main.c:374
+#: misc/mke2fs.c:1599 resize/main.c:355
 msgid "while trying to determine filesystem size"
 msgstr "beim Bestimmen der Dateisystemgröße"
 
-#: misc/mke2fs.c:1602
+#: misc/mke2fs.c:1605
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -4565,7 +4493,7 @@ msgstr ""
 "Konnte die Gerätegröße nicht ermitteln. Geben\n"
 "Sie die Größe des Dateisystems an\n"
 
-#: misc/mke2fs.c:1609
+#: misc/mke2fs.c:1612
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4578,16 +4506,16 @@ msgstr ""
 "\tin Gebrauch und gesperrt ist. Sie könnten gezwungen sein, neu zu\n"
 "\tbooten, um die Partitionstabelle neu einzulesen.\n"
 
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1629
 msgid "Filesystem larger than apparent device size."
 msgstr "Dateisystem ist größer als augenscheinlich das Gerät selbst."
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1649
 #, c-format
 msgid "Failed to parse fs types list\n"
 msgstr "Analyse der Liste von Dateisystemen war nicht möglich\n"
 
-#: misc/mke2fs.c:1700
+#: misc/mke2fs.c:1703
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -4596,35 +4524,35 @@ msgstr ""
 "%1$s: Die Größe von Gerät %3$s (0x%2$llx) lässt sich bei Verwendung einer\n"
 "\tBlockgröße von %4$d nicht mit 32 Bits darstellen.\n"
 
-#: misc/mke2fs.c:1716
+#: misc/mke2fs.c:1719
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types für mke2fs.conf Lösung: "
 
-#: misc/mke2fs.c:1723
+#: misc/mke2fs.c:1726
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Dateisystem-Eigenschaften werden für Dateisysteme der Revision 0 nicht\n"
 "\tunterstützt\n"
 
-#: misc/mke2fs.c:1730
+#: misc/mke2fs.c:1733
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 "Verteilte Superblöcke werden für Dateisysteme der Revision 0 nicht\n"
 "\tunterstützt\n"
 
-#: misc/mke2fs.c:1742
+#: misc/mke2fs.c:1745
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Journale werden für Dateisysteme der Revision 0 nicht unterstützt\n"
 
-#: misc/mke2fs.c:1756
+#: misc/mke2fs.c:1759
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "Unzulässige \"Reservierte Blöcke\"-Prozentangabe - %lf"
 
-#: misc/mke2fs.c:1772
+#: misc/mke2fs.c:1775
 #, c-format
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
@@ -4633,89 +4561,80 @@ msgstr ""
 "Die Eigenschaften resize_inode und meta_bg sind nicht kompatibel.\n"
 "Sie können nicht gleichzeitig aktiviert werden.\n"
 
-#: misc/mke2fs.c:1789
+#: misc/mke2fs.c:1792
 msgid "while trying to determine hardware sector size"
 msgstr "beim Ermitteln der Hardware-Sektorgröße"
 
-#: misc/mke2fs.c:1795
+#: misc/mke2fs.c:1798
 msgid "while trying to determine physical sector size"
 msgstr "beim Ermitteln der physischen Sektorgröße"
 
-#: misc/mke2fs.c:1828
+#: misc/mke2fs.c:1831
 msgid "while setting blocksize; too small for device\n"
 msgstr "beim Setzen der Blockgröße; zu klein für das Gerät\n"
 
-#: misc/mke2fs.c:1833
+#: misc/mke2fs.c:1836
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Warnung: die vorgegebene Blockgröße %d ist kleiner als die physische "
-"Sektorgröße %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Warnung: die vorgegebene Blockgröße %d ist kleiner als die physische Sektorgröße %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1867
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "Warnung: Die Geometrie für Gerät %s konnte nicht erfragt werden\n"
 
-#: misc/mke2fs.c:1867
+#: misc/mke2fs.c:1870
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "Die Ausrichtung von %s ist um %lu Bytes verschoben.\n"
 
-#: misc/mke2fs.c:1869
+#: misc/mke2fs.c:1872
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr ""
 "Das könnte zu sehr schlechter Leistung führen. Eine (Neu-)Partionierung\n"
 " wird empfohlen.\n"
 
-#: misc/mke2fs.c:1880
+#: misc/mke2fs.c:1883
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-Byte Blöcke zu groß für das System (max %d)"
 
-#: misc/mke2fs.c:1884
+#: misc/mke2fs.c:1887
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
-msgstr ""
-"Warnung: %d-byte Blöcke sind zu groß für das System (max %d), fahre dennoch "
-"fort\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Warnung: %d-byte Blöcke sind zu groß für das System (max %d), fahre dennoch fort\n"
 
-#: misc/mke2fs.c:1920
+#: misc/mke2fs.c:1925
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "Für Online-Grössenänderungen reservierte Blöcke werden auf Dateisystemen\n"
 "\tohne Unterstützung für Lückenkompression  nicht unterstützt"
 
-#: misc/mke2fs.c:1929
+#: misc/mke2fs.c:1934
 msgid "blocks per group count out of range"
-msgstr "Anzahl der Blöcke pro Gruppe ausserhaalb des gültigen Bereichs"
+msgstr "Anzahl der Blöcke pro Gruppe ausserhalb des gültigen Bereichs"
 
-#: misc/mke2fs.c:1944
+#: misc/mke2fs.c:1949
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"Eigenschaft flex_bg wurde nicht aktiviert, daher darf flex_bg Grösse nicht "
-"angegeben werden"
+msgstr "Eigenschaft flex_bg wurde nicht aktiviert, daher darf flex_bg Grösse nicht angegeben werden"
 
-#: misc/mke2fs.c:1956
+#: misc/mke2fs.c:1961
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ungültige Inode-Größe %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1974
+#: misc/mke2fs.c:1979
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "zu viele Inodes (%llu), Inode-Verhältnis erhöhen?"
 
-#: misc/mke2fs.c:1981
+#: misc/mke2fs.c:1986
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "zu viele Inodes (%llu), sie müssen weniger als 2^32 Inodes angeben"
 
-#: misc/mke2fs.c:1995
+#: misc/mke2fs.c:2000
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4726,57 +4645,54 @@ msgstr ""
 "\tDateisystem mit %llu Blöcken, geben Sie bitte entweder ein höheres\n"
 "\tInodeverhältnis (-i) oder eine niedrigere Anzahl an Inodes (-N) an.\n"
 
-#: misc/mke2fs.c:2114
+#: misc/mke2fs.c:2119
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
 "    e2undo %s %s\n"
 "\n"
 msgstr ""
-"Überschreibe das bestehende Dateisystem; dies kann rückgängig gemacht "
-"werden\n"
+"Überschreibe das bestehende Dateisystem; dies kann rückgängig gemacht werden\n"
 "durch den Befehl:\n"
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/mke2fs.c:2128
+#: misc/mke2fs.c:2133
 msgid "while trying to setup undo file\n"
 msgstr "beim Erstellen der Undodatei\n"
 
-#: misc/mke2fs.c:2154
+#: misc/mke2fs.c:2159
 msgid "Discarding device blocks: "
 msgstr "Blöcke des Gerätes werden verworfen: "
 
-#: misc/mke2fs.c:2170
+#: misc/mke2fs.c:2176
 msgid "failed - "
 msgstr "nicht erfolgreich - "
 
-#: misc/mke2fs.c:2277
+#: misc/mke2fs.c:2283
 msgid "while setting up superblock"
 msgstr "beim Erstellen des Superblocks"
 
-#: misc/mke2fs.c:2286
+#: misc/mke2fs.c:2292
 #, c-format
 msgid "Discard succeeded and will return 0s  - skipping inode table wipe\n"
-msgstr ""
-"Verwerfen war erfolgreich und wird Nullen zurückliefern - das Löschen der "
-"Inode-Tabelle wird übersprungen \n"
+msgstr "Verwerfen war erfolgreich und wird Nullen zurückliefern - das Löschen der Inode-Tabelle wird übersprungen \n"
 
-#: misc/mke2fs.c:2369
+#: misc/mke2fs.c:2375
 #, c-format
 msgid "unknown os - %s"
 msgstr "unbekanntes OS - %s"
 
-#: misc/mke2fs.c:2421
+#: misc/mke2fs.c:2427
 #, c-format
 msgid "Allocating group tables: "
 msgstr "Platz für Gruppentabellen wird angefordert: "
 
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2431
 msgid "while trying to allocate filesystem tables"
 msgstr "beim Zuordnen von Dateisystemtabellen"
 
-#: misc/mke2fs.c:2434
+#: misc/mke2fs.c:2440
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -4784,25 +4700,25 @@ msgstr ""
 "\n"
 "\tbeim Konvertieren der Subcluster-Bitmap"
 
-#: misc/mke2fs.c:2477
+#: misc/mke2fs.c:2483
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "beim Nullen von Block %llu am Ende des Dateisystems"
 
-#: misc/mke2fs.c:2490
+#: misc/mke2fs.c:2496
 msgid "while reserving blocks for online resize"
 msgstr "beim Lesen des Bad-Block-Inodes"
 
-#: misc/mke2fs.c:2501 misc/tune2fs.c:640
+#: misc/mke2fs.c:2507 misc/tune2fs.c:640
 msgid "journal"
 msgstr "Journal"
 
-#: misc/mke2fs.c:2513
+#: misc/mke2fs.c:2519
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Erstelle Journal auf Gerät %s: "
 
-#: misc/mke2fs.c:2520
+#: misc/mke2fs.c:2526
 #, c-format
 msgid ""
 "\n"
@@ -4811,22 +4727,22 @@ msgstr ""
 "\n"
 "\tbeim Erstellen des Journals auf Gerät %s"
 
-#: misc/mke2fs.c:2525 misc/mke2fs.c:2557 misc/tune2fs.c:669 misc/tune2fs.c:683
+#: misc/mke2fs.c:2531 misc/mke2fs.c:2563 misc/tune2fs.c:669 misc/tune2fs.c:683
 #, c-format
 msgid "done\n"
 msgstr "erledigt\n"
 
-#: misc/mke2fs.c:2534
+#: misc/mke2fs.c:2540
 #, c-format
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Die Erzeugung eines Journals wird im Nur-Super Modus übersprungen\n"
 
-#: misc/mke2fs.c:2545
+#: misc/mke2fs.c:2551
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Erstelle Journal (%u Blöcke): "
 
-#: misc/mke2fs.c:2553
+#: misc/mke2fs.c:2559
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -4834,7 +4750,7 @@ msgstr ""
 "\n"
 "\tbeim Erstellen des Journals"
 
-#: misc/mke2fs.c:2564 misc/tune2fs.c:446
+#: misc/mke2fs.c:2570 misc/tune2fs.c:446
 #, c-format
 msgid ""
 "\n"
@@ -4843,19 +4759,17 @@ msgstr ""
 "\n"
 "Fehler beim Aktivieren des Schutzes vor mehrfachem Einhängen."
 
-#: misc/mke2fs.c:2569
+#: misc/mke2fs.c:2575
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
-msgstr ""
-"Der Schutz vor mehrfachem Einhängen wurde mit einem Intervall von %d "
-"Sekunden aktiviert\n"
+msgstr "Der Schutz vor mehrfachem Einhängen wurde mit einem Intervall von %d Sekunden aktiviert\n"
 
-#: misc/mke2fs.c:2582
+#: misc/mke2fs.c:2588
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Schreibe Superblöcke und Dateisystem-Accountinginformationen: "
 
-#: misc/mke2fs.c:2589
+#: misc/mke2fs.c:2595
 #, c-format
 msgid ""
 "\n"
@@ -4864,7 +4778,7 @@ msgstr ""
 "\n"
 "Warnung: Probleme beim Schreiben der Superblöcke."
 
-#: misc/mke2fs.c:2591
+#: misc/mke2fs.c:2597
 #, c-format
 msgid ""
 "done\n"
@@ -4922,8 +4836,7 @@ msgstr "Lassen Sie bitte e2fsck über das Dateisystem laufen.\n"
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
-"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p "
-"mmp_update_interval]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p mmp_update_interval]\n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
@@ -4931,8 +4844,7 @@ msgid ""
 msgstr ""
 "Aufruf: %s [-c max-Anzahl-Einhängen] [-e Fehler-Verhalten] [-g Gruppe]\n"
 "\t[-i Intervall[d|m|w]] [-j] [-J Journal-Optionen] [-l]\n"
-"\t[-m reservierte_Blöcke_Prozent] [-o [^]Einhäng_Optionen[,...]] [-p "
-"mmp_update_intervall]\n"
+"\t[-m reservierte_Blöcke_Prozent] [-o [^]Einhäng_Optionen[,...]] [-p mmp_update_intervall]\n"
 "\t[-r Anzahl_reservierte_Blöcke] [-u Benutzer] [-C Anzahl_Einhängen]\n"
 "\t[-L Volume_Label] [-M letztes_eingehängtes_Verzeichnis]\n"
 "\t[-O [^]Eigenschaft[,...]] [-E erweiterte-Option[,...]]\n"
@@ -4987,8 +4899,7 @@ msgstr "(und hinterher das System neu starten!)\n"
 #: misc/tune2fs.c:396
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
-msgstr ""
-"Das Zurücksetzen von Dateisystem-Eigenschaft „%s“ wird nicht unterstützt.\n"
+msgstr "Das Zurücksetzen von Dateisystem-Eigenschaft „%s“ wird nicht unterstützt.\n"
 
 #: misc/tune2fs.c:402
 #, c-format
@@ -5043,8 +4954,7 @@ msgstr "Fehler beim Lesen der Bitmaps\n"
 #: misc/tune2fs.c:482
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
-msgstr ""
-"Die magische Zahl im MMP-Block passt nicht. Erwartet: %x, tatsächlich: %x\n"
+msgstr "Die magische Zahl im MMP-Block passt nicht. Erwartet: %x, tatsächlich: %x\n"
 
 #: misc/tune2fs.c:487
 msgid "while reading MMP block."
@@ -5109,18 +5019,16 @@ msgstr ""
 "\n"
 "\tbeim Erstellen der Journaldatei"
 
-#: misc/tune2fs.c:763
+#: misc/tune2fs.c:754
 msgid "Couldn't allocate memory to parse quota options!\n"
-msgstr ""
-"Speicher zum Parsen der Quota-Optionen konnte nicht reserviert werden!\n"
+msgstr "Speicher zum Parsen der Quota-Optionen konnte nicht reserviert werden!\n"
 
-#: misc/tune2fs.c:785
+#: misc/tune2fs.c:776
 msgid ""
 "\n"
 "Bad quota options specified.\n"
 "\n"
-"Following valid quota options are available (pass by separating with "
-"comma):\n"
+"Following valid quota options are available (pass by separating with comma):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
@@ -5129,109 +5037,104 @@ msgstr ""
 "\n"
 "Es wurden ungültige Quota-Optionen angegeben.\n"
 "\n"
-"Following valid quota options are available (pass by separating with "
-"comma):\n"
+"Following valid quota options are available (pass by separating with comma):\n"
 "Die folgenden Quotaoptionen sind verfügbar (durch Komma getrennt angeben):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:846
+#: misc/tune2fs.c:837
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Konnte Datum/Zeit nicht parsen: %s"
 
-#: misc/tune2fs.c:870 misc/tune2fs.c:883
+#: misc/tune2fs.c:861 misc/tune2fs.c:874
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "Ungültiger Mounts-Zähler - %s"
 
-#: misc/tune2fs.c:899
+#: misc/tune2fs.c:890
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "ungültiges Fehler-Verhalten - %s"
 
-#: misc/tune2fs.c:926
+#: misc/tune2fs.c:917
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "ungültige(r) GID oder Gruppenname - %s"
 
-#: misc/tune2fs.c:959
+#: misc/tune2fs.c:950
 #, c-format
 msgid "bad interval - %s"
 msgstr "ungültiges Intervall - %s"
 
-#: misc/tune2fs.c:988
+#: misc/tune2fs.c:979
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "ungültiges Reservierte-Blöcke-Verhältnis - %s"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:994
 msgid "-o may only be specified once"
 msgstr "-o darf nur eimal angegeben werden"
 
-#: misc/tune2fs.c:1012
+#: misc/tune2fs.c:1003
 msgid "-O may only be specified once"
 msgstr "-O darf nur eimal angegeben werden"
 
-#: misc/tune2fs.c:1027
+#: misc/tune2fs.c:1018
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "ungültige Anzahl von reservierten Blöcken - %s"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1047
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "ungültige(r) UID/Benutzername - %s"
 
-#: misc/tune2fs.c:1073
+#: misc/tune2fs.c:1064
 #, c-format
 msgid "bad inode size - %s"
 msgstr "Unzulässige Inodegröße - %s"
 
-#: misc/tune2fs.c:1080
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Inodegrösse muss eine Zweierpotenz sein- %s"
 
-#: misc/tune2fs.c:1174
+#: misc/tune2fs.c:1165
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval ist zu groß: %lu\n"
 
-#: misc/tune2fs.c:1179
+#: misc/tune2fs.c:1170
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
-msgid_plural ""
-"Setting multiple mount protection update interval to %lu seconds\n"
-msgstr[0] ""
-"Setze das Intervall für den Schutz vor mehrfachem Einhängen auf %lu Sekunde\n"
-msgstr[1] ""
-"Setze das Intervall für den Schutz vor mehrfachem Einhängen auf %lu "
-"Sekunden\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Setze das Intervall für den Schutz vor mehrfachem Einhängen auf %lu Sekunde\n"
+msgstr[1] "Setze das Intervall für den Schutz vor mehrfachem Einhängen auf %lu Sekunden\n"
 
-#: misc/tune2fs.c:1202
+#: misc/tune2fs.c:1193
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ungültiger RAID Stride: %s\n"
 
-#: misc/tune2fs.c:1217
+#: misc/tune2fs.c:1208
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Ungültige RAID Stripe-Breite: %s\n"
 
-#: misc/tune2fs.c:1232
+#: misc/tune2fs.c:1223
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Ungültiger Hashalgorithmus: %s\n"
 
-#: misc/tune2fs.c:1238
+#: misc/tune2fs.c:1229
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Der standard Hashalgorithmus wird auf %s (%d) gesetzt\n"
 
-#: misc/tune2fs.c:1257
+#: misc/tune2fs.c:1248
 #, c-format
 msgid ""
 "\n"
@@ -5265,33 +5168,31 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:1723
+#: misc/tune2fs.c:1714
 msgid "Failed to read inode bitmap\n"
 msgstr "Die Inode-Bitmap konnte nicht gelesen werden\n"
 
-#: misc/tune2fs.c:1728
+#: misc/tune2fs.c:1719
 msgid "Failed to read block bitmap\n"
 msgstr "Die Block-Bitmaps konnten nicht gelesen werden\n"
 
-#: misc/tune2fs.c:1745 resize/resize2fs.c:784
+#: misc/tune2fs.c:1736 resize/resize2fs.c:802
 msgid "blocks to be moved"
 msgstr "zu verschiebende Blöcke"
 
-#: misc/tune2fs.c:1748
+#: misc/tune2fs.c:1739
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr ""
-"Beim Vergrössern der Inodes konnte keine Block-Bitmap angelegt werden\n"
+msgstr "Beim Vergrössern der Inodes konnte keine Block-Bitmap angelegt werden\n"
 
-#: misc/tune2fs.c:1754
+#: misc/tune2fs.c:1745
 msgid "Not enough space to increase inode size \n"
 msgstr "Der Platz reicht nicht aus um die Inodegrösse zu erhöhen \n"
 
-#: misc/tune2fs.c:1759
+#: misc/tune2fs.c:1750
 msgid "Failed to relocate blocks during inode resize \n"
-msgstr ""
-"Beim Vergrössern der Inodes konnten die Blöcke nicht verschoben werden \n"
+msgstr "Beim Vergrössern der Inodes konnten die Blöcke nicht verschoben werden \n"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1782
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -5299,16 +5200,16 @@ msgstr ""
 "Fehler beim Verändern der Inodegrösse.\n"
 "Starten Sie e2undo um die Änderungen am Dateisystem rückgängig zu machen. \n"
 
-#: misc/tune2fs.c:1818
+#: misc/tune2fs.c:1809
 msgid "Couldn't allocate memory for tdb filename\n"
 msgstr "Kann keinen Speicher für den tdb-Dateinamen reservieren\n"
 
-#: misc/tune2fs.c:1840
+#: misc/tune2fs.c:1831
 #, c-format
 msgid "while trying to delete %s"
 msgstr "beim Versuch, %s zu löschen"
 
-#: misc/tune2fs.c:1850
+#: misc/tune2fs.c:1841
 #, c-format
 msgid ""
 "To undo the tune2fs operation please run the command\n"
@@ -5320,7 +5221,7 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/tune2fs.c:1919
+#: misc/tune2fs.c:1910
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -5330,63 +5231,62 @@ msgstr ""
 "Kommando zu reparieren:\n"
 "„e2fsck -f %s“\n"
 
-#: misc/tune2fs.c:1937
+#: misc/tune2fs.c:1928
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Die Inodegrösse ist bereits %lu\n"
 
-#: misc/tune2fs.c:1943
+#: misc/tune2fs.c:1934
 #, c-format
 msgid "Shrinking the inode size is not supported\n"
 msgstr "Das Schrumpfen der Inodegrösse wird nicht unterstützt\n"
 
-#: misc/tune2fs.c:1990
+#: misc/tune2fs.c:1981
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Die maximale Anzahl von Einhängungen wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:1996
+#: misc/tune2fs.c:1987
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Die derzeitige Anzahl von Einhängungen wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:2001
+#: misc/tune2fs.c:1992
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Das Fehler-Verhalten wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:2006
+#: misc/tune2fs.c:1997
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Die GID für reservierte Blöcke wird auf %lu gesetzt\n"
 
-#: misc/tune2fs.c:2011
+#: misc/tune2fs.c:2002
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "Das Intervall zwischen den Prüfungen ist zu groß (%lu)"
 
-#: misc/tune2fs.c:2018
+#: misc/tune2fs.c:2009
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Das Intervall zwischen zwei Checks wird auf %lu Sekunden gesetzt\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2016
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
-msgstr ""
-"Der Prozentsatz reservierter Böcke wird auf %g%% (%llu Blöcke) gesetzt\n"
+msgstr "Der Prozentsatz reservierter Böcke wird auf %g%% (%llu Blöcke) gesetzt\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2022
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "Die Anzahl der reservierten Blöcke ist zu gross (%llu)"
 
-#: misc/tune2fs.c:2038
+#: misc/tune2fs.c:2029
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Die Anzahl der reservierten Blöcke wird auf %llu gesetzt\n"
 
-#: misc/tune2fs.c:2044
+#: misc/tune2fs.c:2035
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -5394,7 +5294,7 @@ msgstr ""
 "\n"
 "Das Dateisystem hat bereits verteilte Superblöcke.\n"
 
-#: misc/tune2fs.c:2051
+#: misc/tune2fs.c:2042
 #, c-format
 msgid ""
 "\n"
@@ -5403,7 +5303,7 @@ msgstr ""
 "\n"
 "Kennzeichen für verteilten Superblock gesetzt. %s"
 
-#: misc/tune2fs.c:2056
+#: misc/tune2fs.c:2047
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -5412,41 +5312,39 @@ msgstr ""
 "Das Zurücksetzen des Kennzeichens für „verteilter Superblock“ wird nicht\n"
 "\tunterstützt.\n"
 
-#: misc/tune2fs.c:2064
+#: misc/tune2fs.c:2055
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Die Zeit des letzten Dateisystemchecks wird auf %s gesetzt\n"
 
-#: misc/tune2fs.c:2070
+#: misc/tune2fs.c:2061
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Die UID für reservierte Blöcke wird auf %lu gesetzt\n"
 
-#: misc/tune2fs.c:2102
+#: misc/tune2fs.c:2093
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 "Fehler bei der Verwendung von clear_mmp. Es muss zusammen mit -f\n"
 "verwendet werden\n"
 
-#: misc/tune2fs.c:2120
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:2111
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
-"Quotas können nur aktiviert bzw. deaktiviert werden, wenn das Dateisystem "
-"nicht\n"
+"Quotas können nur aktiviert bzw. deaktiviert werden, wenn das Dateisystem nicht\n"
 "eingehängt ist\n"
 
-#: misc/tune2fs.c:2153
+#: misc/tune2fs.c:2144
 msgid "Invalid UUID format\n"
 msgstr "Ungültiges UUID Format\n"
 
-#: misc/tune2fs.c:2166
+#: misc/tune2fs.c:2157
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "Die Grösse der Inodes kann nur geändert werden, wenn das Dateisystem\n"
 "nicht eingehängt ist.\n"
 
-#: misc/tune2fs.c:2174
+#: misc/tune2fs.c:2165
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -5454,27 +5352,27 @@ msgstr ""
 "Das Ändern der Inodegrösse wird auf Dateisystemen mit aktivierter flex_bg\n"
 "Eigenschaft nicht unterstützt.\n"
 
-#: misc/tune2fs.c:2187
+#: misc/tune2fs.c:2178
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Die Inode-Größe wird auf %lu gesetzt\n"
 
-#: misc/tune2fs.c:2190
+#: misc/tune2fs.c:2181
 #, c-format
 msgid "Failed to change inode size\n"
 msgstr "Die Inode-Größe konnte nicht geändert werdeb\n"
 
-#: misc/tune2fs.c:2201
+#: misc/tune2fs.c:2192
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Die Stride-Größe wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:2206
+#: misc/tune2fs.c:2197
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Die Stripe-Breite wird auf %d gesetzt\n"
 
-#: misc/tune2fs.c:2213
+#: misc/tune2fs.c:2204
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Als erweiterte Einhäng-Optionen werden in Zukunft „%s“ verwendet\n"
@@ -5790,16 +5688,7 @@ msgstr "beim Öffnen von %s"
 msgid "while getting stat information for %s"
 msgstr "beim Ermitteln der Statusinformation für %s"
 
-#: resize/main.c:331
-#, c-format
-msgid ""
-"%s: The combination of flex_bg and\n"
-"\t!resize_inode features is not supported by resize2fs.\n"
-msgstr ""
-"%s: Die Kombination der Eigenschaften flex_bg und\n"
-"t!resize_inode wird von resize2fs nicht unterestützt.\n"
-
-#: resize/main.c:344 resize/main.c:452
+#: resize/main.c:325 resize/main.c:437
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -5808,30 +5697,30 @@ msgstr ""
 "Bitte zuerst „e2fsck -f %s“ laufen lassen.\n"
 "\n"
 
-#: resize/main.c:348
+#: resize/main.c:329
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Geschätzte minimale Grösse des Dateisystems: %llu\n"
 
-#: resize/main.c:384
+#: resize/main.c:365
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Unzulässige neue Größe: %s\n"
 
-#: resize/main.c:392
+#: resize/main.c:381
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Die neue Größe kann nicht mehr mit 32 Bits dargestellt werden\n"
 
-#: resize/main.c:404
+#: resize/main.c:389
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Die neue Größe ist kleiner als das Minimum (%llu)\n"
 
-#: resize/main.c:410
+#: resize/main.c:395
 msgid "Invalid stride length"
 msgstr "Ungültige Stride-Länge"
 
-#: resize/main.c:434
+#: resize/main.c:419
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -5842,7 +5731,7 @@ msgstr ""
 "Sie hatten aber %llu Blöcke vorgegeben.\n"
 "\n"
 
-#: resize/main.c:441
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The filesystem is already %llu blocks long.  Nothing to do!\n"
@@ -5851,19 +5740,28 @@ msgstr ""
 "Das Dateisystem ist schon %llu Blöcke groß. Nichts zu tun!\n"
 "\n"
 
-#: resize/main.c:456
+#: resize/main.c:457
+#, c-format
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Die Kombination der Eigenschaften flex_bg und\n"
+"t!resize_inode wird von resize2fs nicht unterestützt.\n"
+
+#: resize/main.c:463
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr ""
 "Die Grösse des Dateisystems auf %s wird auf %llu (%dk) Blöcke geändert.\n"
 "\n"
 
-#: resize/main.c:465
+#: resize/main.c:472
 #, c-format
 msgid "while trying to resize %s"
 msgstr "beim Versuch, die Größe von %s zu ändern"
 
-#: resize/main.c:468
+#: resize/main.c:475
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -5872,7 +5770,7 @@ msgstr ""
 "Bitte führen Sie „e2fsck -fy %s“ aus, um das Dateisystem\n"
 "nach der abgebrochenen Grössenänderung zu reparieren.\n"
 
-#: resize/main.c:474
+#: resize/main.c:481
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu blocks long.\n"
@@ -5881,7 +5779,7 @@ msgstr ""
 "Das Dateisystem auf %s ist nun %llu Blöcke groß.\n"
 "\n"
 
-#: resize/main.c:489
+#: resize/main.c:496
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "beim Versuch, %s zu kürzen"
@@ -5889,87 +5787,81 @@ msgstr "beim Versuch, %s zu kürzen"
 #: resize/online.c:40
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
-msgstr ""
-"Das Dateisystem auf %s ist auf %s eingehängt; Online-Grössenveränderung "
-"nötig\n"
+msgstr "Das Dateisystem auf %s ist auf %s eingehängt; Online-Grössenveränderung nötig\n"
 
 #: resize/online.c:44
 msgid "On-line shrinking not supported"
 msgstr "Die Online-Verkleinerung wird nicht unterstützt"
 
-#: resize/online.c:63
+#: resize/online.c:69
 msgid "Filesystem does not support online resizing"
 msgstr "Das Dateisystem unterstützt keine Online-Grössenveränderung"
 
-#: resize/online.c:70
+#: resize/online.c:78
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr "nicht genug reservierte GDT-Blöcke für die Größenänderung"
+
+#: resize/online.c:85
+msgid "Kernel does not support resizing a file system this large"
+msgstr "Der Kernel lässt eine Veränderung der Größe eines Dateisystems diesen Ausmaßes nicht zu"
+
+#: resize/online.c:93
 #, c-format
 msgid "while trying to open mountpoint %s"
 msgstr "beim Versuch, Einhängpunkt %s zu öffnen"
 
-#: resize/online.c:92 resize/online.c:116
+#: resize/online.c:115 resize/online.c:132
 msgid "Permission denied to resize filesystem"
 msgstr "Zugriff verweigert für die Grössenänderung des Dateisystems"
 
-#: resize/online.c:95 resize/online.c:122
+#: resize/online.c:118 resize/online.c:138
 msgid "While checking for on-line resizing support"
 msgstr "Beim Überprüfen, ob Online-Vergrösserung unterstützt wird"
 
-#: resize/online.c:107
-msgid "Kernel does not support resizing a file system this large"
-msgstr ""
-"Der Kernel lässt eine Veränderung der Größe eines Dateisystems diesen "
-"Ausmaßes nicht zu"
-
-#: resize/online.c:119
+#: resize/online.c:135
 msgid "Kernel does not support online resizing"
 msgstr "Der Kernel unterstützt die Online-Vergrösserung nicht"
 
-#: resize/online.c:152
+#: resize/online.c:168
 #, c-format
 msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
-msgstr ""
-"Eine Online-Grössenänderung von %s auf %llu (%dk) Blöcke wird durchgeführt.\n"
+msgstr "Eine Online-Grössenänderung von %s auf %llu (%dk) Blöcke wird durchgeführt.\n"
 
-#: resize/online.c:162
+#: resize/online.c:178
 msgid "While trying to extend the last group"
 msgstr "Beim Versuch, die letzte Gruppe zu erweitern"
 
-#: resize/online.c:216
+#: resize/online.c:232
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Beim Versuch, Gruppe %d hinzu zu fügen"
 
-#: resize/online.c:227
+#: resize/online.c:243
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"Dateisystem auf %s ist auf %s eingehängt und Online-Grössenänderung wird auf "
-"diesem System nicht unterstützt.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Dateisystem auf %s ist auf %s eingehängt und Online-Grössenänderung wird auf diesem System nicht unterstützt.\n"
 
-#: resize/resize2fs.c:348
+#: resize/resize2fs.c:346
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "Die Anzahl der Indoes (%llu) muss unter %u liegen"
 
-#: resize/resize2fs.c:576
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "reservierte Blöcke"
 
-#: resize/resize2fs.c:789
+#: resize/resize2fs.c:807
 msgid "meta-data blocks"
 msgstr "Metadaten-Blöcke"
 
-#: resize/resize2fs.c:1735
+#: resize/resize2fs.c:1753
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Das sollte niemals passieren: Die zu verändernde Inode ist defekt!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.42.4"
-msgstr "EXT2FS Bibliothek Version 1.42.2"
+msgid "EXT2FS Library version 1.42.6"
+msgstr "EXT2FS Bibliothek Version 1.42.6"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -6053,8 +5945,7 @@ msgstr "Die Dateisystemrevision ist zu hoch"
 
 #: lib/ext2fs/ext2_err.c:32
 msgid "Attempt to write to filesystem opened read-only"
-msgstr ""
-"Es wird versucht, auf ein nur zum Lesen geöffnetes Dateisystem zu schreiben"
+msgstr "Es wird versucht, auf ein nur zum Lesen geöffnetes Dateisystem zu schreiben"
 
 #: lib/ext2fs/ext2_err.c:33
 msgid "Can't read group descriptors"
@@ -6066,18 +5957,15 @@ msgstr "Die Gruppendeskriptoren können nicht geschrieben werden"
 
 #: lib/ext2fs/ext2_err.c:35
 msgid "Corrupt group descriptor: bad block for block bitmap"
-msgstr ""
-"Beschädigter Gruppendeskriptor: nicht lesbarer Block ür die Block-Bitmap"
+msgstr "Beschädigter Gruppendeskriptor: nicht lesbarer Block ür die Block-Bitmap"
 
 #: lib/ext2fs/ext2_err.c:36
 msgid "Corrupt group descriptor: bad block for inode bitmap"
-msgstr ""
-"Beschädigter Gruppendeskriptor: nicht lesbarer Block ür die Inode-Bitmap"
+msgstr "Beschädigter Gruppendeskriptor: nicht lesbarer Block ür die Inode-Bitmap"
 
 #: lib/ext2fs/ext2_err.c:37
 msgid "Corrupt group descriptor: bad block for inode table"
-msgstr ""
-"Beschädigter Gruppendeskriptor: nicht lesbarer Block ür die Inodetabelle"
+msgstr "Beschädigter Gruppendeskriptor: nicht lesbarer Block ür die Inodetabelle"
 
 #: lib/ext2fs/ext2_err.c:38
 msgid "Can't write an inode bitmap"
@@ -6157,8 +6045,7 @@ msgstr "ext2fs_mark_block_bitmap wurde eine unzulässige Blocknummer übergeben"
 
 #: lib/ext2fs/ext2_err.c:57
 msgid "Illegal block number passed to ext2fs_unmark_block_bitmap"
-msgstr ""
-"ext2fs_unmark_block_bitmap wurde eine unzulässige Blocknummer übergeben"
+msgstr "ext2fs_unmark_block_bitmap wurde eine unzulässige Blocknummer übergeben"
 
 #: lib/ext2fs/ext2_err.c:58
 msgid "Illegal block number passed to ext2fs_test_block_bitmap"
@@ -6170,8 +6057,7 @@ msgstr "ext2fs_mark_inode_bitmap wurde eine unzulässige Blocknummer übergeben"
 
 #: lib/ext2fs/ext2_err.c:60
 msgid "Illegal inode number passed to ext2fs_unmark_inode_bitmap"
-msgstr ""
-"ext2fs_unmark_inode_bitmap wurde eine unzulässige Blocknummer übergeben"
+msgstr "ext2fs_unmark_inode_bitmap wurde eine unzulässige Blocknummer übergeben"
 
 #: lib/ext2fs/ext2_err.c:61
 msgid "Illegal inode number passed to ext2fs_test_inode_bitmap"
@@ -6179,15 +6065,11 @@ msgstr "ext2fs_test_inode_bitmap wurde eine unzulässige Blocknummer übergeben"
 
 #: lib/ext2fs/ext2_err.c:62
 msgid "Attempt to fudge end of block bitmap past the real end"
-msgstr ""
-"Es wurde versucht, das Ende der Blockbitmap über das echte Ende hinaus zu "
-"verschieben"
+msgstr "Es wurde versucht, das Ende der Blockbitmap über das echte Ende hinaus zu verschieben"
 
 #: lib/ext2fs/ext2_err.c:63
 msgid "Attempt to fudge end of inode bitmap past the real end"
-msgstr ""
-"Es wurde versucht, das Ende der Inodebitmap über das echte Ende hinaus zu "
-"verschieben"
+msgstr "Es wurde versucht, das Ende der Inodebitmap über das echte Ende hinaus zu verschieben"
 
 #: lib/ext2fs/ext2_err.c:64
 msgid "Illegal indirect block found"
@@ -6223,21 +6105,15 @@ msgstr "Der Ext2-Superblock ist beschädigt"
 
 #: lib/ext2fs/ext2_err.c:72
 msgid "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"
-msgstr ""
-"ext2fs_mark_generic_bitmap wurde eine unzulässige generische Bitnummer "
-"übergeben"
+msgstr "ext2fs_mark_generic_bitmap wurde eine unzulässige generische Bitnummer übergeben"
 
 #: lib/ext2fs/ext2_err.c:73
 msgid "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"
-msgstr ""
-"ext2fs_unmark_generic_bitmap wurde eine unzulässige generische Bitnummer "
-"übergeben"
+msgstr "ext2fs_unmark_generic_bitmap wurde eine unzulässige generische Bitnummer übergeben"
 
 #: lib/ext2fs/ext2_err.c:74
 msgid "Illegal generic bit number passed to ext2fs_test_generic_bitmap"
-msgstr ""
-"ext2fs_test_generic_bitmap wurde eine unzulässige generische Bitnummer "
-"übergeben"
+msgstr "ext2fs_test_generic_bitmap wurde eine unzulässige generische Bitnummer übergeben"
 
 #: lib/ext2fs/ext2_err.c:75
 msgid "Too many symbolic links encountered."
@@ -6261,8 +6137,7 @@ msgstr "Das Dateisystem besitzt nicht unterstützte nur-lesen Eigenschaft(en):"
 
 #: lib/ext2fs/ext2_err.c:80
 msgid "IO Channel failed to seek on read or write"
-msgstr ""
-"E/A Kanal ist beim Suchen während des Lesens oder Schreibens gescheitert"
+msgstr "E/A Kanal ist beim Suchen während des Lesens oder Schreibens gescheitert"
 
 #: lib/ext2fs/ext2_err.c:81
 msgid "Memory allocation failed"
@@ -6350,9 +6225,7 @@ msgstr "Unzulässige Nummer für den Block für erweiterte Attribute"
 
 #: lib/ext2fs/ext2_err.c:102
 msgid "Cannot create filesystem with requested number of inodes"
-msgstr ""
-"Ein Dateisystem mit der gewünschten Anzahl von Inodes kann nicht erzeugt "
-"werden"
+msgstr "Ein Dateisystem mit der gewünschten Anzahl von Inodes kann nicht erzeugt werden"
 
 #: lib/ext2fs/ext2_err.c:103
 msgid "E2image snapshot not in use"
@@ -6368,8 +6241,7 @@ msgstr "Der zu modifizierende Inode ist defekt"
 
 #: lib/ext2fs/ext2_err.c:106
 msgid "Tried to set block bmap with missing indirect block"
-msgstr ""
-"Es wurde versucht, eine Block-Bmap mit fehlendem indirektem Block zu setzen"
+msgstr "Es wurde versucht, eine Block-Bmap mit fehlendem indirektem Block zu setzen"
 
 #: lib/ext2fs/ext2_err.c:107
 msgid "TDB: Success"
@@ -6417,9 +6289,7 @@ msgstr "Die Ext2fs-Verzeichnisblockliste ist leer"
 
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
-msgstr ""
-"Es wird versucht, ein Blockmapping mittels nur-lesenden Blockiteratoren zu "
-"modifizieren"
+msgstr "Es wird versucht, ein Blockmapping mittels nur-lesenden Blockiteratoren zu modifizieren"
 
 #: lib/ext2fs/ext2_err.c:119
 msgid "Wrong magic number for ext4 extent saved path"
@@ -6523,9 +6393,7 @@ msgstr "Erweiterung wurde nicht gefunden"
 
 #: lib/ext2fs/ext2_err.c:144
 msgid "Operation not supported for inodes containing extents"
-msgstr ""
-"Die Operation wird für Inodes, die Erweiterungen beinhalten, nicht "
-"unterstützt"
+msgstr "Die Operation wird für Inodes, die Erweiterungen beinhalten, nicht unterstützt"
 
 #: lib/ext2fs/ext2_err.c:145
 msgid "Extent length is invalid"
@@ -6537,14 +6405,11 @@ msgstr "Der EA-Kanal unterstützt keine 64-bittigen Blocknummern"
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"Überprüfung ob das Dateisystem eingehängt ist mangels mtab Datei nicht "
-"möglich"
+msgstr "Überprüfung ob das Dateisystem eingehängt ist mangels mtab Datei nicht möglich"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
-msgstr ""
-"Das Dateisystem ist für die Verwendung von altertümlichen Bitmaps zu groß"
+msgstr "Das Dateisystem ist für die Verwendung von altertümlichen Bitmaps zu groß"
 
 #: lib/ext2fs/ext2_err.c:149
 msgid "MMP: invalid magic number"
@@ -6592,9 +6457,7 @@ msgstr "Der Profilbezug wurde nicht gefunden"
 
 #: e2fsck/prof_err.c:15
 msgid "Attempt to add a relation to node which is not a section"
-msgstr ""
-"Es wird versucht, einen Bezug zu einem Knoten hinzu zu fügen, der keine "
-"Sektion ist"
+msgstr "Es wird versucht, einen Bezug zu einem Knoten hinzu zu fügen, der keine Sektion ist"
 
 #: e2fsck/prof_err.c:16
 msgid "A profile section header has a non-zero value"
@@ -6658,8 +6521,7 @@ msgstr "Ungültige magische Zahl in profile_section_t"
 
 #: e2fsck/prof_err.c:31
 msgid "Iteration through all top level section not supported"
-msgstr ""
-"Iteration über alle Sektionen der obersten Ebene wird nicht unterstützt"
+msgstr "Iteration über alle Sektionen der obersten Ebene wird nicht unterstützt"
 
 #: e2fsck/prof_err.c:32
 msgid "Invalid profile_section object"
@@ -6683,7 +6545,7 @@ msgstr "Ungültige magische Zahl in profile_file_t"
 
 #: e2fsck/prof_err.c:37
 msgid "Couldn't open profile file"
-msgstr "Die Prfildatei konnte nicht geöffnet werden"
+msgstr "Die Profildatei konnte nicht geöffnet werden"
 
 #: e2fsck/prof_err.c:38
 msgid "Section already exists"
@@ -6705,12 +6567,10 @@ msgstr "Ungültige magische Zahl in profile_data_t"
 #~ msgstr "%s ist eingehängt.  "
 
 #~ msgid "@g %g @b @B uninitialized but @i @B in use.\n"
-#~ msgstr ""
-#~ "Die @b @B von @g %g ist nicht initialisiert aber @i @B wird verwendet.\n"
+#~ msgstr "Die @b @B von @g %g ist nicht initialisiert aber @i @B wird verwendet.\n"
 
 #~ msgid "@i %i should not have EOFBLOCKS_FL set (size %Is, lblk %r)\n"
-#~ msgstr ""
-#~ " in @i %i sollte EOFBLOCKS_FL nicht gesetzt sein (Größe %Is, lblk %r)\n"
+#~ msgstr " in @i %i sollte EOFBLOCKS_FL nicht gesetzt sein (Größe %Is, lblk %r)\n"
 
 #~ msgid "Couldn't determine journal size"
 #~ msgstr "Konnte die Größe des Dateisystems nicht ermitteln"
index d4394af..e298bed 100644 (file)
@@ -1,9 +1,9 @@
 # E2fsprogs translation template file
 # Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 
-#     2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-#     by Theodore Ts'o
+#     2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
+#      2013 by Theodore Ts'o
 # This file is distributed under the same license as the e2fsprogs package.
-# Theodore Ts'o <tytso@mit.edu>, 2012.
+# Theodore Ts'o <tytso@mit.edu>, 2013.
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
@@ -66,9 +66,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.42.5\n"
+"Project-Id-Version: e2fsprogs 1.42.8\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2012-07-29 20:04-0400\n"
+"POT-Creation-Date: 2013-06-16 08:17-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -78,7 +78,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:176
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:180
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr ""
@@ -92,10 +92,10 @@ msgid "while reading the bad blocks inode"
 msgstr ""
 
 #: e2fsck/badblocks.c:72 e2fsck/iscan.c:110 e2fsck/scantest.c:107
-#: e2fsck/unix.c:1334 e2fsck/unix.c:1422 misc/badblocks.c:1214
+#: e2fsck/unix.c:1332 e2fsck/unix.c:1420 misc/badblocks.c:1214
 #: misc/badblocks.c:1222 misc/badblocks.c:1236 misc/badblocks.c:1248
-#: misc/dumpe2fs.c:588 misc/e2image.c:1189 misc/e2image.c:1307
-#: misc/e2image.c:1320 misc/mke2fs.c:192 misc/tune2fs.c:1898 resize/main.c:303
+#: misc/dumpe2fs.c:588 misc/e2image.c:1196 misc/e2image.c:1324
+#: misc/e2image.c:1337 misc/mke2fs.c:196 misc/tune2fs.c:1907 resize/main.c:315
 #, c-format
 msgid "while trying to open %s"
 msgstr ""
@@ -105,7 +105,7 @@ msgstr ""
 msgid "while trying popen '%s'"
 msgstr ""
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:199
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:203
 msgid "while reading in list of bad blocks from file"
 msgstr ""
 
@@ -189,21 +189,21 @@ msgstr ""
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr ""
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:963
+#: e2fsck/iscan.c:81 e2fsck/unix.c:961
 #, c-format
 msgid "while opening %s for flushing"
 msgstr ""
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:969 resize/main.c:276
+#: e2fsck/iscan.c:86 e2fsck/unix.c:967 resize/main.c:288
 #, c-format
 msgid "while trying to flush %s"
 msgstr ""
 
-#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1084
+#: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1091
 msgid "while opening inode scan"
 msgstr ""
 
-#: e2fsck/iscan.c:127 misc/e2image.c:1102
+#: e2fsck/iscan.c:127 misc/e2image.c:1109
 msgid "while getting next inode"
 msgstr ""
 
@@ -212,31 +212,31 @@ msgstr ""
 msgid "%u inodes scanned.\n"
 msgstr ""
 
-#: e2fsck/journal.c:512
+#: e2fsck/journal.c:522
 msgid "reading journal superblock\n"
 msgstr ""
 
-#: e2fsck/journal.c:569
+#: e2fsck/journal.c:579
 #, c-format
 msgid "%s: no valid journal superblock found\n"
 msgstr ""
 
-#: e2fsck/journal.c:578
+#: e2fsck/journal.c:588
 #, c-format
 msgid "%s: journal too short\n"
 msgstr ""
 
-#: e2fsck/journal.c:870
+#: e2fsck/journal.c:880
 #, c-format
 msgid "%s: recovering journal\n"
 msgstr ""
 
-#: e2fsck/journal.c:872
+#: e2fsck/journal.c:882
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
 msgstr ""
 
-#: e2fsck/journal.c:899
+#: e2fsck/journal.c:909
 #, c-format
 msgid "while trying to re-open %s"
 msgstr ""
@@ -438,23 +438,23 @@ msgstr ""
 msgid "unknown file type with mode 0%o"
 msgstr ""
 
-#: e2fsck/message.c:423
+#: e2fsck/message.c:422
 msgid "indirect block"
 msgstr ""
 
-#: e2fsck/message.c:425
+#: e2fsck/message.c:424
 msgid "double indirect block"
 msgstr ""
 
-#: e2fsck/message.c:427
+#: e2fsck/message.c:426
 msgid "triple indirect block"
 msgstr ""
 
-#: e2fsck/message.c:429
+#: e2fsck/message.c:428
 msgid "translator block"
 msgstr ""
 
-#: e2fsck/message.c:431
+#: e2fsck/message.c:430
 msgid "block #"
 msgstr ""
 
@@ -462,96 +462,96 @@ msgstr ""
 msgid "multiply claimed inode map"
 msgstr ""
 
-#: e2fsck/pass1b.c:610 e2fsck/pass1b.c:729
+#: e2fsck/pass1b.c:610 e2fsck/pass1b.c:730
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
 msgstr ""
 
-#: e2fsck/pass1b.c:820
+#: e2fsck/pass1b.c:821
 msgid "returned from clone_file_block"
 msgstr ""
 
-#: e2fsck/pass1b.c:842
+#: e2fsck/pass1b.c:843
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
 msgstr ""
 
-#: e2fsck/pass1b.c:854
+#: e2fsck/pass1b.c:855
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
 msgstr ""
 
-#: e2fsck/pass1.c:476 e2fsck/pass2.c:782
+#: e2fsck/pass1.c:475 e2fsck/pass2.c:782
 msgid "reading directory block"
 msgstr ""
 
-#: e2fsck/pass1.c:599
+#: e2fsck/pass1.c:598
 msgid "in-use inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:610
+#: e2fsck/pass1.c:609
 msgid "directory inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:620
+#: e2fsck/pass1.c:619
 msgid "regular file inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:629
+#: e2fsck/pass1.c:628
 msgid "in-use block map"
 msgstr ""
 
-#: e2fsck/pass1.c:696
+#: e2fsck/pass1.c:695
 msgid "opening inode scan"
 msgstr ""
 
-#: e2fsck/pass1.c:730
+#: e2fsck/pass1.c:729
 msgid "getting next inode from scan"
 msgstr ""
 
-#: e2fsck/pass1.c:1240
+#: e2fsck/pass1.c:1239
 msgid "Pass 1"
 msgstr ""
 
-#: e2fsck/pass1.c:1297
+#: e2fsck/pass1.c:1296
 #, c-format
 msgid "reading indirect blocks of inode %u"
 msgstr ""
 
-#: e2fsck/pass1.c:1347
+#: e2fsck/pass1.c:1346
 msgid "bad inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1370
+#: e2fsck/pass1.c:1369
 msgid "inode in bad block map"
 msgstr ""
 
-#: e2fsck/pass1.c:1390
+#: e2fsck/pass1.c:1389
 msgid "imagic inode map"
 msgstr ""
 
-#: e2fsck/pass1.c:1417
+#: e2fsck/pass1.c:1416
 msgid "multiply claimed block map"
 msgstr ""
 
-#: e2fsck/pass1.c:1518
+#: e2fsck/pass1.c:1527
 msgid "ext attr block map"
 msgstr ""
 
-#: e2fsck/pass1.c:2266
+#: e2fsck/pass1.c:2299
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
 msgstr ""
 
-#: e2fsck/pass1.c:2627
+#: e2fsck/pass1.c:2660
 msgid "block bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:2633
+#: e2fsck/pass1.c:2666
 msgid "inode bitmap"
 msgstr ""
 
-#: e2fsck/pass1.c:2639
+#: e2fsck/pass1.c:2672
 msgid "inode table"
 msgstr ""
 
@@ -579,7 +579,7 @@ msgstr ""
 msgid "inode loop detection bitmap"
 msgstr ""
 
-#: e2fsck/pass4.c:195
+#: e2fsck/pass4.c:196
 msgid "Pass 4"
 msgstr ""
 
@@ -1350,7 +1350,7 @@ msgstr ""
 msgid "Warning: could not write @b %b for %s: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:625 e2fsck/problem.c:1460
+#: e2fsck/problem.c:625 e2fsck/problem.c:1474
 #. @-expanded: error allocating inode bitmap (%N): %m\n
 msgid "@A @i @B (%N): %m\n"
 msgstr ""
@@ -1706,6 +1706,22 @@ msgid ""
 msgstr ""
 
 #: e2fsck/problem.c:953
+#. @-expanded: Interior extent node level %N of inode %i:\n
+#. @-expanded: Logical start %b does not match logical start %c at next level.  
+msgid ""
+"Interior @x node level %N of @i %i:\n"
+"Logical start %b does not match logical start %c at next level.  "
+msgstr ""
+
+#: e2fsck/problem.c:959
+#. @-expanded: inode %i, end of extent exceeds allowed value\n
+#. @-expanded: \t(logical block %c, physical block %b, len %N)\n
+msgid ""
+"@i %i, end of extent exceeds allowed value\n"
+"\t(logical @b %c, physical @b %b, len %N)\n"
+msgstr ""
+
+#: e2fsck/problem.c:967
 #. @-expanded: \n
 #. @-expanded: Running additional passes to resolve blocks claimed by more than one inode...\n
 #. @-expanded: Pass 1B: Rescanning for multiply-claimed blocks\n
@@ -1715,45 +1731,45 @@ msgid ""
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 
-#: e2fsck/problem.c:959
+#: e2fsck/problem.c:973
 #, c-format
 #. @-expanded: multiply-claimed block(s) in inode %i:
 msgid "@m @b(s) in @i %i:"
 msgstr ""
 
-#: e2fsck/problem.c:974
+#: e2fsck/problem.c:988
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:979
+#: e2fsck/problem.c:993
 #, c-format
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
 msgid "@A @i @B (@i_dup_map): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:984
+#: e2fsck/problem.c:998
 #, c-format
 #. @-expanded: Error while iterating over blocks in inode %i (%s): %m\n
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:989 e2fsck/problem.c:1304
+#: e2fsck/problem.c:1003 e2fsck/problem.c:1318
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:994
+#: e2fsck/problem.c:1008
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
 msgstr ""
 
-#: e2fsck/problem.c:1000
+#: e2fsck/problem.c:1014
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
 msgid "Pass 1D: Reconciling @m @bs\n"
 msgstr ""
 
-#: e2fsck/problem.c:1005
+#: e2fsck/problem.c:1019
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
 msgid ""
@@ -1761,17 +1777,17 @@ msgid ""
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 
-#: e2fsck/problem.c:1011
+#: e2fsck/problem.c:1025
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
 msgid "\t%Q (@i #%i, mod time %IM)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1016
+#: e2fsck/problem.c:1030
 #. @-expanded: \t<filesystem metadata>\n
 msgid "\t<@f metadata>\n"
 msgstr ""
 
-#: e2fsck/problem.c:1021
+#: e2fsck/problem.c:1035
 #. @-expanded: (There are %N inodes containing multiply-claimed blocks.)\n
 #. @-expanded: \n
 msgid ""
@@ -1779,7 +1795,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1026
+#: e2fsck/problem.c:1040
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
 #. @-expanded: \n
 msgid ""
@@ -1787,313 +1803,313 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1039
+#: e2fsck/problem.c:1053
 #, c-format
 msgid "Couldn't clone file: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1045
+#: e2fsck/problem.c:1059
 #. @-expanded: Pass 2: Checking directory structure\n
 msgid "Pass 2: Checking @d structure\n"
 msgstr ""
 
-#: e2fsck/problem.c:1050
+#: e2fsck/problem.c:1064
 #, c-format
 #. @-expanded: invalid inode number for '.' in directory inode %i.\n
 msgid "@n @i number for '.' in @d @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1055
+#: e2fsck/problem.c:1069
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
 msgid "@E has @n @i #: %Di.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1060
+#: e2fsck/problem.c:1074
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
 msgid "@E has @D/unused @i %Di.  "
 msgstr ""
 
-#: e2fsck/problem.c:1065
+#: e2fsck/problem.c:1079
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
 msgid "@E @L to '.'  "
 msgstr ""
 
-#: e2fsck/problem.c:1070
+#: e2fsck/problem.c:1084
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
 msgid "@E points to @i (%Di) located in a bad @b.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1075
+#: e2fsck/problem.c:1089
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
 msgid "@E @L to @d %P (%Di).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1080
+#: e2fsck/problem.c:1094
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
 msgid "@E @L to the @r.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1085
+#: e2fsck/problem.c:1099
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
 msgid "@E has illegal characters in its name.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1090
+#: e2fsck/problem.c:1104
 #, c-format
 #. @-expanded: Missing '.' in directory inode %i.\n
 msgid "Missing '.' in @d @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1095
+#: e2fsck/problem.c:1109
 #, c-format
 #. @-expanded: Missing '..' in directory inode %i.\n
 msgid "Missing '..' in @d @i %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1100
+#: e2fsck/problem.c:1114
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
 msgstr ""
 
-#: e2fsck/problem.c:1105
+#: e2fsck/problem.c:1119
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
 msgstr ""
 
-#: e2fsck/problem.c:1110
+#: e2fsck/problem.c:1124
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
 msgid "i_faddr @F %IF, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1115
+#: e2fsck/problem.c:1129
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
 msgid "i_file_acl @F %If, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1120
+#: e2fsck/problem.c:1134
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
 msgid "i_dir_acl @F %Id, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1125
+#: e2fsck/problem.c:1139
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
 msgid "i_frag @F %N, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1130
+#: e2fsck/problem.c:1144
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
 msgid "i_fsize @F %N, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1135
+#: e2fsck/problem.c:1149
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
 msgid "@i %i (%Q) has @n mode (%Im).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1140
+#: e2fsck/problem.c:1154
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
 msgid "@d @i %i, %B, offset %N: @d corrupted\n"
 msgstr ""
 
-#: e2fsck/problem.c:1145
+#: e2fsck/problem.c:1159
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
 msgid "@d @i %i, %B, offset %N: filename too long\n"
 msgstr ""
 
-#: e2fsck/problem.c:1150
+#: e2fsck/problem.c:1164
 #. @-expanded: directory inode %i has an unallocated %B.  
 msgid "@d @i %i has an unallocated %B.  "
 msgstr ""
 
-#: e2fsck/problem.c:1155
+#: e2fsck/problem.c:1169
 #, c-format
 #. @-expanded: '.' directory entry in directory inode %i is not NULL terminated\n
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 
-#: e2fsck/problem.c:1160
+#: e2fsck/problem.c:1174
 #, c-format
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
 msgstr ""
 
-#: e2fsck/problem.c:1165
+#: e2fsck/problem.c:1179
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
 msgid "@i %i (%Q) is an @I character @v.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1170
+#: e2fsck/problem.c:1184
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
 msgid "@i %i (%Q) is an @I @b @v.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1175
+#: e2fsck/problem.c:1189
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
 msgid "@E is duplicate '.' @e.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1180
+#: e2fsck/problem.c:1194
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
 msgid "@E is duplicate '..' @e.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1185 e2fsck/problem.c:1485
+#: e2fsck/problem.c:1199 e2fsck/problem.c:1499
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1190
+#: e2fsck/problem.c:1204
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
 msgid "@E has rec_len of %Dr, @s %N.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1195
+#: e2fsck/problem.c:1209
 #, c-format
 #. @-expanded: error allocating icount structure: %m\n
 msgid "@A icount structure: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1200
+#: e2fsck/problem.c:1214
 #, c-format
 #. @-expanded: Error iterating over directory blocks: %m\n
 msgid "Error iterating over @d @bs: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1205
+#: e2fsck/problem.c:1219
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
 msgid "Error reading @d @b %b (@i %i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1210
+#: e2fsck/problem.c:1224
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
 msgid "Error writing @d @b %b (@i %i): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1215
+#: e2fsck/problem.c:1229
 #, c-format
 #. @-expanded: error allocating new directory block for inode %i (%s): %m\n
 msgid "@A new @d @b for @i %i (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1220
+#: e2fsck/problem.c:1234
 #, c-format
 #. @-expanded: Error deallocating inode %i: %m\n
 msgid "Error deallocating @i %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1225
+#: e2fsck/problem.c:1239
 #, c-format
 #. @-expanded: directory entry for '.' in %p (%i) is big.\n
 msgid "@d @e for '.' in %p (%i) is big.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1230
+#: e2fsck/problem.c:1244
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
 msgid "@i %i (%Q) is an @I FIFO.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1235
+#: e2fsck/problem.c:1249
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
 msgid "@i %i (%Q) is an @I socket.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1240
+#: e2fsck/problem.c:1254
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
 msgid "Setting filetype for @E to %N.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1245
+#: e2fsck/problem.c:1259
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1250
+#: e2fsck/problem.c:1264
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
 msgid "@E has filetype set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1255
+#: e2fsck/problem.c:1269
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
 msgid "@E has a @z name.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1260
+#: e2fsck/problem.c:1274
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
 msgid "Symlink %Q (@i #%i) is @n.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1265
+#: e2fsck/problem.c:1279
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
 msgid "@a @b @F @n (%If).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1270
+#: e2fsck/problem.c:1284
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1275
+#: e2fsck/problem.c:1289
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
 msgid "@p @h %d: %B not referenced\n"
 msgstr ""
 
-#: e2fsck/problem.c:1280
+#: e2fsck/problem.c:1294
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
 msgid "@p @h %d: %B referenced twice\n"
 msgstr ""
 
-#: e2fsck/problem.c:1285
+#: e2fsck/problem.c:1299
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
 msgid "@p @h %d: %B has bad min hash\n"
 msgstr ""
 
-#: e2fsck/problem.c:1290
+#: e2fsck/problem.c:1304
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
 msgid "@p @h %d: %B has bad max hash\n"
 msgstr ""
 
-#: e2fsck/problem.c:1295
+#: e2fsck/problem.c:1309
 #. @-expanded: invalid HTREE directory inode %d (%q).  
 msgid "@n @h %d (%q).  "
 msgstr ""
 
-#: e2fsck/problem.c:1299
+#: e2fsck/problem.c:1313
 #. @-expanded: problem in HTREE directory inode %d (%q): bad block number %b.\n
 msgid "@p @h %d (%q): bad @b number %b.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1309
+#: e2fsck/problem.c:1323
 #, c-format
 #. @-expanded: problem in HTREE directory inode %d: root node is invalid\n
 msgid "@p @h %d: root node is @n\n"
 msgstr ""
 
-#: e2fsck/problem.c:1314
+#: e2fsck/problem.c:1328
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
 msgid "@p @h %d: %B has @n limit (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1319
+#: e2fsck/problem.c:1333
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
 msgid "@p @h %d: %B has @n count (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1324
+#: e2fsck/problem.c:1338
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
 msgid "@p @h %d: %B has an unordered hash table\n"
 msgstr ""
 
-#: e2fsck/problem.c:1329
+#: e2fsck/problem.c:1343
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
 msgid "@p @h %d: %B has @n depth (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1334
+#: e2fsck/problem.c:1348
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
 msgid "Duplicate @E found.  "
 msgstr ""
 
-#: e2fsck/problem.c:1339
+#: e2fsck/problem.c:1353
 #, no-c-format
 #. @-expanded: entry '%Dn' in %p (%i) has a non-unique filename.\n
 #. @-expanded: Rename to %s
@@ -2102,7 +2118,7 @@ msgid ""
 "Rename to %s"
 msgstr ""
 
-#: e2fsck/problem.c:1344
+#: e2fsck/problem.c:1358
 #. @-expanded: Duplicate entry '%Dn' found.\n
 #. @-expanded: \tMarking %p (%i) to be rebuilt.\n
 #. @-expanded: \n
@@ -2112,115 +2128,115 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1349
+#: e2fsck/problem.c:1363
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
 msgid "i_blocks_hi @F %N, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1354
+#: e2fsck/problem.c:1368
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
 msgid "Unexpected @b in @h %d (%q).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1358
+#: e2fsck/problem.c:1372
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1363
+#: e2fsck/problem.c:1377
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1368
+#: e2fsck/problem.c:1382
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
 msgid "i_file_acl_hi @F %N, @s zero.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1375
+#: e2fsck/problem.c:1389
 #. @-expanded: Pass 3: Checking directory connectivity\n
 msgid "Pass 3: Checking @d connectivity\n"
 msgstr ""
 
-#: e2fsck/problem.c:1380
+#: e2fsck/problem.c:1394
 #. @-expanded: root inode not allocated.  
 msgid "@r not allocated.  "
 msgstr ""
 
-#: e2fsck/problem.c:1385
+#: e2fsck/problem.c:1399
 #. @-expanded: No room in lost+found directory.  
 msgid "No room in @l @d.  "
 msgstr ""
 
-#: e2fsck/problem.c:1390
+#: e2fsck/problem.c:1404
 #, c-format
 #. @-expanded: Unconnected directory inode %i (%p)\n
 msgid "Unconnected @d @i %i (%p)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1395
+#: e2fsck/problem.c:1409
 #. @-expanded: /lost+found not found.  
 msgid "/@l not found.  "
 msgstr ""
 
-#: e2fsck/problem.c:1400
+#: e2fsck/problem.c:1414
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1405
+#: e2fsck/problem.c:1419
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1410
+#: e2fsck/problem.c:1424
 #, c-format
 #. @-expanded: Could not expand /lost+found: %m\n
 msgid "Could not expand /@l: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1415
+#: e2fsck/problem.c:1429
 #, c-format
 msgid "Could not reconnect %i: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1420
+#: e2fsck/problem.c:1434
 #, c-format
 #. @-expanded: Error while trying to find /lost+found: %m\n
 msgid "Error while trying to find /@l: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1425
+#: e2fsck/problem.c:1439
 #, c-format
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
 msgstr ""
 
-#: e2fsck/problem.c:1430
+#: e2fsck/problem.c:1444
 #, c-format
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
 msgstr ""
 
-#: e2fsck/problem.c:1435
+#: e2fsck/problem.c:1449
 #, c-format
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
 msgstr ""
 
-#: e2fsck/problem.c:1440
+#: e2fsck/problem.c:1454
 #, c-format
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
 msgstr ""
 
-#: e2fsck/problem.c:1445
+#: e2fsck/problem.c:1459
 #, c-format
 #. @-expanded: Error while adjusting inode count on inode %i\n
 msgid "Error while adjusting @i count on @i %i\n"
 msgstr ""
 
-#: e2fsck/problem.c:1450
+#: e2fsck/problem.c:1464
 #, c-format
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
@@ -2229,7 +2245,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1455
+#: e2fsck/problem.c:1469
 #, c-format
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
 #. @-expanded: \n
@@ -2238,73 +2254,73 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/problem.c:1465
+#: e2fsck/problem.c:1479
 #, c-format
 #. @-expanded: Error creating root directory (%s): %m\n
 msgid "Error creating root @d (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1470
+#: e2fsck/problem.c:1484
 #, c-format
 #. @-expanded: Error creating /lost+found directory (%s): %m\n
 msgid "Error creating /@l @d (%s): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1475
+#: e2fsck/problem.c:1489
 #. @-expanded: root inode is not a directory; aborting.\n
 msgid "@r is not a @d; aborting.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1480
+#: e2fsck/problem.c:1494
 #. @-expanded: Cannot proceed without a root inode.\n
 msgid "Cannot proceed without a @r.\n"
 msgstr ""
 
-#: e2fsck/problem.c:1490
+#: e2fsck/problem.c:1504
 #, c-format
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
 msgid "/@l is not a @d (ino=%i)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1497
+#: e2fsck/problem.c:1511
 msgid "Pass 3A: Optimizing directories\n"
 msgstr ""
 
-#: e2fsck/problem.c:1502
+#: e2fsck/problem.c:1516
 #, c-format
 msgid "Failed to create dirs_to_hash iterator: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1507
+#: e2fsck/problem.c:1521
 msgid "Failed to optimize directory %q (%d): %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1512
+#: e2fsck/problem.c:1526
 msgid "Optimizing directories: "
 msgstr ""
 
-#: e2fsck/problem.c:1529
+#: e2fsck/problem.c:1543
 msgid "Pass 4: Checking reference counts\n"
 msgstr ""
 
-#: e2fsck/problem.c:1534
+#: e2fsck/problem.c:1548
 #, c-format
 #. @-expanded: unattached zero-length inode %i.  
 msgid "@u @z @i %i.  "
 msgstr ""
 
-#: e2fsck/problem.c:1539
+#: e2fsck/problem.c:1553
 #, c-format
 #. @-expanded: unattached inode %i\n
 msgid "@u @i %i\n"
 msgstr ""
 
-#: e2fsck/problem.c:1544
+#: e2fsck/problem.c:1558
 #. @-expanded: inode %i ref count is %Il, should be %N.  
 msgid "@i %i ref count is %Il, @s %N.  "
 msgstr ""
 
-#: e2fsck/problem.c:1548
+#: e2fsck/problem.c:1562
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
 #. @-expanded: inode_link_info[%i] is %N, inode.i_links_count is %Il.  They should be the same!\n
@@ -2314,57 +2330,57 @@ msgid ""
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 
-#: e2fsck/problem.c:1558
+#: e2fsck/problem.c:1572
 #. @-expanded: Pass 5: Checking group summary information\n
 msgid "Pass 5: Checking @g summary information\n"
 msgstr ""
 
-#: e2fsck/problem.c:1563
+#: e2fsck/problem.c:1577
 #. @-expanded: Padding at end of inode bitmap is not set. 
 msgid "Padding at end of @i @B is not set. "
 msgstr ""
 
-#: e2fsck/problem.c:1568
+#: e2fsck/problem.c:1582
 #. @-expanded: Padding at end of block bitmap is not set. 
 msgid "Padding at end of @b @B is not set. "
 msgstr ""
 
-#: e2fsck/problem.c:1573
+#: e2fsck/problem.c:1587
 #. @-expanded: block bitmap differences: 
 msgid "@b @B differences: "
 msgstr ""
 
-#: e2fsck/problem.c:1593
+#: e2fsck/problem.c:1607
 #. @-expanded: inode bitmap differences: 
 msgid "@i @B differences: "
 msgstr ""
 
-#: e2fsck/problem.c:1613
+#: e2fsck/problem.c:1627
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1618
+#: e2fsck/problem.c:1632
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1623
+#: e2fsck/problem.c:1637
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
 msgid "Free @is count wrong (%i, counted=%j).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1628
+#: e2fsck/problem.c:1642
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1633
+#: e2fsck/problem.c:1647
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
 msgid "Free @bs count wrong (%b, counted=%c).\n"
 msgstr ""
 
-#: e2fsck/problem.c:1638
+#: e2fsck/problem.c:1652
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 msgid ""
@@ -2372,49 +2388,49 @@ msgid ""
 "endpoints (%i, %j)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1644
+#: e2fsck/problem.c:1658
 msgid "Internal error: fudging end of bitmap (%N)\n"
 msgstr ""
 
-#: e2fsck/problem.c:1649
+#: e2fsck/problem.c:1663
 #, c-format
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
 msgid "Error copying in replacement @i @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1654
+#: e2fsck/problem.c:1668
 #, c-format
 #. @-expanded: Error copying in replacement block bitmap: %m\n
 msgid "Error copying in replacement @b @B: %m\n"
 msgstr ""
 
-#: e2fsck/problem.c:1679
+#: e2fsck/problem.c:1693
 #, c-format
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
 msgstr ""
 
-#: e2fsck/problem.c:1684
+#: e2fsck/problem.c:1698
 #, c-format
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
 msgstr ""
 
-#: e2fsck/problem.c:1691
+#: e2fsck/problem.c:1705
 #. @-expanded: Recreate journal
 msgid "Recreate @j"
 msgstr ""
 
-#: e2fsck/problem.c:1696
+#: e2fsck/problem.c:1710
 msgid "Update quota info for quota type %N"
 msgstr ""
 
-#: e2fsck/problem.c:1815
+#: e2fsck/problem.c:1829
 #, c-format
 msgid "Unhandled error code (0x%x)!\n"
 msgstr ""
 
-#: e2fsck/problem.c:1940 e2fsck/problem.c:1944
+#: e2fsck/problem.c:1954 e2fsck/problem.c:1958
 msgid "IGNORED"
 msgstr ""
 
@@ -2593,57 +2609,57 @@ msgid_plural "%12u links\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:210
+#: e2fsck/unix.c:209
 #, c-format
 msgid "%12u symbolic link"
 msgid_plural "%12u symbolic links"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:212
+#: e2fsck/unix.c:211
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:216
+#: e2fsck/unix.c:215
 #, c-format
 msgid "%12u socket\n"
 msgid_plural "%12u sockets\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:220
+#: e2fsck/unix.c:219
 #, c-format
 msgid "%12u file\n"
 msgid_plural "%12u files\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: e2fsck/unix.c:234 misc/badblocks.c:983 misc/tune2fs.c:1970 misc/util.c:147
-#: resize/main.c:247
+#: e2fsck/unix.c:232 misc/badblocks.c:983 misc/tune2fs.c:1985 misc/util.c:147
+#: resize/main.c:259
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr ""
 
-#: e2fsck/unix.c:254
+#: e2fsck/unix.c:252
 #, c-format
 msgid "Warning!  %s is %s.\n"
 msgstr ""
 
-#: e2fsck/unix.c:261
+#: e2fsck/unix.c:259
 #, c-format
 msgid "%s is %s.\n"
 msgstr ""
 
-#: e2fsck/unix.c:264
+#: e2fsck/unix.c:262
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:266
+#: e2fsck/unix.c:264
 msgid ""
 "\n"
 "\n"
@@ -2652,134 +2668,134 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:271
+#: e2fsck/unix.c:269
 msgid "Do you really want to continue"
 msgstr ""
 
-#: e2fsck/unix.c:273
+#: e2fsck/unix.c:271
 #, c-format
 msgid "check aborted.\n"
 msgstr ""
 
-#: e2fsck/unix.c:363
+#: e2fsck/unix.c:361
 msgid " contains a file system with errors"
 msgstr ""
 
-#: e2fsck/unix.c:365
+#: e2fsck/unix.c:363
 msgid " was not cleanly unmounted"
 msgstr ""
 
-#: e2fsck/unix.c:367
+#: e2fsck/unix.c:365
 msgid " primary superblock features different from backup"
 msgstr ""
 
-#: e2fsck/unix.c:371
+#: e2fsck/unix.c:369
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:378
+#: e2fsck/unix.c:376
 msgid " has filesystem last checked time in the future"
 msgstr ""
 
-#: e2fsck/unix.c:384
+#: e2fsck/unix.c:382
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr ""
 
-#: e2fsck/unix.c:393
+#: e2fsck/unix.c:391
 msgid ", check forced.\n"
 msgstr ""
 
-#: e2fsck/unix.c:426
+#: e2fsck/unix.c:424
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr ""
 
-#: e2fsck/unix.c:445
+#: e2fsck/unix.c:443
 msgid " (check deferred; on battery)"
 msgstr ""
 
-#: e2fsck/unix.c:448
+#: e2fsck/unix.c:446
 msgid " (check after next mount)"
 msgstr ""
 
-#: e2fsck/unix.c:450
+#: e2fsck/unix.c:448
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr ""
 
-#: e2fsck/unix.c:600
+#: e2fsck/unix.c:598
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr ""
 
-#: e2fsck/unix.c:669
+#: e2fsck/unix.c:667
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr ""
 
-#: e2fsck/unix.c:696
+#: e2fsck/unix.c:694
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:721
+#: e2fsck/unix.c:719
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: e2fsck/unix.c:790
+#: e2fsck/unix.c:788
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:794
+#: e2fsck/unix.c:792
 msgid "Invalid completion information file descriptor"
 msgstr ""
 
-#: e2fsck/unix.c:809
+#: e2fsck/unix.c:807
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr ""
 
-#: e2fsck/unix.c:830
+#: e2fsck/unix.c:828
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr ""
 
-#: e2fsck/unix.c:861 e2fsck/unix.c:933 misc/tune2fs.c:802 misc/tune2fs.c:1091
-#: misc/tune2fs.c:1109
+#: e2fsck/unix.c:859 e2fsck/unix.c:931 misc/tune2fs.c:811 misc/tune2fs.c:1100
+#: misc/tune2fs.c:1118
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr ""
 
-#: e2fsck/unix.c:912
+#: e2fsck/unix.c:910
 msgid "The -n and -D options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:917
+#: e2fsck/unix.c:915
 msgid "The -n and -c options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:922
+#: e2fsck/unix.c:920
 msgid "The -n and -l/-L options are incompatible."
 msgstr ""
 
-#: e2fsck/unix.c:976
+#: e2fsck/unix.c:974
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1024
+#: e2fsck/unix.c:1022
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1033
+#: e2fsck/unix.c:1031
 #, c-format
 msgid ""
 "\n"
@@ -2787,194 +2803,194 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1122
+#: e2fsck/unix.c:1120
 #, c-format
 msgid ""
 "MMP interval is %u seconds and total wait time is %u seconds. Please "
 "wait...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1139 e2fsck/unix.c:1144
+#: e2fsck/unix.c:1137 e2fsck/unix.c:1142
 msgid "while checking MMP block"
 msgstr ""
 
-#: e2fsck/unix.c:1146 misc/tune2fs.c:1903
+#: e2fsck/unix.c:1144 misc/tune2fs.c:1912
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
 msgstr ""
 
-#: e2fsck/unix.c:1196
+#: e2fsck/unix.c:1194
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr ""
 
-#: e2fsck/unix.c:1204
+#: e2fsck/unix.c:1202
 msgid "while trying to initialize program"
 msgstr ""
 
-#: e2fsck/unix.c:1227
+#: e2fsck/unix.c:1225
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1239
+#: e2fsck/unix.c:1237
 msgid "need terminal for interactive repairs"
 msgstr ""
 
-#: e2fsck/unix.c:1292
+#: e2fsck/unix.c:1290
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1294
+#: e2fsck/unix.c:1292
 msgid "Superblock invalid,"
 msgstr ""
 
-#: e2fsck/unix.c:1295
+#: e2fsck/unix.c:1293
 msgid "Group descriptors look bad..."
 msgstr ""
 
-#: e2fsck/unix.c:1305
+#: e2fsck/unix.c:1303
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr ""
 
-#: e2fsck/unix.c:1309
+#: e2fsck/unix.c:1307
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr ""
 
-#: e2fsck/unix.c:1337
+#: e2fsck/unix.c:1335
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1343
+#: e2fsck/unix.c:1341
 msgid "Could this be a zero-length partition?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1346
+#: e2fsck/unix.c:1344
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr ""
 
-#: e2fsck/unix.c:1351
+#: e2fsck/unix.c:1349
 msgid "Possibly non-existent or swap device?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1354
+#: e2fsck/unix.c:1352
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1357
+#: e2fsck/unix.c:1355
 msgid "Possibly non-existent device?\n"
 msgstr ""
 
-#: e2fsck/unix.c:1360
+#: e2fsck/unix.c:1358
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1425
+#: e2fsck/unix.c:1423
 msgid "Get a newer version of e2fsck!"
 msgstr ""
 
-#: e2fsck/unix.c:1469
+#: e2fsck/unix.c:1467
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr ""
 
-#: e2fsck/unix.c:1480
+#: e2fsck/unix.c:1478
 msgid ""
 "Warning: skipping journal recovery because doing a read-only filesystem "
 "check.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1493
+#: e2fsck/unix.c:1491
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr ""
 
-#: e2fsck/unix.c:1499
+#: e2fsck/unix.c:1497
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr ""
 
-#: e2fsck/unix.c:1523
+#: e2fsck/unix.c:1521
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr ""
 
-#: e2fsck/unix.c:1538
+#: e2fsck/unix.c:1536
 #, c-format
 msgid "%s: warning: compression support is experimental.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1544
+#: e2fsck/unix.c:1542
 #, c-format
 msgid ""
 "%s: e2fsck not compiled with HTREE support,\n"
 "\tbut filesystem %s has HTREE directories.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1596
+#: e2fsck/unix.c:1594
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr ""
 
-#: e2fsck/unix.c:1599
+#: e2fsck/unix.c:1597
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1640
+#: e2fsck/unix.c:1638
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr ""
 
-#: e2fsck/unix.c:1650
+#: e2fsck/unix.c:1648
 msgid " Done.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1651
+#: e2fsck/unix.c:1649
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
 
-#: e2fsck/unix.c:1674
+#: e2fsck/unix.c:1672
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr ""
 
-#: e2fsck/unix.c:1678
+#: e2fsck/unix.c:1676
 msgid "while resetting context"
 msgstr ""
 
-#: e2fsck/unix.c:1685
+#: e2fsck/unix.c:1683
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr ""
 
-#: e2fsck/unix.c:1690
+#: e2fsck/unix.c:1688
 msgid "aborted"
 msgstr ""
 
-#: e2fsck/unix.c:1702 e2fsck/util.c:67
+#: e2fsck/unix.c:1700 e2fsck/util.c:67
 #, c-format
 msgid ""
 "\n"
 "%s: ***** FILE SYSTEM WAS MODIFIED *****\n"
 msgstr ""
 
-#: e2fsck/unix.c:1706
+#: e2fsck/unix.c:1704
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr ""
 
-#: e2fsck/unix.c:1714 e2fsck/util.c:73
+#: e2fsck/unix.c:1712 e2fsck/util.c:73
 #, c-format
 msgid ""
 "\n"
@@ -2982,88 +2998,88 @@ msgid ""
 "\n"
 msgstr ""
 
-#: e2fsck/unix.c:1754
+#: e2fsck/unix.c:1752
 msgid "while setting block group checksum info"
 msgstr ""
 
-#: e2fsck/util.c:189 misc/util.c:70
+#: e2fsck/util.c:190 misc/util.c:70
 msgid "yY"
 msgstr ""
 
-#: e2fsck/util.c:190
+#: e2fsck/util.c:191
 msgid "nN"
 msgstr ""
 
-#: e2fsck/util.c:204
+#: e2fsck/util.c:205
 msgid "<y>"
 msgstr ""
 
-#: e2fsck/util.c:206
+#: e2fsck/util.c:207
 msgid "<n>"
 msgstr ""
 
-#: e2fsck/util.c:208
+#: e2fsck/util.c:209
 msgid " (y/n)"
 msgstr ""
 
-#: e2fsck/util.c:222
+#: e2fsck/util.c:223
 msgid "cancelled!\n"
 msgstr ""
 
-#: e2fsck/util.c:237
+#: e2fsck/util.c:238
 msgid "yes\n"
 msgstr ""
 
-#: e2fsck/util.c:239
+#: e2fsck/util.c:240
 msgid "no\n"
 msgstr ""
 
-#: e2fsck/util.c:249
+#: e2fsck/util.c:250
 #, c-format
 msgid ""
 "%s? no\n"
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:253
+#: e2fsck/util.c:254
 #, c-format
 msgid ""
 "%s? yes\n"
 "\n"
 msgstr ""
 
-#: e2fsck/util.c:257
+#: e2fsck/util.c:258
 msgid "yes"
 msgstr ""
 
-#: e2fsck/util.c:257
+#: e2fsck/util.c:258
 msgid "no"
 msgstr ""
 
-#: e2fsck/util.c:272
+#: e2fsck/util.c:273
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
 msgstr ""
 
-#: e2fsck/util.c:277
+#: e2fsck/util.c:278
 msgid "reading inode and block bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:285
+#: e2fsck/util.c:286
 #, c-format
 msgid "while retrying to read bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:297
+#: e2fsck/util.c:298
 msgid "writing block and inode bitmaps"
 msgstr ""
 
-#: e2fsck/util.c:302
+#: e2fsck/util.c:303
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
 msgstr ""
 
-#: e2fsck/util.c:314
+#: e2fsck/util.c:315
 #, c-format
 msgid ""
 "\n"
@@ -3072,41 +3088,41 @@ msgid ""
 "\t(i.e., without -a or -p options)\n"
 msgstr ""
 
-#: e2fsck/util.c:395
+#: e2fsck/util.c:396
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
 msgstr ""
 
-#: e2fsck/util.c:399
+#: e2fsck/util.c:400
 #, c-format
 msgid "Memory used: %lu, "
 msgstr ""
 
-#: e2fsck/util.c:406
+#: e2fsck/util.c:407
 #, c-format
 msgid "time: %5.2f/%5.2f/%5.2f\n"
 msgstr ""
 
-#: e2fsck/util.c:411
+#: e2fsck/util.c:412
 #, c-format
 msgid "elapsed time: %6.3f\n"
 msgstr ""
 
-#: e2fsck/util.c:446 e2fsck/util.c:460
+#: e2fsck/util.c:447 e2fsck/util.c:461
 #, c-format
 msgid "while reading inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:474 e2fsck/util.c:487
+#: e2fsck/util.c:475 e2fsck/util.c:488
 #, c-format
 msgid "while writing inode %lu in %s"
 msgstr ""
 
-#: e2fsck/util.c:636
+#: e2fsck/util.c:637
 msgid "while allocating zeroizing buffer"
 msgstr ""
 
-#: e2fsck/util.c:788
+#: e2fsck/util.c:785
 msgid ""
 "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
 "running.\n"
@@ -3116,7 +3132,7 @@ msgstr ""
 msgid "done                                                 \n"
 msgstr ""
 
-#: misc/badblocks.c:93
+#: misc/badblocks.c:92
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
@@ -3126,14 +3142,14 @@ msgid ""
 "       device [last_block [first_block]]\n"
 msgstr ""
 
-#: misc/badblocks.c:104
+#: misc/badblocks.c:103
 #, c-format
 msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
 
-#: misc/badblocks.c:219
+#: misc/badblocks.c:218
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
 msgstr ""
@@ -3303,51 +3319,46 @@ msgstr ""
 msgid "bad version - %s\n"
 msgstr ""
 
-#: misc/chattr.c:202 misc/lsattr.c:116
+#: misc/chattr.c:201 misc/lsattr.c:116
 #, c-format
 msgid "while trying to stat %s"
 msgstr ""
 
-#: misc/chattr.c:209
+#: misc/chattr.c:208
 #, c-format
 msgid "while reading flags on %s"
 msgstr ""
 
-#: misc/chattr.c:218 misc/chattr.c:237
-#, c-format
-msgid "Clearing extent flag not supported on %s"
-msgstr ""
-
-#: misc/chattr.c:223 misc/chattr.c:242
+#: misc/chattr.c:213 misc/chattr.c:225
 #, c-format
 msgid "Flags of %s set as "
 msgstr ""
 
-#: misc/chattr.c:251
+#: misc/chattr.c:234
 #, c-format
 msgid "while setting flags on %s"
 msgstr ""
 
-#: misc/chattr.c:259
+#: misc/chattr.c:242
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr ""
 
-#: misc/chattr.c:263
+#: misc/chattr.c:246
 #, c-format
 msgid "while setting version on %s"
 msgstr ""
 
-#: misc/chattr.c:283
+#: misc/chattr.c:266
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr ""
 
-#: misc/chattr.c:323
+#: misc/chattr.c:306
 msgid "= is incompatible with - and +\n"
 msgstr ""
 
-#: misc/chattr.c:331
+#: misc/chattr.c:314
 msgid "Must use '-v', =, - or +\n"
 msgstr ""
 
@@ -3457,7 +3468,7 @@ msgstr ""
 msgid "Bad blocks: %u"
 msgstr ""
 
-#: misc/dumpe2fs.c:333 misc/tune2fs.c:302
+#: misc/dumpe2fs.c:333 misc/tune2fs.c:306
 msgid "while reading journal inode"
 msgstr ""
 
@@ -3491,7 +3502,7 @@ msgstr ""
 msgid "Journal errno:            %d\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:401 misc/tune2fs.c:218
+#: misc/dumpe2fs.c:401 misc/tune2fs.c:222
 msgid "while reading journal superblock"
 msgstr ""
 
@@ -3516,7 +3527,7 @@ msgstr ""
 msgid "Journal users:            %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:442 misc/mke2fs.c:662 misc/tune2fs.c:1128
+#: misc/dumpe2fs.c:442 misc/mke2fs.c:666 misc/tune2fs.c:1137
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr ""
@@ -3545,13 +3556,13 @@ msgid ""
 "\tblocksize=<blocksize>\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:554 misc/mke2fs.c:1525
+#: misc/dumpe2fs.c:554 misc/mke2fs.c:1555
 #, c-format
 msgid "\tUsing %s\n"
 msgstr ""
 
-#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1914
-#: resize/main.c:305
+#: misc/dumpe2fs.c:590 misc/e2image.c:1326 misc/tune2fs.c:1923
+#: resize/main.c:317
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
 msgstr ""
@@ -3563,37 +3574,37 @@ msgid ""
 "%s: %s: error reading bitmaps: %s\n"
 msgstr ""
 
-#: misc/e2image.c:87
+#: misc/e2image.c:90
 #, c-format
-msgid "Usage: %s [-rsIQ] device image_file\n"
+msgid "Usage: %s [-rsIQa] device image_file\n"
 msgstr ""
 
-#: misc/e2image.c:135
+#: misc/e2image.c:138
 #, c-format
 msgid "Error: header size is bigger than wrt_size\n"
 msgstr ""
 
-#: misc/e2image.c:141
+#: misc/e2image.c:144
 msgid "Couldn't allocate header buffer\n"
 msgstr ""
 
-#: misc/e2image.c:171
+#: misc/e2image.c:174
 msgid "while writing superblock"
 msgstr ""
 
-#: misc/e2image.c:179
+#: misc/e2image.c:182
 msgid "while writing inode table"
 msgstr ""
 
-#: misc/e2image.c:186
+#: misc/e2image.c:189
 msgid "while writing block bitmap"
 msgstr ""
 
-#: misc/e2image.c:193
+#: misc/e2image.c:196
 msgid "while writing inode bitmap"
 msgstr ""
 
-#: misc/e2image.c:1341
+#: misc/e2image.c:1365
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
 msgstr ""
@@ -3618,7 +3629,7 @@ msgstr ""
 msgid "e2label: not an ext2 filesystem\n"
 msgstr ""
 
-#: misc/e2label.c:97 misc/tune2fs.c:2065
+#: misc/e2label.c:97 misc/tune2fs.c:2080
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr ""
@@ -3633,7 +3644,7 @@ msgstr ""
 msgid "e2label: error writing superblock\n"
 msgstr ""
 
-#: misc/e2label.c:117 misc/tune2fs.c:794
+#: misc/e2label.c:117 misc/tune2fs.c:803
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr ""
@@ -3799,7 +3810,7 @@ msgstr ""
 msgid "While reading version on %s"
 msgstr ""
 
-#: misc/mke2fs.c:114
+#: misc/mke2fs.c:116
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -3812,35 +3823,35 @@ msgid ""
 "count]\n"
 msgstr ""
 
-#: misc/mke2fs.c:217
+#: misc/mke2fs.c:221
 #, c-format
 msgid "Running command: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:221
+#: misc/mke2fs.c:225
 #, c-format
 msgid "while trying to run '%s'"
 msgstr ""
 
-#: misc/mke2fs.c:228
+#: misc/mke2fs.c:232
 msgid "while processing list of bad blocks from program"
 msgstr ""
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:259
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr ""
 
-#: misc/mke2fs.c:257
+#: misc/mke2fs.c:261
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 
-#: misc/mke2fs.c:260
+#: misc/mke2fs.c:264
 msgid "Aborting....\n"
 msgstr ""
 
-#: misc/mke2fs.c:280
+#: misc/mke2fs.c:284
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -3848,209 +3859,219 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:299
+#: misc/mke2fs.c:303
 msgid "while marking bad blocks as used"
 msgstr ""
 
-#: misc/mke2fs.c:316
+#: misc/mke2fs.c:320
 msgid "Writing inode tables: "
 msgstr ""
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:341
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %llu: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:351 misc/mke2fs.c:2175 misc/mke2fs.c:2429
+#: misc/mke2fs.c:355 misc/mke2fs.c:2257 misc/mke2fs.c:2512
 #, c-format
 msgid "done                            \n"
 msgstr ""
 
-#: misc/mke2fs.c:362
+#: misc/mke2fs.c:366
 msgid "while creating root dir"
 msgstr ""
 
-#: misc/mke2fs.c:369
+#: misc/mke2fs.c:373
 msgid "while reading root inode"
 msgstr ""
 
-#: misc/mke2fs.c:383
+#: misc/mke2fs.c:385
 msgid "while setting root inode ownership"
 msgstr ""
 
-#: misc/mke2fs.c:401
+#: misc/mke2fs.c:403
 msgid "while creating /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:410
 msgid "while looking up /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:421
+#: misc/mke2fs.c:423
 msgid "while expanding /lost+found"
 msgstr ""
 
-#: misc/mke2fs.c:436
+#: misc/mke2fs.c:438
 msgid "while setting bad block inode"
 msgstr ""
 
-#: misc/mke2fs.c:463
+#: misc/mke2fs.c:465
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr ""
 
-#: misc/mke2fs.c:473
+#: misc/mke2fs.c:475
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:489
+#: misc/mke2fs.c:491
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:505
+#: misc/mke2fs.c:507
 msgid "while initializing journal superblock"
 msgstr ""
 
-#: misc/mke2fs.c:513
+#: misc/mke2fs.c:515
 msgid "Zeroing journal device: "
 msgstr ""
 
-#: misc/mke2fs.c:525
+#: misc/mke2fs.c:527
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr ""
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:545
 msgid "while writing journal superblock"
 msgstr ""
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:560
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:563
+#: misc/mke2fs.c:565
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:566
+#: misc/mke2fs.c:568
 #, c-format
 msgid "OS type: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:570
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:572
+#: misc/mke2fs.c:574
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:576
+#: misc/mke2fs.c:578
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr ""
 
-#: misc/mke2fs.c:578
+#: misc/mke2fs.c:580
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:580
+#: misc/mke2fs.c:582
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr ""
 
-#: misc/mke2fs.c:582
+#: misc/mke2fs.c:584
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr ""
 
-#: misc/mke2fs.c:585
+#: misc/mke2fs.c:587
 #, c-format
 msgid "First data block=%u\n"
 msgstr ""
 
-#: misc/mke2fs.c:587
+#: misc/mke2fs.c:589
 #, c-format
-msgid "Maximum filesystem blocks=%lu\n"
+msgid "Root directory owner=%u:%u\n"
 msgstr ""
 
 #: misc/mke2fs.c:591
 #, c-format
+msgid "Maximum filesystem blocks=%lu\n"
+msgstr ""
+
+#: misc/mke2fs.c:595
+#, c-format
 msgid "%u block groups\n"
 msgstr ""
 
-#: misc/mke2fs.c:593
+#: misc/mke2fs.c:597
 #, c-format
 msgid "%u block group\n"
 msgstr ""
 
-#: misc/mke2fs.c:596
+#: misc/mke2fs.c:600
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:599
+#: misc/mke2fs.c:603
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:605
 #, c-format
 msgid "%u inodes per group\n"
 msgstr ""
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:612
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:687 misc/tune2fs.c:1156
+#: misc/mke2fs.c:691 misc/tune2fs.c:1165
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:705
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:716
+#: misc/mke2fs.c:720
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:739
+#: misc/mke2fs.c:743
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:746
+#: misc/mke2fs.c:750
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 
-#: misc/mke2fs.c:770
+#: misc/mke2fs.c:774
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:801 misc/mke2fs.c:810
+#, c-format
+msgid "Invalid root_owner: '%s'\n"
+msgstr ""
+
+#: misc/mke2fs.c:835
 #, c-format
 msgid "Invalid quotatype parameter: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:819
+#: misc/mke2fs.c:846
 #, c-format
 msgid ""
 "\n"
@@ -4065,6 +4086,8 @@ msgid ""
 "\tresize=<resize maximum size in blocks>\n"
 "\tlazy_itable_init=<0 to disable, 1 to enable>\n"
 "\tlazy_journal_init=<0 to disable, 1 to enable>\n"
+"\troot_uid=<uid of root directory>\n"
+"\troot_gid=<gid of root directory>\n"
 "\ttest_fs\n"
 "\tdiscard\n"
 "\tnodiscard\n"
@@ -4072,7 +4095,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:868
 #, c-format
 msgid ""
 "\n"
@@ -4080,43 +4103,43 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:907
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
 "\t%s\n"
 msgstr ""
 
-#: misc/mke2fs.c:891 misc/tune2fs.c:393
+#: misc/mke2fs.c:920 misc/tune2fs.c:398
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:903 misc/tune2fs.c:345
+#: misc/mke2fs.c:932 misc/tune2fs.c:349
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1043
+#: misc/mke2fs.c:1072
 #, c-format
 msgid ""
 "\n"
 "Your mke2fs.conf file does not define the %s filesystem type.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1047
+#: misc/mke2fs.c:1076
 #, c-format
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1051
+#: misc/mke2fs.c:1080
 #, c-format
 msgid "Aborting...\n"
 msgstr ""
 
-#: misc/mke2fs.c:1091
+#: misc/mke2fs.c:1120
 #, c-format
 msgid ""
 "\n"
@@ -4124,126 +4147,130 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:1249
+#: misc/mke2fs.c:1276
 #, c-format
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1290
+#: misc/mke2fs.c:1317
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr ""
 
-#: misc/mke2fs.c:1330
+#: misc/mke2fs.c:1357
 #, c-format
 msgid "invalid block size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1334
+#: misc/mke2fs.c:1361
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1350
+#: misc/mke2fs.c:1377
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1362
+#: misc/mke2fs.c:1387
+msgid "'-R' is deprecated, use '-E' instead"
+msgstr ""
+
+#: misc/mke2fs.c:1399
 msgid "Illegal number for blocks per group"
 msgstr ""
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1404
 msgid "blocks per group must be multiple of 8"
 msgstr ""
 
-#: misc/mke2fs.c:1375
+#: misc/mke2fs.c:1412
 msgid "Illegal number for flex_bg size"
 msgstr ""
 
-#: misc/mke2fs.c:1381
+#: misc/mke2fs.c:1418
 msgid "flex_bg size must be a power of 2"
 msgstr ""
 
-#: misc/mke2fs.c:1391
+#: misc/mke2fs.c:1428
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1401
+#: misc/mke2fs.c:1438
+#, c-format
+msgid "invalid inode size - %s"
+msgstr ""
+
+#: misc/mke2fs.c:1450
 #, c-format
 msgid ""
 "Warning: -K option is deprecated and should not be used anymore. Use '-E "
 "nodiscard' extended option instead!\n"
 msgstr ""
 
-#: misc/mke2fs.c:1415
+#: misc/mke2fs.c:1460
 msgid "in malloc for bad_blocks_filename"
 msgstr ""
 
-#: misc/mke2fs.c:1425
+#: misc/mke2fs.c:1473
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1443
-#, c-format
-msgid "bad revision level - %s"
-msgstr ""
-
-#: misc/mke2fs.c:1455
+#: misc/mke2fs.c:1488
 #, c-format
-msgid "invalid inode size - %s"
+msgid "bad num inodes - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1475
+#: misc/mke2fs.c:1505
 #, c-format
-msgid "bad num inodes - %s"
+msgid "bad revision level - %s"
 msgstr ""
 
-#: misc/mke2fs.c:1492
+#: misc/mke2fs.c:1519
 msgid "The -t option may only be used once"
 msgstr ""
 
-#: misc/mke2fs.c:1500
+#: misc/mke2fs.c:1527
 msgid "The -T option may only be used once"
 msgstr ""
 
-#: misc/mke2fs.c:1550 misc/mke2fs.c:2508
+#: misc/mke2fs.c:1580 misc/mke2fs.c:2591
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1556
+#: misc/mke2fs.c:1586
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1562
+#: misc/mke2fs.c:1592
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1573
+#: misc/mke2fs.c:1603
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr ""
 
-#: misc/mke2fs.c:1583
+#: misc/mke2fs.c:1613
 msgid "filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:1596 resize/main.c:374
+#: misc/mke2fs.c:1626 resize/main.c:367
 msgid "while trying to determine filesystem size"
 msgstr ""
 
-#: misc/mke2fs.c:1602
+#: misc/mke2fs.c:1632
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr ""
 
-#: misc/mke2fs.c:1609
+#: misc/mke2fs.c:1639
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4251,126 +4278,156 @@ msgid ""
 "\tto re-read your partition table.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1656
 msgid "Filesystem larger than apparent device size."
 msgstr ""
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1676
 #, c-format
 msgid "Failed to parse fs types list\n"
 msgstr ""
 
-#: misc/mke2fs.c:1700
+#: misc/mke2fs.c:1730
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
 "\tin 32 bits using a blocksize of %d.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1716
+#: misc/mke2fs.c:1746
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr ""
 
-#: misc/mke2fs.c:1723
+#: misc/mke2fs.c:1753
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1730
+#: misc/mke2fs.c:1760
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1742
+#: misc/mke2fs.c:1772
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 
-#: misc/mke2fs.c:1756
+#: misc/mke2fs.c:1786
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr ""
 
-#: misc/mke2fs.c:1772
+#: misc/mke2fs.c:1802
 #, c-format
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1789
+#: misc/mke2fs.c:1819
 msgid "while trying to determine hardware sector size"
 msgstr ""
 
-#: misc/mke2fs.c:1795
+#: misc/mke2fs.c:1825
 msgid "while trying to determine physical sector size"
 msgstr ""
 
-#: misc/mke2fs.c:1828
+#: misc/mke2fs.c:1858
 msgid "while setting blocksize; too small for device\n"
 msgstr ""
 
-#: misc/mke2fs.c:1833
+#: misc/mke2fs.c:1863
 #, c-format
 msgid ""
 "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
 msgstr ""
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1881
+msgid "The cluster size may not be smaller than the block size.\n"
+msgstr ""
+
+#: misc/mke2fs.c:1887
+msgid "specifying a cluster size requires the bigalloc feature"
+msgstr ""
+
+#: misc/mke2fs.c:1906
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr ""
 
-#: misc/mke2fs.c:1867
+#: misc/mke2fs.c:1909
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1869
+#: misc/mke2fs.c:1911
 #, c-format
 msgid ""
 "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr ""
 
-#: misc/mke2fs.c:1880
+#: misc/mke2fs.c:1930
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1884
+#: misc/mke2fs.c:1934
 #, c-format
 msgid ""
 "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 
-#: misc/mke2fs.c:1920
+#: misc/mke2fs.c:1968
+msgid "Can't support bigalloc feature without extents feature"
+msgstr ""
+
+#: misc/mke2fs.c:1975
+#, c-format
+msgid ""
+"\n"
+"Warning: the bigalloc feature is still under development\n"
+"See https://ext4.wiki.kernel.org/index.php/Bigalloc for more information\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1982 misc/tune2fs.c:740
+#, c-format
+msgid ""
+"\n"
+"Warning: the quota feature is still under development\n"
+"See https://ext4.wiki.kernel.org/index.php/Quota for more information\n"
+"\n"
+msgstr ""
+
+#: misc/mke2fs.c:1993
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:1929
+#: misc/mke2fs.c:2002
 msgid "blocks per group count out of range"
 msgstr ""
 
-#: misc/mke2fs.c:1944
+#: misc/mke2fs.c:2026
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr ""
 
-#: misc/mke2fs.c:1956
+#: misc/mke2fs.c:2038
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr ""
 
-#: misc/mke2fs.c:1974
+#: misc/mke2fs.c:2056
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr ""
 
-#: misc/mke2fs.c:1981
+#: misc/mke2fs.c:2063
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr ""
 
-#: misc/mke2fs.c:1995
+#: misc/mke2fs.c:2077
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4378,7 +4435,7 @@ msgid ""
 "\tor lower inode count (-N).\n"
 msgstr ""
 
-#: misc/mke2fs.c:2114
+#: misc/mke2fs.c:2196
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -4386,118 +4443,118 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/mke2fs.c:2128
+#: misc/mke2fs.c:2210
 msgid "while trying to setup undo file\n"
 msgstr ""
 
-#: misc/mke2fs.c:2154
+#: misc/mke2fs.c:2236
 msgid "Discarding device blocks: "
 msgstr ""
 
-#: misc/mke2fs.c:2170
+#: misc/mke2fs.c:2252
 msgid "failed - "
 msgstr ""
 
-#: misc/mke2fs.c:2277
+#: misc/mke2fs.c:2360
 msgid "while setting up superblock"
 msgstr ""
 
-#: misc/mke2fs.c:2286
+#: misc/mke2fs.c:2369
 #, c-format
 msgid "Discard succeeded and will return 0s  - skipping inode table wipe\n"
 msgstr ""
 
-#: misc/mke2fs.c:2369
+#: misc/mke2fs.c:2452
 #, c-format
 msgid "unknown os - %s"
 msgstr ""
 
-#: misc/mke2fs.c:2421
+#: misc/mke2fs.c:2504
 #, c-format
 msgid "Allocating group tables: "
 msgstr ""
 
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2508
 msgid "while trying to allocate filesystem tables"
 msgstr ""
 
-#: misc/mke2fs.c:2434
+#: misc/mke2fs.c:2517
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
 msgstr ""
 
-#: misc/mke2fs.c:2477
+#: misc/mke2fs.c:2560
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr ""
 
-#: misc/mke2fs.c:2490
+#: misc/mke2fs.c:2573
 msgid "while reserving blocks for online resize"
 msgstr ""
 
-#: misc/mke2fs.c:2501 misc/tune2fs.c:640
+#: misc/mke2fs.c:2584 misc/tune2fs.c:645
 msgid "journal"
 msgstr ""
 
-#: misc/mke2fs.c:2513
+#: misc/mke2fs.c:2596
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr ""
 
-#: misc/mke2fs.c:2520
+#: misc/mke2fs.c:2603
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
 
-#: misc/mke2fs.c:2525 misc/mke2fs.c:2557 misc/tune2fs.c:669 misc/tune2fs.c:683
+#: misc/mke2fs.c:2608 misc/mke2fs.c:2640 misc/tune2fs.c:674 misc/tune2fs.c:688
 #, c-format
 msgid "done\n"
 msgstr ""
 
-#: misc/mke2fs.c:2534
+#: misc/mke2fs.c:2617
 #, c-format
 msgid "Skipping journal creation in super-only mode\n"
 msgstr ""
 
-#: misc/mke2fs.c:2545
+#: misc/mke2fs.c:2628
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr ""
 
-#: misc/mke2fs.c:2553
+#: misc/mke2fs.c:2636
 msgid ""
 "\n"
 "\twhile trying to create journal"
 msgstr ""
 
-#: misc/mke2fs.c:2564 misc/tune2fs.c:446
+#: misc/mke2fs.c:2647 misc/tune2fs.c:451
 #, c-format
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 
-#: misc/mke2fs.c:2569
+#: misc/mke2fs.c:2652
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 
-#: misc/mke2fs.c:2582
+#: misc/mke2fs.c:2665
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 
-#: misc/mke2fs.c:2589
+#: misc/mke2fs.c:2672
 #, c-format
 msgid ""
 "\n"
 "Warning, had trouble writing out superblocks."
 msgstr ""
 
-#: misc/mke2fs.c:2591
+#: misc/mke2fs.c:2674
 #, c-format
 msgid ""
 "done\n"
@@ -4556,157 +4613,157 @@ msgid ""
 "\t[ -I new_inode_size ] device\n"
 msgstr ""
 
-#: misc/tune2fs.c:205
+#: misc/tune2fs.c:209
 msgid "while trying to open external journal"
 msgstr ""
 
-#: misc/tune2fs.c:210
+#: misc/tune2fs.c:214
 #, c-format
 msgid "%s is not a journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:225
+#: misc/tune2fs.c:229
 msgid "Journal superblock not found!\n"
 msgstr ""
 
-#: misc/tune2fs.c:236
+#: misc/tune2fs.c:240
 msgid "Filesystem's UUID not found on journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:257
+#: misc/tune2fs.c:261
 msgid ""
 "Cannot locate journal device. It was NOT removed\n"
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 
-#: misc/tune2fs.c:265
+#: misc/tune2fs.c:269
 msgid "Journal removed\n"
 msgstr ""
 
-#: misc/tune2fs.c:309
+#: misc/tune2fs.c:313
 msgid "while reading bitmaps"
 msgstr ""
 
-#: misc/tune2fs.c:317
+#: misc/tune2fs.c:321
 msgid "while clearing journal inode"
 msgstr ""
 
-#: misc/tune2fs.c:328
+#: misc/tune2fs.c:332
 msgid "while writing journal inode"
 msgstr ""
 
-#: misc/tune2fs.c:363
+#: misc/tune2fs.c:367
 #, c-format
 msgid "(and reboot afterwards!)\n"
 msgstr ""
 
-#: misc/tune2fs.c:396
+#: misc/tune2fs.c:401
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:402
+#: misc/tune2fs.c:407
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:411
+#: misc/tune2fs.c:416
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:419
+#: misc/tune2fs.c:424
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
 
-#: misc/tune2fs.c:438
+#: misc/tune2fs.c:443
 msgid ""
 "The multiple mount protection feature can't\n"
 "be set if the filesystem is mounted or\n"
 "read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:456
+#: misc/tune2fs.c:461
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
 msgstr ""
 
-#: misc/tune2fs.c:465
+#: misc/tune2fs.c:470
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 
-#: misc/tune2fs.c:473
+#: misc/tune2fs.c:478
 msgid "Error while reading bitmaps\n"
 msgstr ""
 
-#: misc/tune2fs.c:482
+#: misc/tune2fs.c:487
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
 msgstr ""
 
-#: misc/tune2fs.c:487
+#: misc/tune2fs.c:492
 msgid "while reading MMP block."
 msgstr ""
 
-#: misc/tune2fs.c:519
+#: misc/tune2fs.c:524
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr ""
 
-#: misc/tune2fs.c:530
+#: misc/tune2fs.c:535
 msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
 
-#: misc/tune2fs.c:590
+#: misc/tune2fs.c:595
 msgid ""
 "\n"
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 
-#: misc/tune2fs.c:635
+#: misc/tune2fs.c:640
 msgid "The filesystem already has a journal.\n"
 msgstr ""
 
-#: misc/tune2fs.c:653
+#: misc/tune2fs.c:658
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to open journal on %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:657
+#: misc/tune2fs.c:662
 #, c-format
 msgid "Creating journal on device %s: "
 msgstr ""
 
-#: misc/tune2fs.c:665
+#: misc/tune2fs.c:670
 #, c-format
 msgid "while adding filesystem to journal on %s"
 msgstr ""
 
-#: misc/tune2fs.c:671
+#: misc/tune2fs.c:676
 msgid "Creating journal inode: "
 msgstr ""
 
-#: misc/tune2fs.c:680
+#: misc/tune2fs.c:685
 msgid ""
 "\n"
 "\twhile trying to create journal file"
 msgstr ""
 
-#: misc/tune2fs.c:754
+#: misc/tune2fs.c:763
 msgid "Couldn't allocate memory to parse quota options!\n"
 msgstr ""
 
-#: misc/tune2fs.c:776
+#: misc/tune2fs.c:785
 msgid ""
 "\n"
 "Bad quota options specified.\n"
@@ -4719,70 +4776,70 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:837
+#: misc/tune2fs.c:846
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr ""
 
-#: misc/tune2fs.c:861 misc/tune2fs.c:874
+#: misc/tune2fs.c:870 misc/tune2fs.c:883
 #, c-format
 msgid "bad mounts count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:890
+#: misc/tune2fs.c:899
 #, c-format
 msgid "bad error behavior - %s"
 msgstr ""
 
-#: misc/tune2fs.c:917
+#: misc/tune2fs.c:926
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:950
+#: misc/tune2fs.c:959
 #, c-format
 msgid "bad interval - %s"
 msgstr ""
 
-#: misc/tune2fs.c:979
+#: misc/tune2fs.c:988
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr ""
 
-#: misc/tune2fs.c:994
+#: misc/tune2fs.c:1003
 msgid "-o may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:1012
 msgid "-O may only be specified once"
 msgstr ""
 
-#: misc/tune2fs.c:1018
+#: misc/tune2fs.c:1027
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1047
+#: misc/tune2fs.c:1056
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1064
+#: misc/tune2fs.c:1073
 #, c-format
 msgid "bad inode size - %s"
 msgstr ""
 
-#: misc/tune2fs.c:1071
+#: misc/tune2fs.c:1080
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr ""
 
-#: misc/tune2fs.c:1165
+#: misc/tune2fs.c:1174
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1170
+#: misc/tune2fs.c:1179
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
 msgid_plural ""
@@ -4790,27 +4847,27 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: misc/tune2fs.c:1193
+#: misc/tune2fs.c:1202
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:1208
+#: misc/tune2fs.c:1217
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:1223
+#: misc/tune2fs.c:1232
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:1229
+#: misc/tune2fs.c:1238
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr ""
 
-#: misc/tune2fs.c:1248
+#: misc/tune2fs.c:1257
 #, c-format
 msgid ""
 "\n"
@@ -4829,46 +4886,46 @@ msgid ""
 "\t^test_fs\n"
 msgstr ""
 
-#: misc/tune2fs.c:1714
+#: misc/tune2fs.c:1723
 msgid "Failed to read inode bitmap\n"
 msgstr ""
 
-#: misc/tune2fs.c:1719
+#: misc/tune2fs.c:1728
 msgid "Failed to read block bitmap\n"
 msgstr ""
 
-#: misc/tune2fs.c:1736 resize/resize2fs.c:784
+#: misc/tune2fs.c:1745 resize/resize2fs.c:870
 msgid "blocks to be moved"
 msgstr ""
 
-#: misc/tune2fs.c:1739
+#: misc/tune2fs.c:1748
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:1745
+#: misc/tune2fs.c:1754
 msgid "Not enough space to increase inode size \n"
 msgstr ""
 
-#: misc/tune2fs.c:1750
+#: misc/tune2fs.c:1759
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr ""
 
-#: misc/tune2fs.c:1782
+#: misc/tune2fs.c:1791
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 
-#: misc/tune2fs.c:1809
+#: misc/tune2fs.c:1818
 msgid "Couldn't allocate memory for tdb filename\n"
 msgstr ""
 
-#: misc/tune2fs.c:1831
+#: misc/tune2fs.c:1840
 #, c-format
 msgid "while trying to delete %s"
 msgstr ""
 
-#: misc/tune2fs.c:1841
+#: misc/tune2fs.c:1850
 #, c-format
 msgid ""
 "To undo the tune2fs operation please run the command\n"
@@ -4876,141 +4933,146 @@ msgid ""
 "\n"
 msgstr ""
 
-#: misc/tune2fs.c:1910
+#: misc/tune2fs.c:1919
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 
-#: misc/tune2fs.c:1928
+#: misc/tune2fs.c:1937
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:1934
+#: misc/tune2fs.c:1943
 #, c-format
 msgid "Shrinking the inode size is not supported\n"
 msgstr ""
 
-#: misc/tune2fs.c:1981
+#: misc/tune2fs.c:1949
+#, c-format
+msgid "Invalid inode size %lu (max %d)\n"
+msgstr ""
+
+#: misc/tune2fs.c:1996
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:1987
+#: misc/tune2fs.c:2002
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:1992
+#: misc/tune2fs.c:2007
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:1997
+#: misc/tune2fs.c:2012
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2002
+#: misc/tune2fs.c:2017
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr ""
 
-#: misc/tune2fs.c:2009
+#: misc/tune2fs.c:2024
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr ""
 
-#: misc/tune2fs.c:2016
+#: misc/tune2fs.c:2031
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr ""
 
-#: misc/tune2fs.c:2022
+#: misc/tune2fs.c:2037
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr ""
 
-#: misc/tune2fs.c:2029
+#: misc/tune2fs.c:2044
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2035
+#: misc/tune2fs.c:2050
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2042
+#: misc/tune2fs.c:2057
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 
-#: misc/tune2fs.c:2047
+#: misc/tune2fs.c:2062
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2055
+#: misc/tune2fs.c:2070
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 
-#: misc/tune2fs.c:2061
+#: misc/tune2fs.c:2076
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2093
+#: misc/tune2fs.c:2108
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr ""
 
-#: misc/tune2fs.c:2111
+#: misc/tune2fs.c:2126
 msgid ""
 "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2144
+#: misc/tune2fs.c:2159
 msgid "Invalid UUID format\n"
 msgstr ""
 
-#: misc/tune2fs.c:2157
+#: misc/tune2fs.c:2172
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2165
+#: misc/tune2fs.c:2180
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
 
-#: misc/tune2fs.c:2178
+#: misc/tune2fs.c:2193
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr ""
 
-#: misc/tune2fs.c:2181
+#: misc/tune2fs.c:2196
 #, c-format
 msgid "Failed to change inode size\n"
 msgstr ""
 
-#: misc/tune2fs.c:2192
+#: misc/tune2fs.c:2207
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2197
+#: misc/tune2fs.c:2212
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr ""
 
-#: misc/tune2fs.c:2204
+#: misc/tune2fs.c:2219
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr ""
@@ -5286,54 +5348,56 @@ msgstr ""
 msgid "Begin pass %d (max = %lu)\n"
 msgstr ""
 
-#: resize/main.c:259
+#: resize/main.c:154
 #, c-format
-msgid "while opening %s"
+msgid ""
+"\n"
+"Resizing bigalloc file systems has not been fully tested.  Proceed\n"
+"at your own risk!  Use the force option if you want to go ahead anyway.\n"
+"\n"
 msgstr ""
 
-#: resize/main.c:267
+#: resize/main.c:271
 #, c-format
-msgid "while getting stat information for %s"
+msgid "while opening %s"
 msgstr ""
 
-#: resize/main.c:331
+#: resize/main.c:279
 #, c-format
-msgid ""
-"%s: The combination of flex_bg and\n"
-"\t!resize_inode features is not supported by resize2fs.\n"
+msgid "while getting stat information for %s"
 msgstr ""
 
-#: resize/main.c:344 resize/main.c:452
+#: resize/main.c:337 resize/main.c:450
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:348
+#: resize/main.c:341
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr ""
 
-#: resize/main.c:384
+#: resize/main.c:377
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr ""
 
-#: resize/main.c:392
+#: resize/main.c:393
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr ""
 
-#: resize/main.c:404
+#: resize/main.c:401
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr ""
 
-#: resize/main.c:410
+#: resize/main.c:407
 msgid "Invalid stride length"
 msgstr ""
 
-#: resize/main.c:434
+#: resize/main.c:431
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -5341,117 +5405,126 @@ msgid ""
 "\n"
 msgstr ""
 
-#: resize/main.c:441
+#: resize/main.c:438
 #, c-format
 msgid ""
 "The filesystem is already %llu blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:456
+#: resize/main.c:455
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr ""
 
-#: resize/main.c:465
+#: resize/main.c:464
 #, c-format
 msgid "while trying to resize %s"
 msgstr ""
 
-#: resize/main.c:468
+#: resize/main.c:467
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
 
-#: resize/main.c:474
+#: resize/main.c:473
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu blocks long.\n"
 "\n"
 msgstr ""
 
-#: resize/main.c:489
+#: resize/main.c:488
 #, c-format
 msgid "while trying to truncate %s"
 msgstr ""
 
-#: resize/online.c:40
+#: resize/online.c:79
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
 msgstr ""
 
-#: resize/online.c:44
+#: resize/online.c:83
 msgid "On-line shrinking not supported"
 msgstr ""
 
-#: resize/online.c:63
+#: resize/online.c:108
 msgid "Filesystem does not support online resizing"
 msgstr ""
 
-#: resize/online.c:70
+#: resize/online.c:117
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr ""
+
+#: resize/online.c:124
+msgid "Kernel does not support resizing a file system this large"
+msgstr ""
+
+#: resize/online.c:132
 #, c-format
 msgid "while trying to open mountpoint %s"
 msgstr ""
 
-#: resize/online.c:92 resize/online.c:116
-msgid "Permission denied to resize filesystem"
+#: resize/online.c:137
+#, c-format
+msgid "Old resize interface requested.\n"
 msgstr ""
 
-#: resize/online.c:95 resize/online.c:122
-msgid "While checking for on-line resizing support"
+#: resize/online.c:156 resize/online.c:173
+msgid "Permission denied to resize filesystem"
 msgstr ""
 
-#: resize/online.c:107
-msgid "Kernel does not support resizing a file system this large"
+#: resize/online.c:159 resize/online.c:179
+msgid "While checking for on-line resizing support"
 msgstr ""
 
-#: resize/online.c:119
+#: resize/online.c:176
 msgid "Kernel does not support online resizing"
 msgstr ""
 
-#: resize/online.c:152
+#: resize/online.c:209
 #, c-format
 msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
 msgstr ""
 
-#: resize/online.c:162
+#: resize/online.c:219
 msgid "While trying to extend the last group"
 msgstr ""
 
-#: resize/online.c:216
+#: resize/online.c:273
 #, c-format
 msgid "While trying to add group #%d"
 msgstr ""
 
-#: resize/online.c:227
+#: resize/online.c:284
 #, c-format
 msgid ""
 "Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
 "this system.\n"
 msgstr ""
 
-#: resize/resize2fs.c:348
+#: resize/resize2fs.c:369
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr ""
 
-#: resize/resize2fs.c:576
+#: resize/resize2fs.c:631
 msgid "reserved blocks"
 msgstr ""
 
-#: resize/resize2fs.c:789
+#: resize/resize2fs.c:875
 msgid "meta-data blocks"
 msgstr ""
 
-#: resize/resize2fs.c:1735
+#: resize/resize2fs.c:1837
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:11
-msgid "EXT2FS Library version 1.42.5"
+msgid "EXT2FS Library version 1.42.8"
 msgstr ""
 
 #: lib/ext2fs/ext2_err.c:12
@@ -6030,6 +6103,50 @@ msgstr ""
 msgid "MMP: open with O_DIRECT failed"
 msgstr ""
 
+#: lib/ext2fs/ext2_err.c:156
+msgid "Block group descriptor size incorrect"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:157
+msgid "Inode checksum does not match inode"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:158
+msgid "Inode bitmap checksum does not match bitmap"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:159
+msgid "Extent block checksum does not match extent block"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:160
+msgid "Directory block does not have space for checksum"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:161
+msgid "Directory block checksum does not match directory block"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:162
+msgid "Extended attribute block checksum does not match block"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:163
+msgid "Superblock checksum does not match superblock"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:164
+msgid "Unknown checksum algorithm"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:165
+msgid "MMP block checksum does not match MMP block"
+msgstr ""
+
+#: lib/ext2fs/ext2_err.c:166
+msgid "Ext2 file already exists"
+msgstr ""
+
 #: e2fsck/prof_err.c:11
 msgid "Profile version 0.0"
 msgstr ""
index 7b6a41e..0651302 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index 6a552d6..0c59a39 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU e2fsprogs 1.42.2\n"
+"Project-Id-Version: GNU e2fsprogs 1.42.6\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2012-06-12 14:40-0400\n"
-"PO-Revision-Date: 2012-04-11 00:15+0200\n"
+"POT-Creation-Date: 2012-09-21 12:16-0400\n"
+"PO-Revision-Date: 2012-12-19 21:47+0100\n"
 "Last-Translator: Samuel Thibault <samuel.thibault@ens-lyon.org>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -77,7 +77,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:176
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:177
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Bloc défectueux %u hors limite ; ignoré.\n"
@@ -91,10 +91,10 @@ msgid "while reading the bad blocks inode"
 msgstr "lors de la lecture de l'i-noeud des blocs défectueux"
 
 #: e2fsck/badblocks.c:72 e2fsck/iscan.c:110 e2fsck/scantest.c:107
-#: e2fsck/unix.c:1298 e2fsck/unix.c:1386 misc/badblocks.c:1214
+#: e2fsck/unix.c:1334 e2fsck/unix.c:1422 misc/badblocks.c:1214
 #: misc/badblocks.c:1222 misc/badblocks.c:1236 misc/badblocks.c:1248
 #: misc/dumpe2fs.c:588 misc/e2image.c:1189 misc/e2image.c:1307
-#: misc/e2image.c:1320 misc/mke2fs.c:192 misc/tune2fs.c:1907 resize/main.c:303
+#: misc/e2image.c:1320 misc/mke2fs.c:193 misc/tune2fs.c:1898 resize/main.c:303
 #, c-format
 msgid "while trying to open %s"
 msgstr "lors de la tentative d'ouverture de %s"
@@ -104,10 +104,9 @@ msgstr "lors de la tentative d'ouverture de %s"
 msgid "while trying popen '%s'"
 msgstr "lors de la tentative d'ouverture via popen() « %s »"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:199
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:200
 msgid "while reading in list of bad blocks from file"
-msgstr ""
-"lors de la lecture de la liste des blocs défectueux à partir du fichier"
+msgstr "lors de la lecture de la liste des blocs défectueux à partir du fichier"
 
 #: e2fsck/badblocks.c:105
 msgid "while updating bad block inode"
@@ -179,25 +178,24 @@ msgstr "Ne peut allouer le tampon de bloc (taille=%d)\n"
 #: e2fsck/flushb.c:35
 #, c-format
 msgid "Usage: %s disk\n"
-msgstr "Usage : %s disque\n"
+msgstr "Utilisation : %s disque\n"
 
 #: e2fsck/flushb.c:64
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
-msgstr ""
-"L'ioctl BLKFLSBUF n'est pas supporté ! Impossible de vider les tampons.\n"
+msgstr "L'ioctl BLKFLSBUF n'est pas supporté ! Impossible de vider les tampons.\n"
 
 #: e2fsck/iscan.c:44
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
-msgstr "Usage : %s [-F] [-I nombre_blocs_du_tampon_d_i_noeud] périphérique\n"
+msgstr "Utilisation : %s [-F] [-I nombre_blocs_du_tampon_d_i_noeud] périphérique\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:930
+#: e2fsck/iscan.c:81 e2fsck/unix.c:963
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "lors de l'ouverture de %s pour la vidange"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:936 resize/main.c:276
+#: e2fsck/iscan.c:86 e2fsck/unix.c:969 resize/main.c:276
 #, c-format
 msgid "while trying to flush %s"
 msgstr "lors de la tentative de vidange de %s"
@@ -479,14 +477,12 @@ msgstr "retourn
 #: e2fsck/pass1b.c:842
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
-msgstr ""
-"erreur interne : impossible de trouver l'enregistrement de bloc EA pour %llu"
+msgstr "erreur interne : impossible de trouver l'enregistrement de bloc EA pour %llu"
 
 #: e2fsck/pass1b.c:854
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
-msgstr ""
-"erreur interne : impossible de trouver l'enregistrement d'i-noeud EA pour %u"
+msgstr "erreur interne : impossible de trouver l'enregistrement d'i-noeud EA pour %u"
 
 #: e2fsck/pass1.c:476 e2fsck/pass2.c:782
 msgid "reading directory block"
@@ -919,8 +915,7 @@ msgstr "Le @j externe ne supporte pas ce @f\n"
 #: e2fsck/problem.c:213
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
-"format.\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 "Le @S du @j est de type inconnu %N (non supporté).\n"
@@ -947,9 +942,7 @@ msgstr "Le @S a le drapeau needs_recovery activ
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:236
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
-msgstr ""
-"le drapeau needs_recovery n'est pas activé, mais le @j contient des "
-"données.\n"
+msgstr "le drapeau needs_recovery n'est pas activé, mais le @j contient des données.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:241
@@ -959,8 +952,7 @@ msgstr "Effacer le @j"
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
 #: e2fsck/problem.c:246 e2fsck/problem.c:695
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr ""
-"le @f a des drapeaux de fonctionnalités activés mais est un @f de version 0. "
+msgstr "le @f a des drapeaux de fonctionnalités activés mais est un @f de version 0. "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 #: e2fsck/problem.c:251
@@ -992,16 +984,12 @@ msgstr "@i %i @I dans la liste des @is @os.\n"
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:276
 msgid "@j @S has an unknown read-only feature flag set.\n"
-msgstr ""
-"Le @S du @j a un drapeau de fonctionnalités inconnu sélectionné en lecture "
-"seule.\n"
+msgstr "Le @S du @j a un drapeau de fonctionnalités inconnu sélectionné en lecture seule.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:281
 msgid "@j @S has an unknown incompatible feature flag set.\n"
-msgstr ""
-"Le @S du @j contient un drapeau non reconnu de fonctionnalités "
-"incompatibles.\n"
+msgstr "Le @S du @j contient un drapeau non reconnu de fonctionnalités incompatibles.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
 #: e2fsck/problem.c:286
@@ -1051,9 +1039,7 @@ msgstr "Ex
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
 #: e2fsck/problem.c:312
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr ""
-"Le drapeau de récupération n'est pas activé dans le @S de secours, le @j "
-"sera donc quand même exécuté.\n"
+msgstr "Le drapeau de récupération n'est pas activé dans le @S de secours, le @j sera donc quand même exécuté.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
@@ -1078,9 +1064,7 @@ msgstr ""
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:328
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"Resize_inode n'est pas activé, mais l'@i de changement de taille n'est pas "
-"nul. "
+msgstr "Resize_inode n'est pas activé, mais l'@i de changement de taille n'est pas nul. "
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:333
@@ -1139,8 +1123,7 @@ msgstr ""
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
 #: e2fsck/problem.c:367
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
-msgstr ""
-"Le descripteur de @g %g a un nombre invalide d'i-noeuds non utilisés %b. "
+msgstr "Le descripteur de @g %g a un nombre invalide d'i-noeuds non utilisés %b. "
 
 #. @-expanded: Last group block bitmap uninitialized.  
 #: e2fsck/problem.c:372
@@ -1150,8 +1133,7 @@ msgstr "Le @B de @b du dernier @g n'est pas initialis
 #: e2fsck/problem.c:377
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
-msgstr ""
-"La transaction %i du journal était corrompue, le rejeu a été abandonné.\n"
+msgstr "La transaction %i du journal était corrompue, le rejeu a été abandonné.\n"
 
 #: e2fsck/problem.c:381
 msgid "The test_fs flag is set (and ext4 is available).  "
@@ -1163,12 +1145,10 @@ msgstr "Le drapeau test_fs est positionn
 #: e2fsck/problem.c:386
 msgid ""
 "@S last mount time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set)  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)  "
 msgstr ""
 "La date de dernier montage du @S est dans le futur.\n"
-"\t(de moins d'un jour, probablement à cause d'une horloge matérielle mal "
-"configurée)  "
+"\t(de moins d'un jour, probablement à cause d'une horloge matérielle mal configurée)  "
 
 #. @-expanded: superblock last write time is in the future.\n
 #. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
@@ -1176,18 +1156,15 @@ msgstr ""
 #: e2fsck/problem.c:392
 msgid ""
 "@S last write time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set).  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set).  "
 msgstr ""
 "La date de dernière écriture du @S est dans le futur.\n"
-"\t(de moins d'un jour, probablement à cause d'une horloge matérielle mal "
-"configurée)  "
+"\t(de moins d'un jour, probablement à cause d'une horloge matérielle mal configurée)  "
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
 #: e2fsck/problem.c:398
 msgid "One or more @b @g descriptor checksums are invalid.  "
-msgstr ""
-"Le checksum d'un ou de plusieurs descripteurs de @g de @b est invalide. "
+msgstr "Le checksum d'un ou de plusieurs descripteurs de @g de @b est invalide. "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
 #: e2fsck/problem.c:403
@@ -1201,11 +1178,8 @@ msgstr "D
 
 #. @-expanded: Making quota inode %i (%Q) hidden.\n
 #: e2fsck/problem.c:413
-#, fuzzy
 msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"Dissimulation des @is de @q.\n"
-"\n"
+msgstr "Dissimulation de l'@i de @q %i (%Q).\n"
 
 #. @-expanded: superblock has invalid MMP block.  
 #: e2fsck/problem.c:418
@@ -1340,8 +1314,7 @@ msgstr "@b dupliqu
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
 #: e2fsck/problem.c:544
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr ""
-"%b défectueux utilisé en tant que @b indirect d'@i des @bs défectueux. "
+msgstr "%b défectueux utilisé en tant que @b indirect d'@i des @bs défectueux. "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
@@ -1390,9 +1363,7 @@ msgstr "Le @S primaire (%b) est sur la liste des @bs d
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
 #: e2fsck/problem.c:572
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"Le bloc %b dans les descripteurs de @gs primaires est dans la liste des @bs "
-"défectueux\n"
+msgstr "Le bloc %b dans les descripteurs de @gs primaires est dans la liste des @bs défectueux\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
 #: e2fsck/problem.c:578
@@ -1402,16 +1373,12 @@ msgstr "Avertissement
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
 #: e2fsck/problem.c:583
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr ""
-"Avertissement : la copie des descripteurs de @gs du @g %g a un @b (%b) "
-"défectueux.\n"
+msgstr "Avertissement : la copie des descripteurs de @gs du @g %g a un @b (%b) défectueux.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
 #: e2fsck/problem.c:589
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Erreur de programmation ? @b n°%b reclamé sans aucune raison dans "
-"process_bad_block.\n"
+msgstr "Erreur de programmation ? @b n°%b reclamé sans aucune raison dans process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
 #: e2fsck/problem.c:595
@@ -1482,16 +1449,12 @@ msgstr "Erreur lors de la boucle d'it
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
 #: e2fsck/problem.c:655
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr ""
-"Erreur lors du stockage du compteur d'information d'@i (@i=%i, compteur="
-"%N) : %m\n"
+msgstr "Erreur lors du stockage du compteur d'information d'@i (@i=%i, compteur=%N) : %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
 #: e2fsck/problem.c:660
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Erreur lors du stockage de l'information du @b de @ds (@i=%i, @b=%b, num="
-"%N) : %m\n"
+msgstr "Erreur lors du stockage de l'information du @b de @ds (@i=%i, @b=%b, num=%N) : %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
 #: e2fsck/problem.c:666
@@ -1520,9 +1483,7 @@ msgstr ""
 #: e2fsck/problem.c:685
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
-msgstr ""
-"l'@i %i a le drapeau de @cion qui est initialisé sur un @f sans support de "
-"@cion. "
+msgstr "l'@i %i a le drapeau de @cion qui est initialisé sur un @f sans support de @cion. "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
 #: e2fsck/problem.c:690
@@ -1549,9 +1510,7 @@ msgstr "l'@i %i fait partie de la liste des @is @os. "
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
 #: e2fsck/problem.c:716
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr ""
-"des @is qui faisaient partie d'une liste chaînée d'orphelins corrompue ont "
-"été repérés. "
+msgstr "des @is qui faisaient partie d'une liste chaînée d'orphelins corrompue ont été repérés. "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
 #: e2fsck/problem.c:721
@@ -1631,8 +1590,7 @@ msgstr "le %B (%b) rend le lien symbolique trop grand. "
 #: e2fsck/problem.c:795
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"l'@i %i a le drapeau INDEX_FL activé sur le @f sans support des htrees.\n"
+msgstr "l'@i %i a le drapeau INDEX_FL activé sur le @f sans support des htrees.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
 #: e2fsck/problem.c:800
@@ -1668,9 +1626,7 @@ msgstr "l'@h %i a une hauteur d'arbre (%N) qui est trop grande\n"
 msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
-msgstr ""
-"l'@i des @bs défectueux a un @b indirect (%b) qui entre en conflit avec les "
-"métadonnées du @f. "
+msgstr "l'@i des @bs défectueux a un @b indirect (%b) qui entre en conflit avec les métadonnées du @f. "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
 #: e2fsck/problem.c:831
@@ -1753,15 +1709,13 @@ msgstr ""
 #: e2fsck/problem.c:892
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"l'@i %i a le drapeau EXTENTS_FL activé sur le @f sans support des extents.\n"
+msgstr "l'@i %i a le drapeau EXTENTS_FL activé sur le @f sans support des extents.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
 #: e2fsck/problem.c:897
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"L'@i %i a un format d'extent, mais le @S n'a pas la fonctionnalité EXTENTS\n"
+msgstr "L'@i %i a un format d'extent, mais le @S n'a pas la fonctionnalité EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
 #: e2fsck/problem.c:902
@@ -1835,8 +1789,7 @@ msgid ""
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Exécution de passes additionnelles pour résoudre les problèmes de @bs "
-"réclamés par plus d'un @i...\n"
+"Exécution de passes additionnelles pour résoudre les problèmes de @bs réclamés par plus d'un @i...\n"
 "Passe 1B : ré-examen pour les @bs @m\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
@@ -2160,9 +2113,7 @@ msgstr "le @b d'@a @F @n (%If).\n"
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
 #: e2fsck/problem.c:1270
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"le @f contient de grands fichiers, mais n'a pas le drapeau LARGE_FILE activé "
-"dans le @S.\n"
+msgstr "le @f contient de grands fichiers, mais n'a pas le drapeau LARGE_FILE activé dans le @S.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
 #: e2fsck/problem.c:1275
@@ -2267,8 +2218,7 @@ msgstr "@E r
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
 #: e2fsck/problem.c:1363
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr ""
-"@E référence l'@i %Di trouvé dans la zone d'i-noeuds non utilisés du @g %g.\n"
+msgstr "@E référence l'@i %Di trouvé dans la zone d'i-noeuds non utilisés du @g %g.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1368
@@ -2344,17 +2294,13 @@ msgstr "ext2fs_new_@i
 #: e2fsck/problem.c:1435
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
-msgstr ""
-"ext2fs_new_dir_@b : %m lors de la tentative de création d'un nouveau @b de "
-"@d\n"
+msgstr "ext2fs_new_dir_@b : %m lors de la tentative de création d'un nouveau @b de @d\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
 #: e2fsck/problem.c:1440
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr ""
-"ext2fs_write_dir_@b : %m lors de la tentative d'écriture du @b de @d pour /"
-"@l\n"
+msgstr "ext2fs_write_dir_@b : %m lors de la tentative d'écriture du @b de @d pour /@l\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
 #: e2fsck/problem.c:1445
@@ -2492,14 +2438,12 @@ msgstr "diff
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
 #: e2fsck/problem.c:1613
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
-msgstr ""
-"Le décompte des @is libres est erroné pour le @g n°%g (%i, décompté=%j).\n"
+msgstr "Le décompte des @is libres est erroné pour le @g n°%g (%i, décompté=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
 #: e2fsck/problem.c:1618
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
-msgstr ""
-"Le décompte des répertoires est erroné pour le @g n°%g (%i, décompté=%j).\n"
+msgstr "Le décompte des répertoires est erroné pour le @g n°%g (%i, décompté=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
 #: e2fsck/problem.c:1623
@@ -2509,8 +2453,7 @@ msgstr "Le d
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
 #: e2fsck/problem.c:1628
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
-msgstr ""
-"Le décompte des @bs libres est erroné pour le @g n°%g (%b, décompté=%c).\n"
+msgstr "Le décompte des @bs libres est erroné pour le @g n°%g (%b, décompté=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
 #: e2fsck/problem.c:1633
@@ -2520,13 +2463,8 @@ msgstr "Le d
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 #: e2fsck/problem.c:1638
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"ERREUR DE PROGRAMMATION : les points de terminaison (%b, %c) de @Bs du @f (n°"
-"%N) ne concordent pas avec les points de terminaison de @Bs calculés (%i, "
-"%j)\n"
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "ERREUR DE PROGRAMMATION : les points de terminaison (%b, %c) de @Bs du @f (n°%N) ne concordent pas avec les points de terminaison de @Bs calculés (%i, %j)\n"
 
 #: e2fsck/problem.c:1644
 msgid "Internal error: fudging end of bitmap (%N)\n"
@@ -2548,17 +2486,13 @@ msgstr "Erreur lors de la copie du @B des @bs de remplacement
 #: e2fsck/problem.c:1679
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
-msgstr ""
-"Un ou des @b(s) du @g %g en cours d'utilisation alors que le @g est marqué "
-"BLOCK_UNINIT\n"
+msgstr "Un ou des @b(s) du @g %g en cours d'utilisation alors que le @g est marqué BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
 #: e2fsck/problem.c:1684
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
-msgstr ""
-"Un ou des @i(s) du @g %g en cours d'utilisation alors que le @g est marqué "
-"INODE_UNINIT\n"
+msgstr "Un ou des @i(s) du @g %g en cours d'utilisation alors que le @g est marqué INODE_UNINIT\n"
 
 #. @-expanded: Recreate journal
 #: e2fsck/problem.c:1691
@@ -2567,7 +2501,7 @@ msgstr "Recr
 
 #: e2fsck/problem.c:1696
 msgid "Update quota info for quota type %N"
-msgstr ""
+msgstr "Mise à jour de l'information de quota pour le type de quota %N"
 
 #: e2fsck/problem.c:1815
 #, c-format
@@ -2622,7 +2556,7 @@ msgid ""
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Usage : %s [-panyrcdfvtDFV] [-b super-bloc] [-B taille-de-bloc]\n"
+"Utilisation : %s [-panyrcdfvtDFV] [-b super-bloc] [-B taille-de-bloc]\n"
 "\t\t[-I nombre-blocs-du-tampon-i-noeuds] [-P taille-i-noeud-processus]\n"
 "\t\t[-l|-L fichiers-des-blocs-défectueux] [-C fd] [-j journal-externe]\n"
 "\t\t[-E options-étendues] périphérique\n"
@@ -2635,8 +2569,7 @@ msgid ""
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock "
-"list\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
@@ -2669,165 +2602,165 @@ msgstr ""
 " -L fichier-des-blocs-erronés\n"
 "                      Définir la liste des blocs défectueux\n"
 
-#: e2fsck/unix.c:130
+#: e2fsck/unix.c:131
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s : %u/%u fichiers (%0d.%d%% non contigüs), %llu/%llu blocs\n"
 
-#: e2fsck/unix.c:137
+#: e2fsck/unix.c:157
 #, c-format
 msgid ""
 "\n"
-"%8u inode used (%2.2f%%)\n"
+"%12u inode used (%2.2f%%, out of %u)\n"
 msgid_plural ""
 "\n"
-"%8u inodes used (%2.2f%%)\n"
+"%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
 "\n"
-"%8u i-noeud utilisé (%2.2f%%)\n"
+"%12u i-noeud utilisé (%2.2f%%, sur %u)\n"
 msgstr[1] ""
 "\n"
-"%8u i-noeuds utilisés (%2.2f%%)\n"
+"%12u i-noeuds utilisés (%2.2f%%, sur %u)\n"
 
-#: e2fsck/unix.c:141
+#: e2fsck/unix.c:161
 #, c-format
-msgid "%8u non-contiguous file (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous files (%0d.%d%%)\n"
-msgstr[0] "%8u i-noeud non contigu (%0d.%d%%)\n"
-msgstr[1] "%8u i-noeuds non contigus (%0d.%d%%)\n"
+msgid "%12u non-contiguous file (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
+msgstr[0] "%12u fichier non contigu (%0d.%d%%)\n"
+msgstr[1] "%12u fichiers non contigus (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:146
+#: e2fsck/unix.c:166
 #, c-format
-msgid "%8u non-contiguous directory (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous directories (%0d.%d%%)\n"
-msgstr[0] "%8u i-noeud non contigu (%0d.%d%%)\n"
-msgstr[1] "%8u i-noeuds non contigus (%0d.%d%%)\n"
+msgid "%12u non-contiguous directory (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
+msgstr[0] "%12u répertoire non contigu (%0d.%d%%)\n"
+msgstr[1] "%12u répertoires non contigus (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:151
+#: e2fsck/unix.c:171
 #, c-format
-msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr "         nombre d'i-noeuds avec des blocs ind/dind/tind : %u/%u/%u\n"
+msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "             nombre d'i-noeuds avec des blocs ind/dind/tind : %u/%u/%u\n"
 
-#: e2fsck/unix.c:159
-msgid "         Extent depth histogram: "
-msgstr "         Histogramme des profondeurs d'extents : "
+#: e2fsck/unix.c:179
+msgid "             Extent depth histogram: "
+msgstr "             Histogramme des profondeurs d'extents : "
 
-#: e2fsck/unix.c:168
+#: e2fsck/unix.c:188
 #, c-format
-msgid "%8llu block used (%2.2f%%)\n"
-msgid_plural "%8llu blocks used (%2.2f%%)\n"
-msgstr[0] "%8llu bloc utilisé (%2.2f%%)\n"
-msgstr[1] "%8llu blocs utilisés (%2.2f%%)\n"
+msgid "%12llu block used (%2.2f%%, out of %llu)\n"
+msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
+msgstr[0] "%12llu bloc utilisé (%2.2f%%, sur %llu)\n"
+msgstr[1] "%12llu blocs utilisés (%2.2f%%, sur %llu)\n"
 
-#: e2fsck/unix.c:171
+#: e2fsck/unix.c:192
 #, c-format
-msgid "%8u bad block\n"
-msgid_plural "%8u bad blocks\n"
-msgstr[0] "%8u bloc défectueux\n"
-msgstr[1] "%8u blocs défectueux\n"
+msgid "%12u bad block\n"
+msgid_plural "%12u bad blocks\n"
+msgstr[0] "%12u bloc défectueux\n"
+msgstr[1] "%12u blocs défectueux\n"
 
-#: e2fsck/unix.c:173
+#: e2fsck/unix.c:194
 #, c-format
-msgid "%8u large file\n"
-msgid_plural "%8u large files\n"
-msgstr[0] "%8u fichier de grande taille\n"
-msgstr[1] "%8u fichiers de grande taille\n"
+msgid "%12u large file\n"
+msgid_plural "%12u large files\n"
+msgstr[0] "%12u fichier de grande taille\n"
+msgstr[1] "%12u fichiers de grande taille\n"
 
-#: e2fsck/unix.c:175
+#: e2fsck/unix.c:196
 #, c-format
 msgid ""
 "\n"
-"%8u regular file\n"
+"%12u regular file\n"
 msgid_plural ""
 "\n"
-"%8u regular files\n"
+"%12u regular files\n"
 msgstr[0] ""
 "\n"
-"%8u fichier normal\n"
+"%12u fichier normal\n"
 msgstr[1] ""
 "\n"
-"%8u fichiers normaux\n"
+"%12u fichiers normaux\n"
 
-#: e2fsck/unix.c:177
+#: e2fsck/unix.c:198
 #, c-format
-msgid "%8u directory\n"
-msgid_plural "%8u directories\n"
-msgstr[0] "%8u répertoire\n"
-msgstr[1] "%8u répertoires\n"
+msgid "%12u directory\n"
+msgid_plural "%12u directories\n"
+msgstr[0] "%12u répertoire\n"
+msgstr[1] "%12u répertoires\n"
 
-#: e2fsck/unix.c:179
+#: e2fsck/unix.c:200
 #, c-format
-msgid "%8u character device file\n"
-msgid_plural "%8u character device files\n"
-msgstr[0] "%8u fichier de périphérique en mode caractère\n"
-msgstr[1] "%8u fichiers de périphérique en mode caractère\n"
+msgid "%12u character device file\n"
+msgid_plural "%12u character device files\n"
+msgstr[0] "%12u fichier de périphérique en mode caractère\n"
+msgstr[1] "%12u fichiers de périphérique en mode caractère\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:203
 #, c-format
-msgid "%8u block device file\n"
-msgid_plural "%8u block device files\n"
-msgstr[0] "%8u fichier de périphérique en mode bloc\n"
-msgstr[1] "%8u fichiers de périphérique en mode bloc\n"
+msgid "%12u block device file\n"
+msgid_plural "%12u block device files\n"
+msgstr[0] "%12u fichier de périphérique en mode bloc\n"
+msgstr[1] "%12u fichiers de périphérique en mode bloc\n"
 
-#: e2fsck/unix.c:184
+#: e2fsck/unix.c:205
 #, c-format
-msgid "%8u fifo\n"
-msgid_plural "%8u fifos\n"
-msgstr[0] "%8u fifo\n"
-msgstr[1] "%8u fifos\n"
+msgid "%12u fifo\n"
+msgid_plural "%12u fifos\n"
+msgstr[0] "%12u fifo\n"
+msgstr[1] "%12u fifos\n"
 
-#: e2fsck/unix.c:186
+#: e2fsck/unix.c:207
 #, c-format
-msgid "%8u link\n"
-msgid_plural "%8u links\n"
-msgstr[0] "%8u lien\n"
-msgstr[1] "%8u liens\n"
+msgid "%12u link\n"
+msgid_plural "%12u links\n"
+msgstr[0] "%12u lien\n"
+msgstr[1] "%12u liens\n"
 
-#: e2fsck/unix.c:189
+#: e2fsck/unix.c:210
 #, c-format
-msgid "%8u symbolic link"
-msgid_plural "%8u symbolic links"
-msgstr[0] "%8u lien symbolique"
-msgstr[1] "%8u liens symboliques"
+msgid "%12u symbolic link"
+msgid_plural "%12u symbolic links"
+msgstr[0] "%12u lien symbolique"
+msgstr[1] "%12u liens symboliques"
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:212
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u lien symbolique rapide)\n"
 msgstr[1] " (%u liens symboliques rapides)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:216
 #, c-format
-msgid "%8u socket\n"
-msgid_plural "%8u sockets\n"
-msgstr[0] "%8u socket\n"
-msgstr[1] "%8u sockets\n"
+msgid "%12u socket\n"
+msgid_plural "%12u sockets\n"
+msgstr[0] "%12u socket\n"
+msgstr[1] "%12u sockets\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:220
 #, c-format
-msgid "%8u file\n"
-msgid_plural "%8u files\n"
-msgstr[0] "%8u fichier\n"
-msgstr[1] "%8u fichiers\n"
+msgid "%12u file\n"
+msgid_plural "%12u files\n"
+msgstr[0] "%12u fichier\n"
+msgstr[1] "%12u fichiers\n"
 
-#: e2fsck/unix.c:212 misc/badblocks.c:983 misc/tune2fs.c:1979 misc/util.c:147
+#: e2fsck/unix.c:234 misc/badblocks.c:983 misc/tune2fs.c:1970 misc/util.c:147
 #: resize/main.c:247
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "lors de la détermination à savoir si %s est monté."
 
-#: e2fsck/unix.c:230
-#, fuzzy, c-format
+#: e2fsck/unix.c:254
+#, c-format
 msgid "Warning!  %s is %s.\n"
-msgstr "Avertissement ! %s est monté.\n"
+msgstr "Attention ! %s est %s.\n"
 
-#: e2fsck/unix.c:237
+#: e2fsck/unix.c:261
 #, c-format
 msgid "%s is %s.\n"
-msgstr ""
+msgstr "%s est %s.\n"
 
-#: e2fsck/unix.c:240
+#: e2fsck/unix.c:264
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2835,7 +2768,7 @@ msgstr ""
 "Ne peut continuer, arrêt immédiat.\n"
 "\n"
 
-#: e2fsck/unix.c:242
+#: e2fsck/unix.c:266
 msgid ""
 "\n"
 "\n"
@@ -2849,82 +2782,79 @@ msgstr ""
 "vous ***CAUSEREZ*** des dommages ***SÉVÈRES*** au système de fichiers.\n"
 "\n"
 
-#: e2fsck/unix.c:247
+#: e2fsck/unix.c:271
 msgid "Do you really want to continue"
 msgstr "Souhaitez-vous réellement continuer"
 
-#: e2fsck/unix.c:249
+#: e2fsck/unix.c:273
 #, c-format
 msgid "check aborted.\n"
 msgstr "vérification stoppée.\n"
 
-#: e2fsck/unix.c:339
+#: e2fsck/unix.c:363
 msgid " contains a file system with errors"
 msgstr " contient un système de fichiers comportant des erreurs"
 
-#: e2fsck/unix.c:341
+#: e2fsck/unix.c:365
 msgid " was not cleanly unmounted"
 msgstr " n'a pas été démonté proprement"
 
-#: e2fsck/unix.c:343
+#: e2fsck/unix.c:367
 msgid " primary superblock features different from backup"
-msgstr ""
-" les fonctionnalités du superbloc primaire diffèrent de celles de la "
-"sauvegarde"
+msgstr " les fonctionnalités du superbloc primaire diffèrent de celles de la sauvegarde"
 
-#: e2fsck/unix.c:347
+#: e2fsck/unix.c:371
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " a été monté %u fois sans avoir été vérifié"
 
-#: e2fsck/unix.c:354
+#: e2fsck/unix.c:378
 msgid " has filesystem last checked time in the future"
-msgstr ""
-" a une date de dernière vérification du système de fichiers dans le futur"
+msgstr " a une date de dernière vérification du système de fichiers dans le futur"
 
-#: e2fsck/unix.c:360
+#: e2fsck/unix.c:384
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " a passé %u jours sans avoir été vérifié"
 
-#: e2fsck/unix.c:369
+#: e2fsck/unix.c:393
 msgid ", check forced.\n"
 msgstr ", vérification forcée.\n"
 
-#: e2fsck/unix.c:402
+#: e2fsck/unix.c:426
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s : propre, %u/%u fichiers, %llu/%llu blocs"
 
-#: e2fsck/unix.c:421
+#: e2fsck/unix.c:445
 msgid " (check deferred; on battery)"
 msgstr " (vérification remise à plus tard : sur batterie)"
 
-#: e2fsck/unix.c:424
+#: e2fsck/unix.c:448
 msgid " (check after next mount)"
 msgstr " (vérification lors du prochain montage)"
 
-#: e2fsck/unix.c:426
+#: e2fsck/unix.c:450
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (vérification dans %ld montages)"
 
-#: e2fsck/unix.c:576
+#: e2fsck/unix.c:600
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "ERREUR : ne peut ouvrir /dev/null (%s)\n"
 
-#: e2fsck/unix.c:645
+#: e2fsck/unix.c:669
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Version EA invalide.\n"
 
-#: e2fsck/unix.c:672
+#: e2fsck/unix.c:696
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Option étendue inconnue : %s\n"
 
-#: e2fsck/unix.c:697
+#: e2fsck/unix.c:721
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2934,48 +2864,48 @@ msgstr ""
 "\tligne n°%d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:766
+#: e2fsck/unix.c:790
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "ERREUR lors de la validation du descripteur de fichier %d : %s\n"
 
-#: e2fsck/unix.c:770
+#: e2fsck/unix.c:794
 msgid "Invalid completion information file descriptor"
 msgstr "Descripteur de fichier d'information de complétion invalide"
 
-#: e2fsck/unix.c:785
+#: e2fsck/unix.c:809
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Seule une des options -p/-a, -n ou -y peut être spécifiée."
 
-#: e2fsck/unix.c:806
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "L'option -t n'est pas supportée sur cette version d'e2fsck.\n"
 
-#: e2fsck/unix.c:837 e2fsck/unix.c:909 misc/tune2fs.c:811 misc/tune2fs.c:1100
-#: misc/tune2fs.c:1118
+#: e2fsck/unix.c:861 e2fsck/unix.c:933 misc/tune2fs.c:802 misc/tune2fs.c:1091
+#: misc/tune2fs.c:1109
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Impossible de résoudre « %s »"
 
-#: e2fsck/unix.c:888
+#: e2fsck/unix.c:912
 msgid "The -n and -D options are incompatible."
 msgstr "Les options -n et -D sont incompatibles."
 
-#: e2fsck/unix.c:893
+#: e2fsck/unix.c:917
 msgid "The -n and -c options are incompatible."
 msgstr "Les options -n et -c sont incompatibles."
 
-#: e2fsck/unix.c:898
+#: e2fsck/unix.c:922
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Les options -n et -l/-L sont incompatibles."
 
-#: e2fsck/unix.c:943
+#: e2fsck/unix.c:976
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Les options -c et -l/-L ne peuvent pas être utilisées simultanément.\n"
 
-#: e2fsck/unix.c:991
+#: e2fsck/unix.c:1024
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -2984,7 +2914,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG \"%s\" n'est pas un entier\n"
 "\n"
 
-#: e2fsck/unix.c:1000
+#: e2fsck/unix.c:1033
 #, c-format
 msgid ""
 "\n"
@@ -2995,70 +2925,65 @@ msgstr ""
 "Argument non numérique invalide pour -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1089
+#: e2fsck/unix.c:1122
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"L'intervale de protection contre montage multiple (MMP) est de %u secondes "
-"et temps total d'attente est de %u seconds. Veuillez patienter...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "L'intervale de protection contre montage multiple (MMP) est de %u secondes et temps total d'attente est de %u seconds. Veuillez patienter...\n"
 
-#: e2fsck/unix.c:1106 e2fsck/unix.c:1111
+#: e2fsck/unix.c:1139 e2fsck/unix.c:1144
 msgid "while checking MMP block"
 msgstr "lors de la vérification du block MMP"
 
-#: e2fsck/unix.c:1113 misc/tune2fs.c:1912
+#: e2fsck/unix.c:1146 misc/tune2fs.c:1903
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
 msgstr ""
-"Si vous êtes sûr(e) que le système de fichiers n'est en cours d'utilisation "
-"sur aucun noeud, lancer:\n"
+"Si vous êtes sûr(e) que le système de fichiers n'est en cours d'utilisation sur aucun noeud, lancer:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
 
-#: e2fsck/unix.c:1163
+#: e2fsck/unix.c:1196
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Erreur : la version de la bibliothèque ext2fs est périmée !\n"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1204
 msgid "while trying to initialize program"
 msgstr "lors de la tentative d'initialisation du programme"
 
-#: e2fsck/unix.c:1194
+#: e2fsck/unix.c:1227
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tUtilisation de %s, %s\n"
 
-#: e2fsck/unix.c:1206
+#: e2fsck/unix.c:1239
 msgid "need terminal for interactive repairs"
 msgstr "a besoin d'un terminal pour des réparations en mode interactif"
 
-#: e2fsck/unix.c:1256
+#: e2fsck/unix.c:1292
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s : %s tentons d'utiliser les blocs de sauvetage...\n"
 
-#: e2fsck/unix.c:1258
+#: e2fsck/unix.c:1294
 msgid "Superblock invalid,"
 msgstr "Superbloc invalide,"
 
-#: e2fsck/unix.c:1259
+#: e2fsck/unix.c:1295
 msgid "Group descriptors look bad..."
 msgstr "Les descripteurs de groupe semblent en mauvais état..."
 
-#: e2fsck/unix.c:1269
+#: e2fsck/unix.c:1305
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s : %s lors de l'utilisation des blocs de sauvetage"
 
-#: e2fsck/unix.c:1273
+#: e2fsck/unix.c:1309
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s : retour au superblock originel\n"
 
-#: e2fsck/unix.c:1301
+#: e2fsck/unix.c:1337
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3069,30 +2994,30 @@ msgstr ""
 "corrompu)\n"
 "\n"
 
-#: e2fsck/unix.c:1307
+#: e2fsck/unix.c:1343
 msgid "Could this be a zero-length partition?\n"
 msgstr "Peut-être cette partition est-elle de taille zéro ?\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1346
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Vous devez avoir un accès %s au système de fichiers ou être root\n"
 
-#: e2fsck/unix.c:1315
+#: e2fsck/unix.c:1351
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Périphérique peut-être inexistent ou pour le swap ?\n"
 
-#: e2fsck/unix.c:1318
+#: e2fsck/unix.c:1354
 msgid "Filesystem mounted or opened exclusively by another program?\n"
 msgstr ""
 "Système de fichier monté ou ouvert en mode exclusif par un autre\n"
 "programme ?\n"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1357
 msgid "Possibly non-existent device?\n"
 msgstr "Périphérique peut-être inexistant ?\n"
 
-#: e2fsck/unix.c:1324
+#: e2fsck/unix.c:1360
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3100,44 +3025,42 @@ msgstr ""
 "Disque protégé en écriture ; utilisez l'option -n pour effectuer une\n"
 "vérification du périphérique en lecture seule.\n"
 
-#: e2fsck/unix.c:1389
+#: e2fsck/unix.c:1425
 msgid "Get a newer version of e2fsck!"
 msgstr "Veuillez obtenir une version plus récente d'e2fsck !"
 
-#: e2fsck/unix.c:1437
+#: e2fsck/unix.c:1469
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "lors de la vérification du journal ext3 pour %s"
 
-#: e2fsck/unix.c:1448
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1480
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
 "Avertissement : saute la récupération du journal puisque l'on\n"
 "procède à l'examen d'un système de fichiers en lecture seule.\n"
 
-#: e2fsck/unix.c:1461
+#: e2fsck/unix.c:1493
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "impossible d'initialiser les drapeaux du superbloc sur %s\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1499
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "lors de la récupération du journal ext3 de %s"
 
-#: e2fsck/unix.c:1492
+#: e2fsck/unix.c:1523
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s a une(des) fonctionnalité(s) non supportée(s) :"
 
-#: e2fsck/unix.c:1507
+#: e2fsck/unix.c:1538
 #, c-format
 msgid "%s: warning: compression support is experimental.\n"
 msgstr "%s : avertissement : le support de la compression est expérimental.\n"
 
-#: e2fsck/unix.c:1513
+#: e2fsck/unix.c:1544
 #, c-format
 msgid ""
 "%s: e2fsck not compiled with HTREE support,\n"
@@ -3146,51 +3069,50 @@ msgstr ""
 "%s : e2fsck n'est pas compilé avec le support pour HTREE,\n"
 "\tmais le système de fichiers %s a des répertoires HTREE.\n"
 
-#: e2fsck/unix.c:1565
+#: e2fsck/unix.c:1596
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s : %s lors de la lecture de l'i-noeud des blocs défectueux\n"
 
-#: e2fsck/unix.c:1568
+#: e2fsck/unix.c:1599
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Cela ne semble pas être bien, mais on va quand même essayer...\n"
 
-#: e2fsck/unix.c:1609
+#: e2fsck/unix.c:1640
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Création du journal (%d blocs) : "
 
-#: e2fsck/unix.c:1619
+#: e2fsck/unix.c:1650
 msgid " Done.\n"
 msgstr "Complété.\n"
 
-#: e2fsck/unix.c:1620
+#: e2fsck/unix.c:1651
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
 "\n"
-"*** le journal a été re-créé - le système de fichiers est de nouveau ext3 "
-"***\n"
+"*** le journal a été re-créé - le système de fichiers est de nouveau ext3 ***\n"
 
-#: e2fsck/unix.c:1643
+#: e2fsck/unix.c:1674
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Re-démarrons e2fsck depuis le début...\n"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1678
 msgid "while resetting context"
 msgstr "lors de la réinitialisation du contexte"
 
-#: e2fsck/unix.c:1654
+#: e2fsck/unix.c:1685
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s : e2fsck a été annulé.\n"
 
-#: e2fsck/unix.c:1659
+#: e2fsck/unix.c:1690
 msgid "aborted"
 msgstr "arrêté"
 
-#: e2fsck/unix.c:1671 e2fsck/util.c:67
+#: e2fsck/unix.c:1702 e2fsck/util.c:67
 #, c-format
 msgid ""
 "\n"
@@ -3199,12 +3121,12 @@ msgstr ""
 "\n"
 "%s: ***** LE SYSTÈME DE FICHIERS A ÉTÉ MODIFIÉ *****\n"
 
-#: e2fsck/unix.c:1675
+#: e2fsck/unix.c:1706
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s : ***** RÉ-AMORCER LINUX *****\n"
 
-#: e2fsck/unix.c:1683 e2fsck/util.c:73
+#: e2fsck/unix.c:1714 e2fsck/util.c:73
 #, c-format
 msgid ""
 "\n"
@@ -3215,10 +3137,9 @@ msgstr ""
 "%s : **ATTENTION : le système de fichiers contient encore des erreurs**\n"
 "\n"
 
-#: e2fsck/unix.c:1723
+#: e2fsck/unix.c:1754
 msgid "while setting block group checksum info"
-msgstr ""
-"lors de l'initialisation de l'information de checksum du groupe de blocs"
+msgstr "lors de l'initialisation de l'information de checksum du groupe de blocs"
 
 #: e2fsck/util.c:189 misc/util.c:70
 msgid "yY"
@@ -3299,9 +3220,7 @@ msgstr "l'
 #: e2fsck/util.c:302
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
-msgstr ""
-"lors d'une nouvelle tentative d'écriture de bitmaps de blocs et d'i-noeuds "
-"pour %s"
+msgstr "lors d'une nouvelle tentative d'écriture de bitmaps de blocs et d'i-noeuds pour %s"
 
 #: e2fsck/util.c:314
 #, c-format
@@ -3351,12 +3270,8 @@ msgid "while allocating zeroizing buffer"
 msgstr "lors de l'allocation d'un tampon de mise à zéro"
 
 #: e2fsck/util.c:788
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"INCOHÉRENCE INATTENDUE : le système de fichiers a été modifié pendant le "
-"déroulement de fsck.\n"
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "INCOHÉRENCE INATTENDUE : le système de fichiers a été modifié pendant le déroulement de fsck.\n"
 
 #: misc/badblocks.c:69
 msgid "done                                                 \n"
@@ -3366,12 +3281,11 @@ msgstr "compl
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
-"max_bad_blocks]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
 "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
 "       device [last_block [first_block]]\n"
 msgstr ""
-"Usage : %s [-b taille_de_bloc] [-i fichier_d_entrée] [-o fichier_de_sortie]\n"
+"Utilisation : %s [-b taille_de_bloc] [-i fichier_d_entrée] [-o fichier_de_sortie]\n"
 "       [-svwnf] [-c blocs_à_la_fois] [-d facteur_délai_entre_lectures]\n"
 "       [-e max_blocks_défectueux] [-p nombre_de_passes]\n"
 "       [-t motif_de_test [-t motif_de_test [...]]]\n"
@@ -3459,8 +3373,7 @@ msgstr ""
 
 #: misc/badblocks.c:777
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr ""
-"Vérification des blocs défectueux (test non destructif de lecture-écriture)\n"
+msgstr "Vérification des blocs défectueux (test non destructif de lecture-écriture)\n"
 
 #: misc/badblocks.c:784
 msgid ""
@@ -3557,68 +3470,66 @@ msgstr "Passe compl
 
 #: misc/chattr.c:86
 #, c-format
-msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
-msgstr "Usage : %s [-RVf] [-+=AacDdeijsSu] [-v version] fichiers...\n"
+msgid "Usage: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] files...\n"
+msgstr "Utilisation : %s [-RVf] [-+=AaCcDdeijsSu] [-v version] fichiers...\n"
 
-#: misc/chattr.c:154
+#: misc/chattr.c:155
 #, c-format
 msgid "bad version - %s\n"
 msgstr "version erronée - %s\n"
 
-#: misc/chattr.c:201 misc/lsattr.c:116
+#: misc/chattr.c:202 misc/lsattr.c:116
 #, c-format
 msgid "while trying to stat %s"
 msgstr "lors de l'évaluation par stat() de %s"
 
-#: misc/chattr.c:208
+#: misc/chattr.c:209
 #, c-format
 msgid "while reading flags on %s"
 msgstr "lors de la lecture des drapeaux sur %s"
 
-#: misc/chattr.c:217 misc/chattr.c:236
+#: misc/chattr.c:218 misc/chattr.c:237
 #, c-format
 msgid "Clearing extent flag not supported on %s"
 msgstr "La suppression du drapeau extent n'est pas supportée sur %s"
 
-#: misc/chattr.c:222 misc/chattr.c:241
+#: misc/chattr.c:223 misc/chattr.c:242
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Drapeaux de %s initialisés comme "
 
-#: misc/chattr.c:250
+#: misc/chattr.c:251
 #, c-format
 msgid "while setting flags on %s"
 msgstr "lors de l'initialisation des drapeaux sur %s"
 
-#: misc/chattr.c:258
+#: misc/chattr.c:259
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version de %s initialisée à %lu\n"
 
-#: misc/chattr.c:262
+#: misc/chattr.c:263
 #, c-format
 msgid "while setting version on %s"
 msgstr "lors de l'initialisation de la version sur %s"
 
-#: misc/chattr.c:282
+#: misc/chattr.c:283
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Ne peut allouer une variable de chemin dans chattr_dir_proc"
 
-#: misc/chattr.c:322
+#: misc/chattr.c:323
 msgid "= is incompatible with - and +\n"
 msgstr "= est incompatible avec - et +\n"
 
-#: misc/chattr.c:330
+#: misc/chattr.c:331
 msgid "Must use '-v', =, - or +\n"
 msgstr "Vous devez utiliser « -v », = - ou +\n"
 
 #: misc/dumpe2fs.c:55
 #, c-format
 msgid "Usage: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Usage : %s [-bfhixV] [-o superblock=<nombre>] [-o blocksize=<nombre>] "
-"périphérique\n"
+msgstr "Utilisation : %s [-bfhixV] [-o superblock=<nombre>] [-o blocksize=<nombre>] périphérique\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -3760,9 +3671,9 @@ msgstr ""
 "Début du journal :         %u\n"
 
 #: misc/dumpe2fs.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "Journal errno:            %d\n"
-msgstr "Usagers du journal :      %s\n"
+msgstr "Numéro erreur du journal: %d\n"
 
 #: misc/dumpe2fs.c:401 misc/tune2fs.c:218
 msgid "while reading journal superblock"
@@ -3796,7 +3707,7 @@ msgstr ""
 msgid "Journal users:            %s\n"
 msgstr "Usagers du journal :      %s\n"
 
-#: misc/dumpe2fs.c:442 misc/mke2fs.c:662 misc/tune2fs.c:1137
+#: misc/dumpe2fs.c:442 misc/mke2fs.c:665 misc/tune2fs.c:1128
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Impossible d'allouer de la mémoire pour analyser les options !\n"
@@ -3835,12 +3746,12 @@ msgstr ""
 "\tblocksize=<taille de bloc>\n"
 "\n"
 
-#: misc/dumpe2fs.c:554 misc/mke2fs.c:1525
+#: misc/dumpe2fs.c:554 misc/mke2fs.c:1528
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tUtilisation de %s\n"
 
-#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1923
+#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1914
 #: resize/main.c:305
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
@@ -3858,7 +3769,7 @@ msgstr ""
 #: misc/e2image.c:87
 #, c-format
 msgid "Usage: %s [-rsIQ] device image_file\n"
-msgstr "Usage : %s [-rsIQ] périphérique fichier_image\n"
+msgstr "Utilisation : %s [-rsIQ] périphérique fichier_image\n"
 
 #: misc/e2image.c:135
 #, c-format
@@ -3888,8 +3799,7 @@ msgstr "lors de l'
 #: misc/e2image.c:1341
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
-msgstr ""
-"lors de l'essai de conversion de l'image qcow2 (%s) en image brute (%s)"
+msgstr "lors de l'essai de conversion de l'image qcow2 (%s) en image brute (%s)"
 
 #: misc/e2label.c:58
 #, c-format
@@ -3911,7 +3821,7 @@ msgstr "e2label
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label : n'est pas un système de fichiers ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2074
+#: misc/e2label.c:97 misc/tune2fs.c:2065
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Avertissement : étiquette trop longue, sera tronquée.\n"
@@ -3926,15 +3836,15 @@ msgstr "e2label
 msgid "e2label: error writing superblock\n"
 msgstr "e2label : erreur lors de l'écriture du superbloc\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:803
+#: misc/e2label.c:117 misc/tune2fs.c:794
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
-msgstr "Usage : e2label périphérique [nouvelle_étiquette]\n"
+msgstr "Utilisation : e2label périphérique [nouvelle_étiquette]\n"
 
 #: misc/e2undo.c:36
 #, c-format
 msgid "Usage: %s <transaction file> <filesystem>\n"
-msgstr "Usage : %s <fichier transaction> <système de fichiers>\n"
+msgstr "Utilisation : %s <fichier transaction> <système de fichiers>\n"
 
 #: misc/e2undo.c:52
 msgid "Failed to read the file system data \n"
@@ -3966,8 +3876,7 @@ msgstr "Erreur lors la d
 
 #: misc/e2undo.c:175
 msgid "e2undo should only be run on unmounted file system\n"
-msgstr ""
-"e2undo ne devrait être lancé que sur un système de fichiers non monté\n"
+msgstr "e2undo ne devrait être lancé que sur un système de fichiers non monté\n"
 
 #: misc/e2undo.c:184
 #, c-format
@@ -4020,9 +3929,7 @@ msgstr "%s
 #: misc/fsck.c:616
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
-msgstr ""
-"Avertissement... %s pour le périphérique %s s'est terminé avec le signal "
-"%d.\n"
+msgstr "Avertissement... %s pour le périphérique %s s'est terminé avec le signal %d.\n"
 
 #: misc/fsck.c:622
 #, c-format
@@ -4049,17 +3956,12 @@ msgstr ""
 
 #: misc/fsck.c:761
 msgid "Couldn't allocate memory for filesystem types\n"
-msgstr ""
-"Impossible d'allouer de la mémoire pour les types de systèmes de fichiers\n"
+msgstr "Impossible d'allouer de la mémoire pour les types de systèmes de fichiers\n"
 
 #: misc/fsck.c:884
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
-"%s : saut de la mauvaise ligne de /etc/fstab : montage « bind » avec un "
-"numéro de passe fsck non nul\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s : saut de la mauvaise ligne de /etc/fstab : montage « bind » avec un numéro de passe fsck non nul\n"
 
 #: misc/fsck.c:911
 #, c-format
@@ -4076,11 +3978,8 @@ msgid "--waiting-- (pass %d)\n"
 msgstr "--en attente-- (passe %d)\n"
 
 #: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"Usage : fsck [-AMNPRTV] [ -C [ fd ] ] [-t type_sys_fichiers] "
-"[options_sys_fichiers] [sys_fichiers...]\n"
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Utilisation : fsck [-AMNPRTV] [ -C [ fd ] ] [-t type_sys_fichiers] [options_sys_fichiers] [sys_fichiers...]\n"
 
 #: misc/fsck.c:1120
 #, c-format
@@ -4095,7 +3994,7 @@ msgstr "%s
 #: misc/lsattr.c:74
 #, c-format
 msgid "Usage: %s [-RVadlv] [files...]\n"
-msgstr "Usage : %s [-RVadlv] [fichiers...]\n"
+msgstr "Utilisation : %s [-RVadlv] [fichiers...]\n"
 
 #: misc/lsattr.c:84
 #, c-format
@@ -4107,7 +4006,7 @@ msgstr "Lors de la lecture des drapeaux sur %s"
 msgid "While reading version on %s"
 msgstr "Lors de la lecture de la version sur %s"
 
-#: misc/mke2fs.c:114
+#: misc/mke2fs.c:115
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4116,55 +4015,47 @@ msgid ""
 "\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-"
-"count]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]\n"
 msgstr ""
-"Usage : %s [-c|-l nom-de-fichier] [-b taille-de-bloc] [-C taille-de-"
-"cluster]\n"
+"Utilisation : %s [-c|-l nom-de-fichier] [-b taille-de-bloc] [-C taille-de-cluster]\n"
 "\t[-i octets-par-i-noeud] [-I taille-des-i-noeuds]\n"
 "\t[-J options-de-journal] [-G taille-groupe-flex] [-N nombre-d-i-noeuds]\n"
 "\t[-m pourcentage-de-blocs-réservés]\n"
 "\t[-o système-d-exploitation-de-création] [-g blocs-par-groupe]\n"
 "\t[-L étiquette-du-volume] [-M dernier-répertoire-monté]\n"
 "\t[-O fonctionnalité[,...]] [-r révision-du-système-de-fichiers]\n"
-"\t[-E option-étendue[,...]] [-t type-système-de-fichiers] [-T type-"
-"d'utilisation]\n"
+"\t[-E option-étendue[,...]] [-t type-système-de-fichiers] [-T type-d'utilisation]\n"
 "\t[-U UUID] [-jnqvFKSV] périphérique [nombre-de-blocs]\n"
 
-#: misc/mke2fs.c:217
+#: misc/mke2fs.c:218
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Exécution de la commande : %s\n"
 
-#: misc/mke2fs.c:221
+#: misc/mke2fs.c:222
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "durant la tentative d'exécution de « %s »"
 
-#: misc/mke2fs.c:228
+#: misc/mke2fs.c:229
 msgid "while processing list of bad blocks from program"
-msgstr ""
-"lors du traitement de la liste des blocs défectueux à partir du programme"
+msgstr "lors du traitement de la liste des blocs défectueux à partir du programme"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:256
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
-msgstr ""
-"Bloc %d dans la zone du descripteur de superbloc/groupe primaire est "
-"défectueux.\n"
+msgstr "Bloc %d dans la zone du descripteur de superbloc/groupe primaire est défectueux.\n"
 
-#: misc/mke2fs.c:257
+#: misc/mke2fs.c:258
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
-msgstr ""
-"Les blocs de %u à %u doivent être en bon état pour générer le système de "
-"fichiers.\n"
+msgstr "Les blocs de %u à %u doivent être en bon état pour générer le système de fichiers.\n"
 
-#: misc/mke2fs.c:260
+#: misc/mke2fs.c:261
 msgid "Aborting....\n"
 msgstr "Arrêt immédiat...\n"
 
-#: misc/mke2fs.c:280
+#: misc/mke2fs.c:281
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -4175,15 +4066,15 @@ msgstr ""
 "\tbloc %u contiennent des blocs défectueux.\n"
 "\n"
 
-#: misc/mke2fs.c:299
+#: misc/mke2fs.c:300
 msgid "while marking bad blocks as used"
 msgstr "lors du marquage des blocs défectueux en tant qu'utilisés"
 
-#: misc/mke2fs.c:316
+#: misc/mke2fs.c:317
 msgid "Writing inode tables: "
 msgstr "Écriture des tables d'i-noeuds : "
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:339
 #, c-format
 msgid ""
 "\n"
@@ -4192,73 +4083,72 @@ msgstr ""
 "\n"
 "Impossible d'écrire %d blocs dans la table d'i-noeuds débutant à %llu : %s\n"
 
-#: misc/mke2fs.c:351 misc/mke2fs.c:2175 misc/mke2fs.c:2429
+#: misc/mke2fs.c:353 misc/mke2fs.c:2181 misc/mke2fs.c:2435
 #, c-format
 msgid "done                            \n"
 msgstr "complété                        \n"
 
-#: misc/mke2fs.c:362
+#: misc/mke2fs.c:364
 msgid "while creating root dir"
 msgstr "lors de la création du répertoire racine"
 
-#: misc/mke2fs.c:369
+#: misc/mke2fs.c:371
 msgid "while reading root inode"
 msgstr "lors de la lecture de l'i-noeud racine"
 
-#: misc/mke2fs.c:383
+#: misc/mke2fs.c:385
 msgid "while setting root inode ownership"
 msgstr "lors de l'initialisation de la propriété de l'i-noeud racine"
 
-#: misc/mke2fs.c:401
+#: misc/mke2fs.c:403
 msgid "while creating /lost+found"
 msgstr "lors de la création de /lost+found"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:410
 msgid "while looking up /lost+found"
 msgstr "lors de la recherche de /lost+found"
 
-#: misc/mke2fs.c:421
+#: misc/mke2fs.c:423
 msgid "while expanding /lost+found"
 msgstr "lors de l'extension de /lost+found"
 
-#: misc/mke2fs.c:436
+#: misc/mke2fs.c:438
 msgid "while setting bad block inode"
 msgstr "lors de l'initialisation de l'i-noeud des blocs défectueux"
 
-#: misc/mke2fs.c:463
+#: misc/mke2fs.c:465
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Mémoire épuisée lors de l'effacement des secteurs %d-%d\n"
 
-#: misc/mke2fs.c:473
+#: misc/mke2fs.c:475
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Avertissement : impossible de lire le bloc 0 : %s\n"
 
-#: misc/mke2fs.c:489
+#: misc/mke2fs.c:491
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Avertissement : impossible d'effacer le secteur %d : %s\n"
 
-#: misc/mke2fs.c:505
+#: misc/mke2fs.c:507
 msgid "while initializing journal superblock"
 msgstr "lors de l'initialisation du journal du superbloc"
 
-#: misc/mke2fs.c:513
+#: misc/mke2fs.c:515
 msgid "Zeroing journal device: "
 msgstr "Mise à zéro du périphérique de journal : "
 
-#: misc/mke2fs.c:525
+#: misc/mke2fs.c:527
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
-msgstr ""
-"lors de la mise à zéro du périphérique de journal (bloc %llu, compte %d)"
+msgstr "lors de la mise à zéro du périphérique de journal (bloc %llu, compte %d)"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:546
 msgid "while writing journal superblock"
 msgstr "lors de l'écriture du superbloc de journal"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:561
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -4267,126 +4157,126 @@ msgstr ""
 "Avertissement : %llu blocs inutilisés.\n"
 "\n"
 
-#: misc/mke2fs.c:563
+#: misc/mke2fs.c:566
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Étiquette de système de fichiers=%s\n"
 
-#: misc/mke2fs.c:566
+#: misc/mke2fs.c:569
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Type de système d'exploitation : %s\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:571
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Taille de bloc=%u (log=%u)\n"
 
-#: misc/mke2fs.c:572
+#: misc/mke2fs.c:575
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Taille de cluster=%u (log=%u)\n"
 
-#: misc/mke2fs.c:576
+#: misc/mke2fs.c:579
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Taille de fragment=%u (log=%u)\n"
 
-#: misc/mke2fs.c:578
+#: misc/mke2fs.c:581
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "« Stride » = %u blocs, « Stripe width » = %u blocs\n"
 
-#: misc/mke2fs.c:580
+#: misc/mke2fs.c:583
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u i-noeuds, %llu blocs\n"
 
-#: misc/mke2fs.c:582
+#: misc/mke2fs.c:585
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu blocs (%2.2f%%) réservés pour le super utilisateur\n"
 
-#: misc/mke2fs.c:585
+#: misc/mke2fs.c:588
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Premier bloc de données=%u\n"
 
-#: misc/mke2fs.c:587
+#: misc/mke2fs.c:590
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Nombre maximum de blocs du système de fichiers=%lu\n"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:594
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u groupes de blocs\n"
 
-#: misc/mke2fs.c:593
+#: misc/mke2fs.c:596
 #, c-format
 msgid "%u block group\n"
 msgstr "%u groupe de bloc\n"
 
-#: misc/mke2fs.c:596
+#: misc/mke2fs.c:599
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u blocs par groupe, %u clusters par groupe\n"
 
-#: misc/mke2fs.c:599
+#: misc/mke2fs.c:602
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blocs par groupe, %u fragments par groupe\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:604
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u i-noeuds par groupe\n"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:611
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblocs de secours stockés sur les blocs : "
 
-#: misc/mke2fs.c:687 misc/tune2fs.c:1165
+#: misc/mke2fs.c:690 misc/tune2fs.c:1156
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "mmp_update_interval invalide : %s\n"
 
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:704
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Paramètre « stride » invalide : %s\n"
 
-#: misc/mke2fs.c:716
+#: misc/mke2fs.c:719
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Paramètre « stripe-width » invalide : %s\n"
 
-#: misc/mke2fs.c:739
+#: misc/mke2fs.c:742
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Paramètre de changement de taille invalide : %s\n"
 
-#: misc/mke2fs.c:746
+#: misc/mke2fs.c:749
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
 msgstr ""
 "La taille maximale de l'agrandissement doit être plus grande que la taille\n"
 "du système de fichiers.\n"
 
-#: misc/mke2fs.c:770
+#: misc/mke2fs.c:773
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 "Le changement de taille en ligne n'est pas supportée avec les systèmes de\n"
 "fichiers de version 0\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:811
 #, c-format
 msgid "Invalid quotatype parameter: %s\n"
 msgstr "Paramètre de type de quota invalide : %s\n"
 
-#: misc/mke2fs.c:819
+#: misc/mke2fs.c:822
 #, c-format
 msgid ""
 "\n"
@@ -4425,7 +4315,7 @@ msgstr ""
 "\tquotatype=<usr OU grp>\n"
 "\n"
 
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:842
 #, c-format
 msgid ""
 "\n"
@@ -4433,11 +4323,10 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Attention : le « stripe-width » RAID %u n'est pas multiple impair du "
-"« stride » %u.\n"
+"Attention : le « stripe-width » RAID %u n'est pas multiple impair du « stride » %u.\n"
 "\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:881
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -4447,17 +4336,17 @@ msgstr ""
 "\t(%s, ligne n°%d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:891 misc/tune2fs.c:393
+#: misc/mke2fs.c:894 misc/tune2fs.c:393
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Jeu d'options de système de fichiers invalide : %s\n"
 
-#: misc/mke2fs.c:903 misc/tune2fs.c:345
+#: misc/mke2fs.c:906 misc/tune2fs.c:345
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Jeu d'options pour le montage invalide : %s\n"
 
-#: misc/mke2fs.c:1043
+#: misc/mke2fs.c:1046
 #, c-format
 msgid ""
 "\n"
@@ -4467,7 +4356,7 @@ msgstr ""
 "Votre mke2fs.conf ne précise pas le type de système de fichiers de\n"
 "%s.\n"
 
-#: misc/mke2fs.c:1047
+#: misc/mke2fs.c:1050
 #, c-format
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
@@ -4476,12 +4365,12 @@ msgstr ""
 "Il vous faut sans doute installer un fichier mke2fs.conf mis à jour.\n"
 "\n"
 
-#: misc/mke2fs.c:1051
+#: misc/mke2fs.c:1054
 #, c-format
 msgid "Aborting...\n"
 msgstr "Arrêt immédiat...\n"
 
-#: misc/mke2fs.c:1091
+#: misc/mke2fs.c:1094
 #, c-format
 msgid ""
 "\n"
@@ -4492,127 +4381,122 @@ msgstr ""
 "Avertissement : le fs_type %s n'est pas défini dans mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1249
+#: misc/mke2fs.c:1252
 #, c-format
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Impossible d'allouer de la mémoire pour un nouveau chemin.\n"
 
-#: misc/mke2fs.c:1290
+#: misc/mke2fs.c:1293
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "N'a pu initialiser le profilage correctement (erreur : %ld).\n"
 
-#: misc/mke2fs.c:1330
+#: misc/mke2fs.c:1333
 #, c-format
 msgid "invalid block size - %s"
 msgstr "taille invalide des blocs - %s"
 
-#: misc/mke2fs.c:1334
+#: misc/mke2fs.c:1337
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr ""
 "Avertissement : la taille de bloc %d n'est pas utilisable\n"
 "sur la plupart des systèmes.\n"
 
-#: misc/mke2fs.c:1350
+#: misc/mke2fs.c:1353
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "taille de cluster invalide - %s"
 
-#: misc/mke2fs.c:1362
+#: misc/mke2fs.c:1365
 msgid "Illegal number for blocks per group"
 msgstr "Nombre de blocs par groupe illégal"
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1370
 msgid "blocks per group must be multiple of 8"
 msgstr "le nombre de blocs par groupe doit être un multiple de 8"
 
-#: misc/mke2fs.c:1375
+#: misc/mke2fs.c:1378
 msgid "Illegal number for flex_bg size"
 msgstr "Nombre illégal pour la taille flex_bg"
 
-#: misc/mke2fs.c:1381
+#: misc/mke2fs.c:1384
 msgid "flex_bg size must be a power of 2"
 msgstr "La taille flex_bg doit être une puissance de 2"
 
-#: misc/mke2fs.c:1391
+#: misc/mke2fs.c:1394
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "taux d'i-noeuds invalides %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1401
+#: misc/mke2fs.c:1404
 #, c-format
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Avertissement : l'option -K est dépréciée et ne devrait plus être utilisée. "
-"Utiliser plutôt l'option étendue « -E nodiscard » !\n"
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Avertissement : l'option -K est dépréciée et ne devrait plus être utilisée. Utiliser plutôt l'option étendue « -E nodiscard » !\n"
 
-#: misc/mke2fs.c:1415
+#: misc/mke2fs.c:1418
 msgid "in malloc for bad_blocks_filename"
 msgstr "dans malloc pour bad_blocks_filename"
 
-#: misc/mke2fs.c:1425
+#: misc/mke2fs.c:1428
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "pourcentage de blocs réservés invalide - %s"
 
-#: misc/mke2fs.c:1443
+#: misc/mke2fs.c:1446
 #, c-format
 msgid "bad revision level - %s"
 msgstr "mauvais numéro de version - %s"
 
-#: misc/mke2fs.c:1455
+#: misc/mke2fs.c:1458
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "taille d'i-noeud invalide - %s"
 
-#: misc/mke2fs.c:1475
+#: misc/mke2fs.c:1478
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "mauvais nombre d'i-noeuds - %s"
 
-#: misc/mke2fs.c:1492
+#: misc/mke2fs.c:1495
 msgid "The -t option may only be used once"
 msgstr "L'option -t ne peut être spécifiée qu'une fois"
 
-#: misc/mke2fs.c:1500
+#: misc/mke2fs.c:1503
 msgid "The -T option may only be used once"
 msgstr "L'option -T ne peut être spécifiée qu'une fois"
 
-#: misc/mke2fs.c:1550 misc/mke2fs.c:2508
+#: misc/mke2fs.c:1553 misc/mke2fs.c:2514
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "lors de la tentative d'ouverture du périphérique de journal %s\n"
 
-#: misc/mke2fs.c:1556
+#: misc/mke2fs.c:1559
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr ""
 "la taille de bloc du périphérique de journal (%d) est plus petit que la\n"
 "taille de blocs minimum %d\n"
 
-#: misc/mke2fs.c:1562
+#: misc/mke2fs.c:1565
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Utilisation de la taille de bloc du périphérique de journal : %d\n"
 
-#: misc/mke2fs.c:1573
+#: misc/mke2fs.c:1576
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "blocs '%s' invalides sur le périphérique %s"
 
-#: misc/mke2fs.c:1583
+#: misc/mke2fs.c:1586
 msgid "filesystem"
 msgstr "système de fichiers"
 
-#: misc/mke2fs.c:1596 resize/main.c:374
+#: misc/mke2fs.c:1599 resize/main.c:355
 msgid "while trying to determine filesystem size"
-msgstr ""
-"lors de la tentative de détermination de la taille du système de fichiers"
+msgstr "lors de la tentative de détermination de la taille du système de fichiers"
 
-#: misc/mke2fs.c:1602
+#: misc/mke2fs.c:1605
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -4620,7 +4504,7 @@ msgstr ""
 "Ne peut déterminer la taille du périphérique ; vous devez spécifier\n"
 "la taille du système de fichiers\n"
 
-#: misc/mke2fs.c:1609
+#: misc/mke2fs.c:1612
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4633,16 +4517,16 @@ msgstr ""
 "\toccupée et utilisée. Vous devez ré-amorcer pour forcer une\n"
 "\trelecture de la table de partitions.\n"
 
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1629
 msgid "Filesystem larger than apparent device size."
 msgstr "Système de fichiers plus grand que la taille apparente du périphérique"
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1649
 #, c-format
 msgid "Failed to parse fs types list\n"
 msgstr "Échec du parcours de la liste de types de systèmes de fichiers\n"
 
-#: misc/mke2fs.c:1700
+#: misc/mke2fs.c:1703
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -4651,37 +4535,37 @@ msgstr ""
 "%s: La taille (0x%llx blocs) du périphérique %s est trop grande pour\n"
 "\tpouvoir être exprimée sur 32 bits en utilisant une taille de bloc de %d.\n"
 
-#: misc/mke2fs.c:1716
+#: misc/mke2fs.c:1719
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "résolution de fs_types pour mke2fs.conf : "
 
-#: misc/mke2fs.c:1723
+#: misc/mke2fs.c:1726
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Fonctionnalités du système de fichiers non supportées par les systèmes de\n"
 "fichiers de version 0\n"
 
-#: misc/mke2fs.c:1730
+#: misc/mke2fs.c:1733
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 "Les superblocs creux ne sont pas supportés par les systèmes de\n"
 "fichiers de version 0\n"
 
-#: misc/mke2fs.c:1742
+#: misc/mke2fs.c:1745
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 "Les journaux ne sont pas supportés par les systèmes de\n"
 "fichiers de version 0\n"
 
-#: misc/mke2fs.c:1756
+#: misc/mke2fs.c:1759
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "pourcentage de blocs réservés invalide - %lf"
 
-#: misc/mke2fs.c:1772
+#: misc/mke2fs.c:1775
 #, c-format
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
@@ -4690,92 +4574,80 @@ msgstr ""
 "Les fonctionnalités resize_inode et meta_bg ne sont pas compatibles.\n"
 "Elles ne peuvent pas être activées simultanément.\n"
 
-#: misc/mke2fs.c:1789
+#: misc/mke2fs.c:1792
 msgid "while trying to determine hardware sector size"
-msgstr ""
-"lors de la tentative de détermination de la taille matérielle de secteur"
+msgstr "lors de la tentative de détermination de la taille matérielle de secteur"
 
-#: misc/mke2fs.c:1795
+#: misc/mke2fs.c:1798
 msgid "while trying to determine physical sector size"
 msgstr "lors de la tentative de détermination de la taille de secteur matériel"
 
-#: misc/mke2fs.c:1828
+#: misc/mke2fs.c:1831
 msgid "while setting blocksize; too small for device\n"
-msgstr ""
-"lors de la définition de la taille de bloc ; trop petite pour le "
-"périphérique\n"
+msgstr "lors de la définition de la taille de bloc ; trop petite pour le périphérique\n"
 
-#: misc/mke2fs.c:1833
+#: misc/mke2fs.c:1836
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Avertissement : la taille de bloc %d spécifiée est plus petite que la taille "
-"de secteur physique %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Avertissement : la taille de bloc %d spécifiée est plus petite que la taille de secteur physique %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1867
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "attention : Impossible d'obtenir la géométrie du périphérique %s\n"
 
-#: misc/mke2fs.c:1867
+#: misc/mke2fs.c:1870
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "L'alignement de %s est décalé de %lu octets.\n"
 
-#: misc/mke2fs.c:1869
+#: misc/mke2fs.c:1872
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
-msgstr ""
-"Cela peut induire de très mauvaises performances, il est suggéré de (re)-"
-"partitionner.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Cela peut induire de très mauvaises performances, il est suggéré de (re)-partitionner.\n"
 
-#: misc/mke2fs.c:1880
+#: misc/mke2fs.c:1883
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "blocs de %d octets trop gros pour le système (max %d)"
 
-#: misc/mke2fs.c:1884
+#: misc/mke2fs.c:1887
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 "Avertissement : blocs de %d octets trop gros pour le système (max %d),\n"
 "poursuite forcée\n"
 
-#: misc/mke2fs.c:1920
+#: misc/mke2fs.c:1925
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "la réservation de blocs de changement de taille en ligne n'est pas\n"
 "supportée sur un système de fichiers non creux"
 
-#: misc/mke2fs.c:1929
+#: misc/mke2fs.c:1934
 msgid "blocks per group count out of range"
 msgstr "compteur de blocs par groupe hors limite"
 
-#: misc/mke2fs.c:1944
+#: misc/mke2fs.c:1949
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"La fonctionnalité flex_bg n'est pas activée, la taille flex_bg ne peut donc "
-"pas être spécifiée"
+msgstr "La fonctionnalité flex_bg n'est pas activée, la taille flex_bg ne peut donc pas être spécifiée"
 
-#: misc/mke2fs.c:1956
+#: misc/mke2fs.c:1961
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "taille d'i-noeud invalide %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1974
+#: misc/mke2fs.c:1979
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "trop d'i-noeuds (%llu), augmenter le ratio d'i-noeuds ?"
 
-#: misc/mke2fs.c:1981
+#: misc/mke2fs.c:1986
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "trop d'i-noeuds (%llu), indiquer < 2^32 i-noeuds"
 
-#: misc/mke2fs.c:1995
+#: misc/mke2fs.c:2000
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4786,56 +4658,53 @@ msgstr ""
 "\tsystème de fichiers avec %llu blocs, indiquer un ratio_i_noeud (-i)\n"
 "\tplus grand ou un nombre d'i-noeud plus petit (-N).\n"
 
-#: misc/mke2fs.c:2114
+#: misc/mke2fs.c:2119
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
 "    e2undo %s %s\n"
 "\n"
 msgstr ""
-"Écrasement du système de fichiers existant ; cela peut être défait en "
-"utilisant la commande :\n"
+"Écrasement du système de fichiers existant ; cela peut être défait en utilisant la commande :\n"
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/mke2fs.c:2128
+#: misc/mke2fs.c:2133
 msgid "while trying to setup undo file\n"
 msgstr "lors de la tentative de mise en place du fichier d'annulation\n"
 
-#: misc/mke2fs.c:2154
+#: misc/mke2fs.c:2159
 msgid "Discarding device blocks: "
 msgstr "Rejet des blocs de périphérique : "
 
-#: misc/mke2fs.c:2170
+#: misc/mke2fs.c:2176
 msgid "failed - "
 msgstr "échoué - "
 
-#: misc/mke2fs.c:2277
+#: misc/mke2fs.c:2283
 msgid "while setting up superblock"
 msgstr "lors de l'initialisation du superbloc"
 
-#: misc/mke2fs.c:2286
+#: misc/mke2fs.c:2292
 #, c-format
 msgid "Discard succeeded and will return 0s  - skipping inode table wipe\n"
-msgstr ""
-"L'effacement a réussi et retournera des 0s  - saut de l'effacement de la "
-"table des i-noeuds\n"
+msgstr "L'effacement a réussi et retournera des 0s  - saut de l'effacement de la table des i-noeuds\n"
 
-#: misc/mke2fs.c:2369
+#: misc/mke2fs.c:2375
 #, c-format
 msgid "unknown os - %s"
 msgstr "système d'exploitation inconnu - %s"
 
-#: misc/mke2fs.c:2421
+#: misc/mke2fs.c:2427
 #, c-format
 msgid "Allocating group tables: "
 msgstr "Allocation des tables de groupe : "
 
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2431
 msgid "while trying to allocate filesystem tables"
 msgstr "lors de la tentative d'allocation des tables de systèmes de fichiers"
 
-#: misc/mke2fs.c:2434
+#: misc/mke2fs.c:2440
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -4843,25 +4712,25 @@ msgstr ""
 "\n"
 "\tlors de la conversion du bitmap de sous-cluster"
 
-#: misc/mke2fs.c:2477
+#: misc/mke2fs.c:2483
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "lors de la mise à zéro du bloc %llu à la fin du système de fichiers"
 
-#: misc/mke2fs.c:2490
+#: misc/mke2fs.c:2496
 msgid "while reserving blocks for online resize"
 msgstr "lors de la réservation de blocs pour un changement de taille en ligne"
 
-#: misc/mke2fs.c:2501 misc/tune2fs.c:640
+#: misc/mke2fs.c:2507 misc/tune2fs.c:640
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:2513
+#: misc/mke2fs.c:2519
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Ajout du journal au périphérique %s : "
 
-#: misc/mke2fs.c:2520
+#: misc/mke2fs.c:2526
 #, c-format
 msgid ""
 "\n"
@@ -4870,22 +4739,22 @@ msgstr ""
 "\n"
 "\tlors de la tentative d'ajout d'un journal au périphérique %s"
 
-#: misc/mke2fs.c:2525 misc/mke2fs.c:2557 misc/tune2fs.c:669 misc/tune2fs.c:683
+#: misc/mke2fs.c:2531 misc/mke2fs.c:2563 misc/tune2fs.c:669 misc/tune2fs.c:683
 #, c-format
 msgid "done\n"
 msgstr "complété\n"
 
-#: misc/mke2fs.c:2534
+#: misc/mke2fs.c:2540
 #, c-format
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Pas de création de journal en mode super-seul\n"
 
-#: misc/mke2fs.c:2545
+#: misc/mke2fs.c:2551
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Création du journal (%u blocs) : "
 
-#: misc/mke2fs.c:2553
+#: misc/mke2fs.c:2559
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -4893,31 +4762,28 @@ msgstr ""
 "\n"
 "\tlors de la tentative de création du journal"
 
-#: misc/mke2fs.c:2564 misc/tune2fs.c:446
+#: misc/mke2fs.c:2570 misc/tune2fs.c:446
 #, c-format
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 "\n"
-"Erreur lors de l'activation de la fonctionnalité de protection contre le "
-"montage multiple."
+"Erreur lors de l'activation de la fonctionnalité de protection contre le montage multiple."
 
-#: misc/mke2fs.c:2569
+#: misc/mke2fs.c:2575
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
-msgstr ""
-"La protection contre le montage multiple est activée avec un intervale de "
-"mise à jour de %d secondes.\n"
+msgstr "La protection contre le montage multiple est activée avec un intervale de mise à jour de %d secondes.\n"
 
-#: misc/mke2fs.c:2582
+#: misc/mke2fs.c:2588
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr ""
 "Écriture des superblocs et de l'information de comptabilité du système de\n"
 "fichiers : "
 
-#: misc/mke2fs.c:2589
+#: misc/mke2fs.c:2595
 #, c-format
 msgid ""
 "\n"
@@ -4926,7 +4792,7 @@ msgstr ""
 "\n"
 "Attention, des problèmes sont survenus lors de l'écriture des superblocs."
 
-#: misc/mke2fs.c:2591
+#: misc/mke2fs.c:2597
 #, c-format
 msgid ""
 "done\n"
@@ -4938,7 +4804,7 @@ msgstr ""
 #: misc/mklost+found.c:50
 #, c-format
 msgid "Usage: mklost+found\n"
-msgstr "Usage : mklost+found\n"
+msgstr "Utilisation : mklost+found\n"
 
 #: misc/partinfo.c:41
 #, c-format
@@ -4949,7 +4815,7 @@ msgid ""
 "For example: %s /dev/hda\n"
 "\n"
 msgstr ""
-"Usage :  %s périphérique...\n"
+"Utilisation :  %s périphérique...\n"
 "\n"
 "Imprime l'information de partition pour chaque périphérique indiqué.\n"
 "Par exemple : %s /dev/hda\n"
@@ -4983,14 +4849,13 @@ msgstr "SVP ex
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
-"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p "
-"mmp_update_interval]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p mmp_update_interval]\n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[ -I new_inode_size ] device\n"
 msgstr ""
-"Usage : %s [-c limite-maximale-de-montage]\n"
+"Utilisation : %s [-c limite-maximale-de-montage]\n"
 "\t[-e comportement-en-cas-d-erreur] [-g groupe]\n"
 "\t[-i intervalle[d|m|w]] [-j] [-J options-journal] [-l]\n"
 "\t[-m pourcentage-de-blocs-réservés] [-o [^]options-de-montage[,...]]\n"
@@ -5091,9 +4956,7 @@ msgstr ""
 #: misc/tune2fs.c:456
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
-msgstr ""
-"La protection contre le montage multiple a été activée avec un intervale de "
-"mise à jour de %ds.\n"
+msgstr "La protection contre le montage multiple a été activée avec un intervale de mise à jour de %ds.\n"
 
 #: misc/tune2fs.c:465
 msgid ""
@@ -5110,9 +4973,7 @@ msgstr "Erreur lors de la lecture des bitmaps\n"
 #: misc/tune2fs.c:482
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
-msgstr ""
-"Le numéro magique dans le bloc MMP ne correspond pas. attendu : %x, actuel : "
-"%x\n"
+msgstr "Le numéro magique dans le bloc MMP ne correspond pas. attendu : %x, actuel : %x\n"
 
 #: misc/tune2fs.c:487
 msgid "while reading MMP block."
@@ -5122,8 +4983,7 @@ msgstr "lors de la lecture du bloc MMP."
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
-msgstr ""
-"Effacer le drapeau flex_bg rendrait le système de fichiers incohérent.\n"
+msgstr "Effacer le drapeau flex_bg rendrait le système de fichiers incohérent.\n"
 
 #: misc/tune2fs.c:530
 msgid ""
@@ -5176,18 +5036,16 @@ msgstr ""
 "\n"
 "\tlors de la tentative de création du fichier journal"
 
-#: misc/tune2fs.c:763
+#: misc/tune2fs.c:754
 msgid "Couldn't allocate memory to parse quota options!\n"
-msgstr ""
-"Impossible d'allouer de la mémoire pour analyser les options de quota !\n"
+msgstr "Impossible d'allouer de la mémoire pour analyser les options de quota !\n"
 
-#: misc/tune2fs.c:785
+#: misc/tune2fs.c:776
 msgid ""
 "\n"
 "Bad quota options specified.\n"
 "\n"
-"Following valid quota options are available (pass by separating with "
-"comma):\n"
+"Following valid quota options are available (pass by separating with comma):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
@@ -5196,109 +5054,103 @@ msgstr ""
 "\n"
 "Une ou des options de quota spécifiées sont erronées.\n"
 "\n"
-"Les options de quota suivantes sont disponibles (les fournir séparées par "
-"des virgules):\n"
+"Les options de quota suivantes sont disponibles (les fournir séparées par des virgules):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:846
+#: misc/tune2fs.c:837
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Ne peut analyser la spécification de date/heure : %s"
 
-#: misc/tune2fs.c:870 misc/tune2fs.c:883
+#: misc/tune2fs.c:861 misc/tune2fs.c:874
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "compteur de montages erroné - %s"
 
-#: misc/tune2fs.c:899
+#: misc/tune2fs.c:890
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "mauvais comportement en cas d'erreur - %s"
 
-#: misc/tune2fs.c:926
+#: misc/tune2fs.c:917
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "nom gid/groupe erroné - %s"
 
-#: misc/tune2fs.c:959
+#: misc/tune2fs.c:950
 #, c-format
 msgid "bad interval - %s"
 msgstr "intervalle erroné - %s"
 
-#: misc/tune2fs.c:988
+#: misc/tune2fs.c:979
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "taux de blocs réservés erroné - %s"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:994
 msgid "-o may only be specified once"
 msgstr "-o ne peut être spécifié qu'une fois"
 
-#: misc/tune2fs.c:1012
+#: misc/tune2fs.c:1003
 msgid "-O may only be specified once"
 msgstr "-O ne peut être spécifié qu'une fois"
 
-#: misc/tune2fs.c:1027
+#: misc/tune2fs.c:1018
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "compteur de blocs réservés erroné - %s"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1047
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "nom utilisateur/uid erroné - %s"
 
-#: misc/tune2fs.c:1073
+#: misc/tune2fs.c:1064
 #, c-format
 msgid "bad inode size - %s"
 msgstr "taille d'i-noeud invalide - %s"
 
-#: misc/tune2fs.c:1080
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "La taille des i-noeuds doit être une puissance de deux - %s"
 
-#: misc/tune2fs.c:1174
+#: misc/tune2fs.c:1165
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval trop grand : %lu\n"
 
-#: misc/tune2fs.c:1179
+#: misc/tune2fs.c:1170
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
-msgid_plural ""
-"Setting multiple mount protection update interval to %lu seconds\n"
-msgstr[0] ""
-"Définition de l'intervale de mise à jour de la protection contre les "
-"montages multiples à %lu seconde\n"
-msgstr[1] ""
-"Définition de l'intervale de mise à jour de la protection contre les "
-"montages multiples à %lu secondes\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Définition de l'intervale de mise à jour de la protection contre les montages multiples à %lu seconde\n"
+msgstr[1] "Définition de l'intervale de mise à jour de la protection contre les montages multiples à %lu secondes\n"
 
-#: misc/tune2fs.c:1202
+#: misc/tune2fs.c:1193
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Paramètre « stride RAID » invalide : %s\n"
 
-#: misc/tune2fs.c:1217
+#: misc/tune2fs.c:1208
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Paramètre « stripe-width RAID » invalide : %s\n"
 
-#: misc/tune2fs.c:1232
+#: misc/tune2fs.c:1223
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Algorithme de hachage invalide : %s\n"
 
-#: misc/tune2fs.c:1238
+#: misc/tune2fs.c:1229
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Définition de l'algorithme de hachage par défaut à %s (%d)\n"
 
-#: misc/tune2fs.c:1257
+#: misc/tune2fs.c:1248
 #, c-format
 msgid ""
 "\n"
@@ -5331,33 +5183,31 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:1723
+#: misc/tune2fs.c:1714
 msgid "Failed to read inode bitmap\n"
 msgstr "Échec de lecture du bitmap d'i-noeuds\n"
 
-#: misc/tune2fs.c:1728
+#: misc/tune2fs.c:1719
 msgid "Failed to read block bitmap\n"
 msgstr "Échec de lecture du bitmap de bloc\n"
 
-#: misc/tune2fs.c:1745 resize/resize2fs.c:784
+#: misc/tune2fs.c:1736 resize/resize2fs.c:802
 msgid "blocks to be moved"
 msgstr "blocs à déplacer"
 
-#: misc/tune2fs.c:1748
+#: misc/tune2fs.c:1739
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr ""
-"N'a pu allouer de bitmap de blocs lors d'une augmentation de taille d'i-"
-"noeud \n"
+msgstr "N'a pu allouer de bitmap de blocs lors d'une augmentation de taille d'i-noeud \n"
 
-#: misc/tune2fs.c:1754
+#: misc/tune2fs.c:1745
 msgid "Not enough space to increase inode size \n"
 msgstr "Pas assez d'espace pour augmenter la taille d'i-noeud \n"
 
-#: misc/tune2fs.c:1759
+#: misc/tune2fs.c:1750
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "N'a pu reloger des blocs lors d'un changement de taille d'i-noeud \n"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1782
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -5365,16 +5215,16 @@ msgstr ""
 "Erreur lors du changement de la taille des i-noeuds.\n"
 "Exécutez e2undo pour défaire les changements du système de fichiers. \n"
 
-#: misc/tune2fs.c:1818
+#: misc/tune2fs.c:1809
 msgid "Couldn't allocate memory for tdb filename\n"
 msgstr "Impossible d'allouer de la mémoire pour le nom du fichier tdb\n"
 
-#: misc/tune2fs.c:1840
+#: misc/tune2fs.c:1831
 #, c-format
 msgid "while trying to delete %s"
 msgstr "lors de la tentative d'effacement de %s"
 
-#: misc/tune2fs.c:1850
+#: misc/tune2fs.c:1841
 #, c-format
 msgid ""
 "To undo the tune2fs operation please run the command\n"
@@ -5385,72 +5235,71 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/tune2fs.c:1919
+#: misc/tune2fs.c:1910
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
-"Le numéro magique du bloc MMP est incorrect. Essayer de le corriger en "
-"lançant:\n"
+"Le numéro magique du bloc MMP est incorrect. Essayer de le corriger en lançant:\n"
 "'e2fsck -f %s'\n"
 
-#: misc/tune2fs.c:1937
+#: misc/tune2fs.c:1928
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "La taille des i-noeuds est déjà %lu\n"
 
-#: misc/tune2fs.c:1943
+#: misc/tune2fs.c:1934
 #, c-format
 msgid "Shrinking the inode size is not supported\n"
 msgstr "La réduction de la taille des i-noeuds n'est pas supportée\n"
 
-#: misc/tune2fs.c:1990
+#: misc/tune2fs.c:1981
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Définition du nombre maximal de montages à %d\n"
 
-#: misc/tune2fs.c:1996
+#: misc/tune2fs.c:1987
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Définition du nombre courant de montages à %d\n"
 
-#: misc/tune2fs.c:2001
+#: misc/tune2fs.c:1992
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Définition du comportement en cas d'erreur à %d\n"
 
-#: misc/tune2fs.c:2006
+#: misc/tune2fs.c:1997
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Définition du gid des blocs réservés à %lu\n"
 
-#: misc/tune2fs.c:2011
+#: misc/tune2fs.c:2002
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "l'intervalle entre les vérifications est trop grand (%lu)"
 
-#: misc/tune2fs.c:2018
+#: misc/tune2fs.c:2009
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Définition de l'intervalle de vérification à %lu secondes\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2016
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Définition du pourcentage de blocs réservés à %g%% (%llu blocs)\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2022
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "le nombre de blocs réservés est trop grand (%llu)"
 
-#: misc/tune2fs.c:2038
+#: misc/tune2fs.c:2029
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Définition du nombre de blocs réservés à %llu\n"
 
-#: misc/tune2fs.c:2044
+#: misc/tune2fs.c:2035
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -5458,7 +5307,7 @@ msgstr ""
 "\n"
 "Le système de fichiers a déjà des superblocs creux.\n"
 
-#: misc/tune2fs.c:2051
+#: misc/tune2fs.c:2042
 #, c-format
 msgid ""
 "\n"
@@ -5467,7 +5316,7 @@ msgstr ""
 "\n"
 "Drapeau de superbloc creux activé. %s"
 
-#: misc/tune2fs.c:2056
+#: misc/tune2fs.c:2047
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -5475,41 +5324,37 @@ msgstr ""
 "\n"
 "La suppression du superflag creux n'est pas supportée.\n"
 
-#: misc/tune2fs.c:2064
+#: misc/tune2fs.c:2055
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr ""
 "Définition de la date de la dernière vérification du système de\n"
 "fichiers à %s\n"
 
-#: misc/tune2fs.c:2070
+#: misc/tune2fs.c:2061
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Définition de l'uid de blocs réservés à %lu\n"
 
-#: misc/tune2fs.c:2102
+#: misc/tune2fs.c:2093
 msgid "Error in using clear_mmp. It must be used with -f\n"
-msgstr ""
-"Erreur lors de l'utilisation de clear_mmp. Elle doit être utilisée avec -f\n"
+msgstr "Erreur lors de l'utilisation de clear_mmp. Elle doit être utilisée avec -f\n"
 
-#: misc/tune2fs.c:2120
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"La fonctionalité de quota ne peut être changée que lorsque le système de "
-"fichiers est démonté.\n"
+#: misc/tune2fs.c:2111
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "La fonctionalité de quota ne peut être changée que lorsque le système de fichiers est démonté.\n"
 
-#: misc/tune2fs.c:2153
+#: misc/tune2fs.c:2144
 msgid "Invalid UUID format\n"
 msgstr "Format UUID invalide\n"
 
-#: misc/tune2fs.c:2166
+#: misc/tune2fs.c:2157
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "La taille des i-noeuds ne peut être changée que lorsque le système\n"
 "de fichiers et démonté.\n"
 
-#: misc/tune2fs.c:2174
+#: misc/tune2fs.c:2165
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -5517,27 +5362,27 @@ msgstr ""
 "Changer la taille des i-noeuds n'est pas supporté pour les systèmes de\n"
 "fichiers avec la fonctionalité flex_bg activée.\n"
 
-#: misc/tune2fs.c:2187
+#: misc/tune2fs.c:2178
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Définition de la taille des i-noeuds à %lu\n"
 
-#: misc/tune2fs.c:2190
+#: misc/tune2fs.c:2181
 #, c-format
 msgid "Failed to change inode size\n"
 msgstr "N'a pu changer la taille d'i-noeud \n"
 
-#: misc/tune2fs.c:2201
+#: misc/tune2fs.c:2192
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Définition de la taille de « stride » à %d\n"
 
-#: misc/tune2fs.c:2206
+#: misc/tune2fs.c:2197
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Définition de la taille du « stripe width » à %d\n"
 
-#: misc/tune2fs.c:2213
+#: misc/tune2fs.c:2204
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Définition des options de montage étendues par défaut à « %s »\n"
@@ -5667,7 +5512,7 @@ msgstr ""
 #: misc/uuidd.c:48
 #, c-format
 msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\n"
-msgstr "Usage : %s [-d] [-p fichier-pid] [-s chemin-socket] [-T délai]\n"
+msgstr "Utilisation : %s [-d] [-p fichier-pid] [-s chemin-socket] [-T délai]\n"
 
 #: misc/uuidd.c:50
 #, c-format
@@ -5796,7 +5641,7 @@ msgstr "A tu
 #: misc/uuidgen.c:32
 #, c-format
 msgid "Usage: %s [-r] [-t]\n"
-msgstr "Usage : %s [-r] [-t]\n"
+msgstr "Utilisation : %s [-r] [-t]\n"
 
 #: resize/extent.c:202
 msgid "# Extent dump:\n"
@@ -5813,7 +5658,7 @@ msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Usage : %s [-d drapeaux_de_debug] [-f] [-F] [-M] [ -P] [-p] périphérique\n"
+"Utilisation : %s [-d drapeaux_de_debug] [-f] [-F] [-M] [ -P] [-p] périphérique\n"
 " [nouvelle_taille]\n"
 "\n"
 
@@ -5856,16 +5701,7 @@ msgstr "lors de l'ouverture de %s"
 msgid "while getting stat information for %s"
 msgstr "lors de la récupérartion de l'état de %s"
 
-#: resize/main.c:331
-#, c-format
-msgid ""
-"%s: The combination of flex_bg and\n"
-"\t!resize_inode features is not supported by resize2fs.\n"
-msgstr ""
-"%s : La combinaison des fonctionnalités\n"
-"\tflex_bg et !resize_inode n'est pas supportée par resize2fs.\n"
-
-#: resize/main.c:344 resize/main.c:452
+#: resize/main.c:325 resize/main.c:437
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -5874,30 +5710,30 @@ msgstr ""
 "SVP exécutez « e2fsck -f %s » d'abord.\n"
 "\n"
 
-#: resize/main.c:348
+#: resize/main.c:329
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Taille minimale estimée du système de fichiers : %llu\n"
 
-#: resize/main.c:384
+#: resize/main.c:365
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "taille d'i-noeud invalide - %s\n"
 
-#: resize/main.c:392
+#: resize/main.c:381
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "La nouvelle taille est trop grande pour être exprimée sur 32 bits\n"
 
-#: resize/main.c:404
+#: resize/main.c:389
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "La nouvelle taille est plus petite que le minimum (%llu)\n"
 
-#: resize/main.c:410
+#: resize/main.c:395
 msgid "Invalid stride length"
 msgstr "Longueur « stride » invalide"
 
-#: resize/main.c:434
+#: resize/main.c:419
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -5908,7 +5744,7 @@ msgstr ""
 "Vous avez demandé une nouvelle taille de %llu blocs.\n"
 "\n"
 
-#: resize/main.c:441
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The filesystem is already %llu blocks long.  Nothing to do!\n"
@@ -5917,19 +5753,26 @@ msgstr ""
 "Le système de fichiers a déjà %llu blocs. Rien à modifier !\n"
 "\n"
 
-#: resize/main.c:456
+#: resize/main.c:457
 #, c-format
-msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
 msgstr ""
-"En train de redimensionner le système de fichiers sur %s à %llu (%dk) "
-"blocs.\n"
+"%s : La combinaison des fonctionnalités\n"
+"\tflex_bg et !resize_inode n'est pas supportée par resize2fs.\n"
+
+#: resize/main.c:463
+#, c-format
+msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
+msgstr "En train de redimensionner le système de fichiers sur %s à %llu (%dk) blocs.\n"
 
-#: resize/main.c:465
+#: resize/main.c:472
 #, c-format
 msgid "while trying to resize %s"
 msgstr "lors de la tentative de changement de taille de %s"
 
-#: resize/main.c:468
+#: resize/main.c:475
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -5938,7 +5781,7 @@ msgstr ""
 "Veuillez lancer « e2fsck -fy %s » pour corriger le système de fichiers\n"
 "après l'opération de changement de taille avortée.\n"
 
-#: resize/main.c:474
+#: resize/main.c:481
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu blocks long.\n"
@@ -5947,7 +5790,7 @@ msgstr ""
 "Le système de fichiers %s a maintenant une taille de %llu blocs.\n"
 "\n"
 
-#: resize/main.c:489
+#: resize/main.c:496
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "lors de la troncature de %s"
@@ -5955,89 +5798,81 @@ msgstr "lors de la troncature de %s"
 #: resize/online.c:40
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
-msgstr ""
-"Le système de fichiers de %s est monté sur %s ; le changement de taille doit "
-"être effectué en ligne\n"
+msgstr "Le système de fichiers de %s est monté sur %s ; le changement de taille doit être effectué en ligne\n"
 
 #: resize/online.c:44
 msgid "On-line shrinking not supported"
 msgstr "La réduction en ligne n'est pas supportée"
 
-#: resize/online.c:63
+#: resize/online.c:69
 msgid "Filesystem does not support online resizing"
-msgstr ""
-"Le système de fichiers ne supporte pas le changement de taille en ligne"
+msgstr "Le système de fichiers ne supporte pas le changement de taille en ligne"
+
+#: resize/online.c:78
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr "Pas assez de blocs gdt réservés pour un changement de taille"
+
+#: resize/online.c:85
+msgid "Kernel does not support resizing a file system this large"
+msgstr "Le noyau ne sait pas retailler un système de fichiers d'une telle taille"
 
-#: resize/online.c:70
+#: resize/online.c:93
 #, c-format
 msgid "while trying to open mountpoint %s"
 msgstr "lors de la tentative d'ouverture du point de montage %s"
 
-#: resize/online.c:92 resize/online.c:116
+#: resize/online.c:115 resize/online.c:132
 msgid "Permission denied to resize filesystem"
 msgstr "Permission de redimensionner le système de fichiers refusée"
 
-#: resize/online.c:95 resize/online.c:122
+#: resize/online.c:118 resize/online.c:138
 msgid "While checking for on-line resizing support"
 msgstr "Lors de la vérification du support de changement de taille en ligne"
 
-#: resize/online.c:107
-msgid "Kernel does not support resizing a file system this large"
-msgstr ""
-"Le noyau ne sait pas retailler un système de fichiers d'une telle taille"
-
-#: resize/online.c:119
+#: resize/online.c:135
 msgid "Kernel does not support online resizing"
 msgstr "Le noyau ne supporte pas le changement de taille en ligne"
 
-#: resize/online.c:152
+#: resize/online.c:168
 #, c-format
 msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
-msgstr ""
-"En train d'effectuer un changement de taille en ligne de %s vers %llu (%dk) "
-"blocs.\n"
+msgstr "En train d'effectuer un changement de taille en ligne de %s vers %llu (%dk) blocs.\n"
 
-#: resize/online.c:162
+#: resize/online.c:178
 msgid "While trying to extend the last group"
 msgstr "Lors de la tentative d'étendre le dernier groupe"
 
-#: resize/online.c:216
+#: resize/online.c:232
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Lors de la tentative d'ajout du groupe numéro %d"
 
-#: resize/online.c:227
+#: resize/online.c:243
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"Le système de fichiers de %s est monté sur %s, et le changement de taille en "
-"ligne n'est pas supporté sur ce système.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Le système de fichiers de %s est monté sur %s, et le changement de taille en ligne n'est pas supporté sur ce système.\n"
 
-#: resize/resize2fs.c:348
+#: resize/resize2fs.c:346
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "le nombre d'i-noeuds (%llu) doit être plus petit que %u"
 
-#: resize/resize2fs.c:576
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "blocs réservés"
 
-#: resize/resize2fs.c:789
+#: resize/resize2fs.c:807
 msgid "meta-data blocks"
 msgstr "blocs de métadonnées"
 
-#: resize/resize2fs.c:1735
+#: resize/resize2fs.c:1753
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
-msgstr ""
-"Ne devrait jamais se produire : i-noeud de redimensionnement corrompu !\n"
+msgstr "Ne devrait jamais se produire : i-noeud de redimensionnement corrompu !\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.42.4"
-msgstr "Librairie EXT2FS version 1.42.2"
+msgid "EXT2FS Library version 1.42.6"
+msgstr "Librairie EXT2FS version 1.42.6"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -6085,8 +5920,7 @@ msgstr "Num
 
 #: lib/ext2fs/ext2_err.c:23
 msgid "Wrong magic number for directory block list structure"
-msgstr ""
-"Numéro magique invalide pour la structure de liste de bloc de répertoire"
+msgstr "Numéro magique invalide pour la structure de liste de bloc de répertoire"
 
 #: lib/ext2fs/ext2_err.c:24
 msgid "Wrong magic number for icount structure"
@@ -6122,8 +5956,7 @@ msgstr "R
 
 #: lib/ext2fs/ext2_err.c:32
 msgid "Attempt to write to filesystem opened read-only"
-msgstr ""
-"Tentative d'écriture dans un système de fichiers ouvert en lecture seule"
+msgstr "Tentative d'écriture dans un système de fichiers ouvert en lecture seule"
 
 #: lib/ext2fs/ext2_err.c:33
 msgid "Can't read group descriptors"
@@ -6139,13 +5972,11 @@ msgstr "Descripteur de groupe corrompu
 
 #: lib/ext2fs/ext2_err.c:36
 msgid "Corrupt group descriptor: bad block for inode bitmap"
-msgstr ""
-"Descripteur de groupe corrompu : bloc invalide pour le bitmap d'i-noeuds"
+msgstr "Descripteur de groupe corrompu : bloc invalide pour le bitmap d'i-noeuds"
 
 #: lib/ext2fs/ext2_err.c:37
 msgid "Corrupt group descriptor: bad block for inode table"
-msgstr ""
-"Descripteur de groupe corrompu : bloc invalide pour la table d'i-noeuds"
+msgstr "Descripteur de groupe corrompu : bloc invalide pour la table d'i-noeuds"
 
 #: lib/ext2fs/ext2_err.c:38
 msgid "Can't write an inode bitmap"
@@ -6185,15 +6016,11 @@ msgstr "R
 
 #: lib/ext2fs/ext2_err.c:47
 msgid "Attempt to read block from filesystem resulted in short read"
-msgstr ""
-"La tentative de lecture d'un bloc depuis le système de fichiers a produit "
-"une lecture tronquée"
+msgstr "La tentative de lecture d'un bloc depuis le système de fichiers a produit une lecture tronquée"
 
 #: lib/ext2fs/ext2_err.c:48
 msgid "Attempt to write block to filesystem resulted in short write"
-msgstr ""
-"La tentative d'écriture d'un block vers le système de fichiers a produit une "
-"écriture tronquée"
+msgstr "La tentative d'écriture d'un block vers le système de fichiers a produit une écriture tronquée"
 
 #: lib/ext2fs/ext2_err.c:49
 msgid "No free space in the directory"
@@ -6249,13 +6076,11 @@ msgstr "Num
 
 #: lib/ext2fs/ext2_err.c:62
 msgid "Attempt to fudge end of block bitmap past the real end"
-msgstr ""
-"Tentative de truquage de la fin du bitmap de blocs au-delà de la fin réelle"
+msgstr "Tentative de truquage de la fin du bitmap de blocs au-delà de la fin réelle"
 
 #: lib/ext2fs/ext2_err.c:63
 msgid "Attempt to fudge end of inode bitmap past the real end"
-msgstr ""
-"Tentative de truquage de la fin du bitmap d'i-noeuds au-delà de la fin réelle"
+msgstr "Tentative de truquage de la fin du bitmap d'i-noeuds au-delà de la fin réelle"
 
 #: lib/ext2fs/ext2_err.c:64
 msgid "Illegal indirect block found"
@@ -6319,9 +6144,7 @@ msgstr "Le syst
 
 #: lib/ext2fs/ext2_err.c:79
 msgid "Filesystem has unsupported read-only feature(s)"
-msgstr ""
-"Le système de fichiers a une(des) fonctionnalité(s) en lecture seule non "
-"supportées"
+msgstr "Le système de fichiers a une(des) fonctionnalité(s) en lecture seule non supportées"
 
 #: lib/ext2fs/ext2_err.c:80
 msgid "IO Channel failed to seek on read or write"
@@ -6477,9 +6300,7 @@ msgstr "La liste de blocs de r
 
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
-msgstr ""
-"Tentative de modification d'un plan de blocs via un itérateur de blocs en "
-"lecture seule"
+msgstr "Tentative de modification d'un plan de blocs via un itérateur de blocs en lecture seule"
 
 #: lib/ext2fs/ext2_err.c:119
 msgid "Wrong magic number for ext4 extent saved path"
@@ -6595,14 +6416,11 @@ msgstr "Le canal d'E/S ne supporte pas les num
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"Ne peut pas vérifier si le système de fichiers est monté à cause du manque "
-"de fichier mtab"
+msgstr "Ne peut pas vérifier si le système de fichiers est monté à cause du manque de fichier mtab"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
-msgstr ""
-"Le système de fichier est trop grand pour utiliser l'ancien style de bitmap"
+msgstr "Le système de fichier est trop grand pour utiliser l'ancien style de bitmap"
 
 #: lib/ext2fs/ext2_err.c:149
 msgid "MMP: invalid magic number"
@@ -6765,8 +6583,7 @@ msgstr "Valeur magique invalide dans profile_file_data_t"
 #~ "alors que le @B d'@i est en cours d'utilisation.\n"
 
 #~ msgid "@i %i should not have EOFBLOCKS_FL set (size %Is, lblk %r)\n"
-#~ msgstr ""
-#~ "L'@i %i ne devrait pas avoir EOFBLOCKS_FL défini (taille %Is, lblk %r)\n"
+#~ msgstr "L'@i %i ne devrait pas avoir EOFBLOCKS_FL défini (taille %Is, lblk %r)\n"
 
 #~ msgid "Couldn't determine journal size"
 #~ msgstr "N'a pu déterminer la taille du journal"
@@ -6784,8 +6601,7 @@ msgstr "Valeur magique invalide dans profile_file_data_t"
 #~ msgstr "<L'i-noeud des données ACL>"
 
 #~ msgid "short write (only %d bytes) for writing image header"
-#~ msgstr ""
-#~ "écriture écourtée (seulement %d octets) pour l'écriture de l'en-tête image"
+#~ msgstr "écriture écourtée (seulement %d octets) pour l'écriture de l'en-tête image"
 
 #~ msgid "invalid fragment size - %s"
 #~ msgstr "taille de fragment invalide - %s"
@@ -6803,23 +6619,19 @@ msgstr "Valeur magique invalide dans profile_file_data_t"
 #~ msgstr "Le journal N'A PAS été enlevé\n"
 
 #~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-#~ msgstr ""
-#~ "Le @S ne semble pas avoir le drapeau has_journal, mais a un %s de @j "
-#~ "ext3.\n"
+#~ msgstr "Le @S ne semble pas avoir le drapeau has_journal, mais a un %s de @j ext3.\n"
 
 #~ msgid "Error while deleting extent: %m\n"
 #~ msgstr "Erreur lors de la suppression de l'extent : %m\n"
 
 #~ msgid "Recreate journal to make the filesystem ext3 again?\n"
-#~ msgstr ""
-#~ "Recréer le journal pour rendre le système de fichiers ext3 de nouveau ?\n"
+#~ msgstr "Recréer le journal pour rendre le système de fichiers ext3 de nouveau ?\n"
 
 #~ msgid "bad block size - %s"
 #~ msgstr "taille des blocs défectueux - %s"
 
 #~ msgid "while retrying to write block bitmaps for %s"
-#~ msgstr ""
-#~ "lors d'une nouvelle tentative d'écriture des bitmaps de blocs pour %s"
+#~ msgstr "lors d'une nouvelle tentative d'écriture des bitmaps de blocs pour %s"
 
 #~ msgid "%s failed for %s: %s\n"
 #~ msgstr "%s a échoué pour %s : %s\n"
@@ -6852,17 +6664,14 @@ msgstr "Valeur magique invalide dans profile_file_data_t"
 #~ msgstr "lors de l'écriture de la table d'i-noeuds (groupe %d)"
 
 #~ msgid "Pass 0: Doing byte-swap of filesystem\n"
-#~ msgstr ""
-#~ "Passe 0 : traitement de l'échange octet par octet du système de fichiers\n"
+#~ msgstr "Passe 0 : traitement de l'échange octet par octet du système de fichiers\n"
 
 #~ msgid ""
 #~ "%s: the filesystem must be freshly checked using fsck\n"
 #~ "and not mounted before trying to byte-swap it.\n"
 #~ msgstr ""
-#~ "%s : le système de fichiers doit avoir été récemment vérifié en "
-#~ "utilisant\n"
-#~ "fsck et ne doit pas avoir été monté avant d'essayer un échange par octet "
-#~ "de\n"
+#~ "%s : le système de fichiers doit avoir été récemment vérifié en utilisant\n"
+#~ "fsck et ne doit pas avoir été monté avant d'essayer un échange par octet de\n"
 #~ "celui-ci.\n"
 
 #~ msgid "Byte swap"
@@ -6874,13 +6683,10 @@ msgstr "Valeur magique invalide dans profile_file_data_t"
 #~ "cette version d'e2fsck\n"
 
 #~ msgid "Incompatible options not allowed when byte-swapping.\n"
-#~ msgstr ""
-#~ "Les options incompatibles ne sont pas autorisées lors de l'échanges "
-#~ "d'octets.\n"
+#~ msgstr "Les options incompatibles ne sont pas autorisées lors de l'échanges d'octets.\n"
 
 #~ msgid "%s: Filesystem byte order already normalized.\n"
-#~ msgstr ""
-#~ "%s : l'ordre des octets du système de fichiers a déjà été normalisé.\n"
+#~ msgstr "%s : l'ordre des octets du système de fichiers a déjà été normalisé.\n"
 
 #~ msgid "invalid starting block - %s"
 #~ msgstr "bloc de départ invalide - %s"
@@ -6909,8 +6715,7 @@ msgstr "Valeur magique invalide dans profile_file_data_t"
 
 #~ msgid "Warning: %d-byte inodes not usable on older systems\n"
 #~ msgstr ""
-#~ "Avertissement : les i-noeuds de %d octets ne sont pas utilisables sur "
-#~ "les\n"
+#~ "Avertissement : les i-noeuds de %d octets ne sont pas utilisables sur les\n"
 #~ "anciens systèmes\n"
 
 #~ msgid "invalid blocks range: %lu-%lu"
@@ -6952,16 +6757,13 @@ msgstr "Valeur magique invalide dans profile_file_data_t"
 #~ "\tea_ver=<ea_version (1 or 2)\n"
 #~ "\n"
 #~ msgstr ""
-#~ "Les options étendues sont séparées par des virgules, et peuvent prendre "
-#~ "un argument\n"
-#~ "lequel peut être initialisé par un signe d'égalité ('='). Les options "
-#~ "RAID valides sont:\n"
+#~ "Les options étendues sont séparées par des virgules, et peuvent prendre un argument\n"
+#~ "lequel peut être initialisé par un signe d'égalité ('='). Les options RAID valides sont:\n"
 #~ "\tea_ver=<ea_version (1 or 2)\n"
 #~ "\n"
 
 #~ msgid "Usage:  findsuper device [skipbytes [startkb]]\n"
-#~ msgstr ""
-#~ "Usage :  findsuper périphérique [octets_à_escamoter [début_en_Ko]]\n"
+#~ msgstr "Usage :  findsuper périphérique [octets_à_escamoter [début_en_Ko]]\n"
 
 #~ msgid "skipbytes should be a number, not %s\n"
 #~ msgstr "octets à escamoter doit être un nombre, non pas %s\n"
@@ -6999,17 +6801,14 @@ msgstr "Valeur magique invalide dans profile_file_data_t"
 #~ msgstr ""
 #~ "Usage : %s <périph1> <périph2> <périph3>\n"
 #~ "\n"
-#~ "Ce programme affiche les informations des partitions pour un ensemble de "
-#~ "périphériques\n"
+#~ "Ce programme affiche les informations des partitions pour un ensemble de périphériques\n"
 #~ "Une façon usuelle d'utiliser ce programme est:\n"
 #~ "\n"
 #~ "\t%s /dev/hda?\n"
 #~ "\n"
 
 #~ msgid "Forcibly clearing HTREE flag on @i %d (%q).  (Beta test code)\n"
-#~ msgstr ""
-#~ "Forcer la mise à zéro du drapeau HTREE sur l'@i %d (%q). (Code en phase "
-#~ "beta test)\n"
+#~ msgstr "Forcer la mise à zéro du drapeau HTREE sur l'@i %d (%q). (Code en phase beta test)\n"
 
 #~ msgid "(unknown os)"
 #~ msgstr "(système d'exploitation inconnu)"
index 0ed6821..7cb07a2 100644 (file)
Binary files a/po/nl.gmo and b/po/nl.gmo differ
index 652053d..3125bbc 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -2,10 +2,9 @@
 # Copyright (C) 2012 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
 #
-# Kees wilde slager worden.
-# "Dat lijkt me geen goed idee",
-# zei z'n vader,
-# "dan word je een worstkees."
+# "Ze hield me staande en zei dat mijn opstel
+# haar 'vreselijk was tegengevallen'.
+# Ik was meteen in de zevende hemel."
 #
 # Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2008, 2010, 2011, 2012.
 #
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.42.2\n"
+"Project-Id-Version: e2fsprogs-1.42.6\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2012-06-12 14:40-0400\n"
-"PO-Revision-Date: 2012-04-10 21:14+0200\n"
+"POT-Creation-Date: 2012-09-21 12:16-0400\n"
+"PO-Revision-Date: 2012-12-22 18:21+0100\n"
 "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
@@ -82,7 +81,7 @@ msgstr ""
 "X-Generator: Lokalize 1.0\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:176
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:177
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Slecht blok %u ligt buiten bereik; genegeerd.\n"
@@ -96,10 +95,10 @@ msgid "while reading the bad blocks inode"
 msgstr "tijdens lezen van de slechteblokken-inode"
 
 #: e2fsck/badblocks.c:72 e2fsck/iscan.c:110 e2fsck/scantest.c:107
-#: e2fsck/unix.c:1298 e2fsck/unix.c:1386 misc/badblocks.c:1214
+#: e2fsck/unix.c:1334 e2fsck/unix.c:1422 misc/badblocks.c:1214
 #: misc/badblocks.c:1222 misc/badblocks.c:1236 misc/badblocks.c:1248
 #: misc/dumpe2fs.c:588 misc/e2image.c:1189 misc/e2image.c:1307
-#: misc/e2image.c:1320 misc/mke2fs.c:192 misc/tune2fs.c:1907 resize/main.c:303
+#: misc/e2image.c:1320 misc/mke2fs.c:193 misc/tune2fs.c:1898 resize/main.c:303
 #, c-format
 msgid "while trying to open %s"
 msgstr "tijdens openen van %s"
@@ -109,7 +108,7 @@ msgstr "tijdens openen van %s"
 msgid "while trying popen '%s'"
 msgstr "tijdens een popen() van %s"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:199
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:200
 msgid "while reading in list of bad blocks from file"
 msgstr "tijdens lezen van lijst van slechte blokken uit bestand"
 
@@ -120,8 +119,7 @@ msgstr "tijdens bijwerken van de inode van een slecht blok"
 #: e2fsck/badblocks.c:131
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Waarschuwing: ongeldig blok %u gevonden in inode van slecht blok.  Gewist.\n"
+msgstr "Waarschuwing: ongeldig blok %u gevonden in inode van slecht blok.  Gewist.\n"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -187,20 +185,19 @@ msgstr "Gebruik:  %s schijfnaam\n"
 #: e2fsck/flushb.c:64
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
-msgstr ""
-"ioctl(BLKFLSBUF) wordt niet ondersteund!  Kan buffers niet leegmaken.\n"
+msgstr "ioctl(BLKFLSBUF) wordt niet ondersteund!  Kan buffers niet leegmaken.\n"
 
 #: e2fsck/iscan.c:44
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Gebruik:  %s [-F] [-I inodebufferblokken] apparaat\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:930
+#: e2fsck/iscan.c:81 e2fsck/unix.c:963
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "tijdens openen van %s om deze leeg te maken"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:936 resize/main.c:276
+#: e2fsck/iscan.c:86 e2fsck/unix.c:969 resize/main.c:276
 #, c-format
 msgid "while trying to flush %s"
 msgstr "tijdens leegmaken van %s"
@@ -918,16 +915,12 @@ msgstr "Het externe journal ondersteunt dit bestandssysteem niet.\n"
 #: e2fsck/problem.c:213
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
-"format.\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
-"Het superblok van het journal is van een onbekend en niet-ondersteund type "
-"%N.\n"
-"Vermoedelijk gebruikt u een ouder 'e2fsck'-programma dat deze journal-"
-"indeling\n"
-"niet ondersteunt.  Het kan ook zijn dat het journal-superblok beschadigd "
-"is.\n"
+"Het superblok van het journal is van een onbekend en niet-ondersteund type %N.\n"
+"Vermoedelijk gebruikt u een ouder 'e2fsck'-programma dat deze journal-indeling\n"
+"niet ondersteunt.  Het kan ook zijn dat het journal-superblok beschadigd is.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:221
@@ -938,8 +931,7 @@ msgstr "Het superblok van het journal is beschadigd.\n"
 #: e2fsck/problem.c:226
 #, c-format
 msgid "@S has_@j flag is clear, but a @j %s is present.\n"
-msgstr ""
-"Journal-vlag in superblok is niet gezet, maar er is wel een journal %s.\n"
+msgstr "Journal-vlag in superblok is niet gezet, maar er is wel een journal %s.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:231
@@ -949,8 +941,7 @@ msgstr "Reddingsvlag in superblok is gezet, maar er is geen journal.\n"
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:236
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
-msgstr ""
-"Reddingsvlag in superblok is niet gezet, maar het journal bevat gegevens.\n"
+msgstr "Reddingsvlag in superblok is niet gezet, maar het journal bevat gegevens.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:241
@@ -992,14 +983,12 @@ msgstr "Ongeldige inode %i in lijst van verweesde inodes.\n"
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:276
 msgid "@j @S has an unknown read-only feature flag set.\n"
-msgstr ""
-"Journal-superblok heeft een onbekende alleen-lezen-functievlag gezet.\n"
+msgstr "Journal-superblok heeft een onbekende alleen-lezen-functievlag gezet.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:281
 msgid "@j @S has an unknown incompatible feature flag set.\n"
-msgstr ""
-"Journal-superblok heeft een onbekende en incompatibele functievlag gezet.\n"
+msgstr "Journal-superblok heeft een onbekende en incompatibele functievlag gezet.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
 #: e2fsck/problem.c:286
@@ -1076,9 +1065,7 @@ msgstr ""
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:328
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"Functie 'resize_inode' is uitgeschakeld, maar de 'resize'-inode is niet "
-"nul.  "
+msgstr "Functie 'resize_inode' is uitgeschakeld, maar de 'resize'-inode is niet nul.  "
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:333
@@ -1124,21 +1111,18 @@ msgstr ""
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
 #: e2fsck/problem.c:357
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
-msgstr ""
-"Van groepsbeschrijver %g is de controlesom %04x, zou %04y moeten zijn.  "
+msgstr "Van groepsbeschrijver %g is de controlesom %04x, zou %04y moeten zijn.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
 #: e2fsck/problem.c:362
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
-msgstr ""
-"Groepsbeschrijver %g is gemarkeerd als ongeïnitialiseerd zonder functies.\n"
+msgstr "Groepsbeschrijver %g is gemarkeerd als ongeïnitialiseerd zonder functies.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
 #: e2fsck/problem.c:367
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
-msgstr ""
-"Groepsbeschrijver %g heeft een ongeldig aantal (%b) ongebruikte inodes.  "
+msgstr "Groepsbeschrijver %g heeft een ongeldig aantal (%b) ongebruikte inodes.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
 #: e2fsck/problem.c:372
@@ -1160,12 +1144,10 @@ msgstr "De functievlag 'test_fs' is gezet (en ext4 is beschikbaar).  "
 #: e2fsck/problem.c:386
 msgid ""
 "@S last mount time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set)  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)  "
 msgstr ""
 "Laatste aankoppelingstijd ligt volgens het superblok in de toekomst.\n"
-"    (Maar minder dan een dag; vermoedelijk is de hardwareklok onjuist "
-"ingesteld.)  "
+"    (Maar minder dan een dag; vermoedelijk is de hardwareklok onjuist ingesteld.)  "
 
 #. @-expanded: superblock last write time is in the future.\n
 #. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
@@ -1173,12 +1155,10 @@ msgstr ""
 #: e2fsck/problem.c:392
 msgid ""
 "@S last write time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set).  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set).  "
 msgstr ""
 "Laatste schrijftijd ligt volgens het superblok in de toekomst.\n"
-"    (Maar minder dan een dag; vermoedelijk is de hardwareklok onjuist "
-"ingesteld.)  "
+"    (Maar minder dan een dag; vermoedelijk is de hardwareklok onjuist ingesteld.)  "
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
 #: e2fsck/problem.c:398
@@ -1197,11 +1177,8 @@ msgstr "Het aantal vrije blokken is op %c gezet (was %b)\n"
 
 #. @-expanded: Making quota inode %i (%Q) hidden.\n
 #: e2fsck/problem.c:413
-#, fuzzy
 msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"De quota-inodes worden verborgen.\n"
-"\n"
+msgstr "De quota-inode %i (%Q) wordt verborgen.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
 #: e2fsck/problem.c:418
@@ -1236,9 +1213,7 @@ msgstr "De hoofd-inode is geen map.  "
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
 #: e2fsck/problem.c:449
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr ""
-"De verwijderingstijd van de hoofd-inode is niet nul (waarschijnlijk "
-"veroorzaakt door een oude mke2fs).  "
+msgstr "De verwijderingstijd van de hoofd-inode is niet nul (waarschijnlijk veroorzaakt door een oude mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
 #: e2fsck/problem.c:454
@@ -1266,14 +1241,12 @@ msgstr "Inode %i is een map met lengte nul.  "
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:474
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr ""
-"De blok-bitkaart van groep %g botst bij %b met een bestandssysteemblok.\n"
+msgstr "De blok-bitkaart van groep %g botst bij %b met een bestandssysteemblok.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:479
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr ""
-"De inode-bitkaart van groep %g botst bij %b met een bestandssysteemblok.\n"
+msgstr "De inode-bitkaart van groep %g botst bij %b met een bestandssysteemblok.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:484
@@ -1340,9 +1313,7 @@ msgstr "Een dubbel of slecht blok is in gebruik!\n"
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
 #: e2fsck/problem.c:544
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr ""
-"Slecht blok %b is in gebruik als indirect blok voor de slechteblokken-"
-"inode.  "
+msgstr "Slecht blok %b is in gebruik als indirect blok voor de slechteblokken-inode.  "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
@@ -1368,8 +1339,7 @@ msgid ""
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
 "\n"
-"Als het blok echt slecht is, kan het bestandssysteem niet gerepareerd "
-"worden.\n"
+"Als het blok echt slecht is, kan het bestandssysteem niet gerepareerd worden.\n"
 
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
@@ -1392,8 +1362,7 @@ msgstr "Het primaire superblok (%b) staat in de lijst van slechte blokken.\n"
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
 #: e2fsck/problem.c:572
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"Een groepsbeschrijversblok (%b) staat in de lijst van slechte blokken.\n"
+msgstr "Een groepsbeschrijversblok (%b) staat in de lijst van slechte blokken.\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
 #: e2fsck/problem.c:578
@@ -1403,21 +1372,17 @@ msgstr "Waarschuwing: groep %g heeft een slecht superblok (%b).\n"
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
 #: e2fsck/problem.c:583
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr ""
-"Waarschuwing: groep %g bevat een slecht blok (%b) in de groepsbeschrijvers.\n"
+msgstr "Waarschuwing: groep %g bevat een slecht blok (%b) in de groepsbeschrijvers.\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
 #: e2fsck/problem.c:589
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Interne fout?: blok %b is zonder reden geclaimd in process_bad_block().\n"
+msgstr "Interne fout?: blok %b is zonder reden geclaimd in process_bad_block().\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
 #: e2fsck/problem.c:595
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
-msgstr ""
-"Fout tijdens reserveren van %N aaneengsloten blokken in groep %g voor %s: "
-"%m\n"
+msgstr "Fout tijdens reserveren van %N aaneengsloten blokken in groep %g voor %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
 #: e2fsck/problem.c:600
@@ -1489,9 +1454,7 @@ msgstr "Fout tijdens opslaan van inodetal (inode=%i, aantal=%N): %m\n"
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
 #: e2fsck/problem.c:660
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Fout tijdens opslaan van mapblokkeninformatie (inode=%i, blok=%b, aantal="
-"%N): %m\n"
+msgstr "Fout tijdens opslaan van mapblokkeninformatie (inode=%i, blok=%b, aantal=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
 #: e2fsck/problem.c:666
@@ -1520,9 +1483,7 @@ msgstr ""
 #: e2fsck/problem.c:685
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
-msgstr ""
-"Inode %i heeft de compressievlag gezet op een bestandssysteem zonder "
-"compressie-ondersteuning.  "
+msgstr "Inode %i heeft de compressievlag gezet op een bestandssysteem zonder compressie-ondersteuning.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
 #: e2fsck/problem.c:690
@@ -1549,9 +1510,7 @@ msgstr "Inode %i was deel van de lijst van verweesde inodes.  "
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
 #: e2fsck/problem.c:716
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr ""
-"Inodes gevonden die deel waren van een beschadigde lijst van verweesde "
-"inodes.  "
+msgstr "Inodes gevonden die deel waren van een beschadigde lijst van verweesde inodes.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
 #: e2fsck/problem.c:721
@@ -1561,8 +1520,7 @@ msgstr "Fout tijdens reserveren van 'refcount'-structuur (%N): %m\n"
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
 #: e2fsck/problem.c:726
 msgid "Error reading @a @b %b for @i %i.  "
-msgstr ""
-"Fout tijdens lezen van blok %b met uitgebreide kenmerken voor inode %i.  "
+msgstr "Fout tijdens lezen van blok %b met uitgebreide kenmerken voor inode %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
 #: e2fsck/problem.c:731
@@ -1577,9 +1535,7 @@ msgstr "Fout tijdens lezen van blok %b met uitgebreide kenmerken: %m  "
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
 #: e2fsck/problem.c:741
 msgid "@a @b %b has reference count %r, @s %N.  "
-msgstr ""
-"Blok %b met uitgebreide kenmerken heeft verwijzingstal %r, zou %N moeten "
-"zijn.  "
+msgstr "Blok %b met uitgebreide kenmerken heeft verwijzingstal %r, zou %N moeten zijn.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
 #: e2fsck/problem.c:746
@@ -1599,8 +1555,7 @@ msgstr "Fout tijdens reserveren van blok %b met uitgebreide kenmerken.  "
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
 #: e2fsck/problem.c:761
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr ""
-"Blok %b met uitgebreide kenmerken is beschadigd (reserveringsoverlap).  "
+msgstr "Blok %b met uitgebreide kenmerken is beschadigd (reserveringsoverlap).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
 #: e2fsck/problem.c:766
@@ -1635,9 +1590,7 @@ msgstr "Blok %B (%b) maakt symbolische koppeling te groot.  "
 #: e2fsck/problem.c:795
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"Inode %i heeft de 'INDEX_FL'-vlag gezet op een bestandssysteem zonder "
-"'htree'-ondersteuning.\n"
+msgstr "Inode %i heeft de 'INDEX_FL'-vlag gezet op een bestandssysteem zonder 'htree'-ondersteuning.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
 #: e2fsck/problem.c:800
@@ -1654,8 +1607,7 @@ msgstr "Inode %i van 'htree'-map heeft een ongeldige wortelknoop.\n"
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
 #: e2fsck/problem.c:810
 msgid "@h %i has an unsupported hash version (%N)\n"
-msgstr ""
-"Inode %i van 'htree'-map gebruikt een niet-ondersteunde hash-versie (%N).\n"
+msgstr "Inode %i van 'htree'-map gebruikt een niet-ondersteunde hash-versie (%N).\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
 #: e2fsck/problem.c:815
@@ -1692,39 +1644,32 @@ msgstr "Inode %i heeft een ongeldige extra grootte (%IS).\n"
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
 #: e2fsck/problem.c:841
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
-msgstr ""
-"Een uitgebreid kenmerk in inode %i heeft een ongeldige naamlengte (%N).\n"
+msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige naamlengte (%N).\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
 #: e2fsck/problem.c:846
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
-msgstr ""
-"Een uitgebreid kenmerk in inode %i heeft een ongeldige waardeoffset (%N).\n"
+msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige waardeoffset (%N).\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
 #: e2fsck/problem.c:851
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr ""
-"Een uitgebreid kenmerk in inode %i heeft een ongeldig waardeblok (%N, moet 0 "
-"zijn).\n"
+msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldig waardeblok (%N, moet 0 zijn).\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
 #: e2fsck/problem.c:856
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr ""
-"Een uitgebreid kenmerk in inode %i heeft een ongeldige waardegrootte (%N).\n"
+msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige waardegrootte (%N).\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
 #: e2fsck/problem.c:861
 msgid "@a in @i %i has a hash (%N) which is @n\n"
-msgstr ""
-"Een uitgebreid kenmerk in inode %i heeft een ongeldige hash-waarde (%N).\n"
+msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige hash-waarde (%N).\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
 #: e2fsck/problem.c:866
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
-msgstr ""
-"Inode %i is gemarkeerd als een %It, maar lijkt feitelijk een map te zijn.\n"
+msgstr "Inode %i is gemarkeerd als een %It, maar lijkt feitelijk een map te zijn.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
 #: e2fsck/problem.c:871
@@ -1766,24 +1711,19 @@ msgstr ""
 #: e2fsck/problem.c:892
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"Inode %i heeft de 'EXTENTS_FL'-vlag gezet op een bestandssysteem zonder "
-"'htree'-ondersteuning.\n"
+msgstr "Inode %i heeft de 'EXTENTS_FL'-vlag gezet op een bestandssysteem zonder 'htree'-ondersteuning.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
 #: e2fsck/problem.c:897
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"Inode %i heeft extent-opmaak, maar superblok heeft EXTENTS-functievlag niet "
-"gezet.\n"
+msgstr "Inode %i heeft extent-opmaak, maar superblok heeft EXTENTS-functievlag niet gezet.\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
 #: e2fsck/problem.c:902
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
-msgstr ""
-"Inode %i heeft extent-opmaak, maar heeft 'EXTENT_FL'-vlag niet gezet.\n"
+msgstr "Inode %i heeft extent-opmaak, maar heeft 'EXTENT_FL'-vlag niet gezet.\n"
 
 #: e2fsck/problem.c:907
 #, c-format
@@ -1881,15 +1821,12 @@ msgstr "Fout tijdens langslopen van blokken van inode %i (%s): %m\n"
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
 #: e2fsck/problem.c:989 e2fsck/problem.c:1304
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr ""
-"Fout tijdens bijstellen van verwijzingstal van blok %b met uitgebreide "
-"kenmerken (inode %i): %m\n"
+msgstr "Fout tijdens bijstellen van verwijzingstal van blok %b met uitgebreide kenmerken (inode %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
 #: e2fsck/problem.c:994
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
-msgstr ""
-"Stap 1C: Doorzoeken van mappen naar inodes met meervoudig-geclaimde blokken\n"
+msgstr "Stap 1C: Doorzoeken van mappen naar inodes met meervoudig-geclaimde blokken\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
 #: e2fsck/problem.c:1000
@@ -2179,9 +2116,7 @@ msgstr "Blok van uitgebreide kenmerken @F is ongeldig (%If).\n"
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
 #: e2fsck/problem.c:1270
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"Bestandssysteem bevat grote bestanden, maar heeft in het superblok niet de "
-"'large-file'-vlag gezet.\n"
+msgstr "Bestandssysteem bevat grote bestanden, maar heeft in het superblok niet de 'large-file'-vlag gezet.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
 #: e2fsck/problem.c:1275
@@ -2196,14 +2131,12 @@ msgstr "Probleem in 'htree'-map-inode %d: naar %B wordt twee keer verwezen.\n"
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
 #: e2fsck/problem.c:1285
 msgid "@p @h %d: %B has bad min hash\n"
-msgstr ""
-"Probleem in 'htree'-map-inode %d: %B heeft een ongeldige minimum hash.\n"
+msgstr "Probleem in 'htree'-map-inode %d: %B heeft een ongeldige minimum hash.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad max hash\n
 #: e2fsck/problem.c:1290
 msgid "@p @h %d: %B has bad max hash\n"
-msgstr ""
-"Probleem in 'htree'-map-inode %d: %B heeft een ongeldige maximum hash.\n"
+msgstr "Probleem in 'htree'-map-inode %d: %B heeft een ongeldige maximum hash.\n"
 
 #. @-expanded: invalid HTREE directory inode %d (%q).  
 #: e2fsck/problem.c:1295
@@ -2224,8 +2157,7 @@ msgstr "Probleem in 'htree'-map-inode %d: de wortelknoop is ongeldig.\n"
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
 #: e2fsck/problem.c:1314
 msgid "@p @h %d: %B has @n limit (%N)\n"
-msgstr ""
-"Probleem in 'htree'-map-inode %d: %B heeft een ongeldige limiet (%N).\n"
+msgstr "Probleem in 'htree'-map-inode %d: %B heeft een ongeldige limiet (%N).\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
 #: e2fsck/problem.c:1319
@@ -2235,14 +2167,12 @@ msgstr "Probleem in 'htree'-map-inode %d: %B heeft een ongeldig aantal (%N).\n"
 #. @-expanded: problem in HTREE directory inode %d: %B has an unordered hash table\n
 #: e2fsck/problem.c:1324
 msgid "@p @h %d: %B has an unordered hash table\n"
-msgstr ""
-"Probleem in 'htree'-map-inode %d: %B heeft een ongeordende hash-tabel.\n"
+msgstr "Probleem in 'htree'-map-inode %d: %B heeft een ongeordende hash-tabel.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid depth (%N)\n
 #: e2fsck/problem.c:1329
 msgid "@p @h %d: %B has @n depth (%N)\n"
-msgstr ""
-"Probleem in 'htree'-map-inode %d: %B heeft een ongeldige diepte (%N).\n"
+msgstr "Probleem in 'htree'-map-inode %d: %B heeft een ongeldige diepte (%N).\n"
 
 #. @-expanded: Duplicate entry '%Dn' in %p (%i) found.  
 #: e2fsck/problem.c:1334
@@ -2286,15 +2216,12 @@ msgstr "Onverwacht blok in 'htree'-map-inode %d (%q)\n"
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
 #: e2fsck/problem.c:1358
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
-msgstr ""
-"@E verwijst naar inode %Di in groep %g die gemarkeerd is als _INODE_UNINIT.\n"
+msgstr "@E verwijst naar inode %Di in groep %g die gemarkeerd is als _INODE_UNINIT.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
 #: e2fsck/problem.c:1363
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr ""
-"@E verwijst naar inode %Di in het gebied met ongebruikte inodes van groep "
-"%g.\n"
+msgstr "@E verwijst naar inode %Di in het gebied met ongebruikte inodes van groep %g.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1368
@@ -2335,8 +2262,7 @@ msgstr "'..' in %Q (%i) is %P (%j), moet %q (%d) zijn.\n"
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
 #: e2fsck/problem.c:1405
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr ""
-"Beschadigde of niet-bestaande /lost+found.  Kan inode niet herverbinden.\n"
+msgstr "Beschadigde of niet-bestaande /lost+found.  Kan inode niet herverbinden.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
 #: e2fsck/problem.c:1410
@@ -2377,8 +2303,7 @@ msgstr "ext2fs_new_dir_block(): %m tijdens maken van nieuw mapblok\n"
 #: e2fsck/problem.c:1440
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr ""
-"ext2fs_write_dir_block(): %m tijdens maken van mapblok voor /lost+found\n"
+msgstr "ext2fs_write_dir_block(): %m tijdens maken van mapblok voor /lost+found\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
 #: e2fsck/problem.c:1445
@@ -2405,8 +2330,7 @@ msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
-"Kan ouderverwijzing van inode %i niet herstellen: kan de oudermap niet "
-"vinden.\n"
+"Kan ouderverwijzing van inode %i niet herstellen: kan de oudermap niet vinden.\n"
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
@@ -2543,12 +2467,8 @@ msgstr "Verkeerd aantal blokken (%b, geteld=%c).\n"
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 #: e2fsck/problem.c:1638
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"PROGRAMMAFOUT in e2fsck: in bestandssysteem %N komen de bitkaart-eindpunten "
-"(%b, %c) niet overeen met de berekende eindpunten (%i, %j)\n"
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "PROGRAMMAFOUT in e2fsck: in bestandssysteem %N komen de bitkaart-eindpunten (%b, %c) niet overeen met de berekende eindpunten (%i, %j)\n"
 
 #: e2fsck/problem.c:1644
 msgid "Internal error: fudging end of bitmap (%N)\n"
@@ -2570,16 +2490,13 @@ msgstr "Fout tijdens kopiëren naar vervangende blok-bitkaart: %m\n"
 #: e2fsck/problem.c:1679
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
-msgstr ""
-"Blok(ken) van groep %g in gebruik, maar groep is gemarkeerd als "
-"BLOCK_UNINIT\n"
+msgstr "Blok(ken) van groep %g in gebruik, maar groep is gemarkeerd als BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
 #: e2fsck/problem.c:1684
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
-msgstr ""
-"Inode(s) van groep %g in gebruik, maar groep is gemarkeerd als INODE_UNINIT\n"
+msgstr "Inode(s) van groep %g in gebruik, maar groep is gemarkeerd als INODE_UNINIT\n"
 
 #. @-expanded: Recreate journal
 #: e2fsck/problem.c:1691
@@ -2588,7 +2505,7 @@ msgstr "Journal heraanmaken"
 
 #: e2fsck/problem.c:1696
 msgid "Update quota info for quota type %N"
-msgstr ""
+msgstr "Quota-informatie bijwerken voor quotatype %N"
 
 #: e2fsck/problem.c:1815
 #, c-format
@@ -2657,8 +2574,7 @@ msgid ""
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock "
-"list\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
@@ -2683,172 +2599,168 @@ msgstr ""
 " -b superblok        Dit superblok gebruiken.\n"
 " -B blokgrootte      Deze blokgrootte gebruiken bij zoeken naar superblok.\n"
 " -j extern_journal   Dit externe journal gebruiken.\n"
-" -l slechte_blokkenbestand   Deze lijst aan de slechte_blokkenlijst "
-"toevoegen.\n"
+" -l slechte_blokkenbestand   Deze lijst aan de slechte_blokkenlijst toevoegen.\n"
 " -L slechte_blokkenbestand   Deze slechte_blokkenlijst gebruiken.\n"
 
-#: e2fsck/unix.c:130
+#: e2fsck/unix.c:131
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
-msgstr ""
-"%s: %u/%u bestanden (%0d.%d%% niet-aaneengesloten), %llu/%llu blokken\n"
+msgstr "%s: %u/%u bestanden (%0d.%d%% niet-aaneengesloten), %llu/%llu blokken\n"
 
-#: e2fsck/unix.c:137
+#: e2fsck/unix.c:157
 #, c-format
 msgid ""
 "\n"
-"%8u inode used (%2.2f%%)\n"
+"%12u inode used (%2.2f%%, out of %u)\n"
 msgid_plural ""
 "\n"
-"%8u inodes used (%2.2f%%)\n"
+"%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
 "\n"
-"%8u inode gebruikt (%2.2f%%)\n"
+"%12u inode gebruikt (%2.2f%% van %u)\n"
 msgstr[1] ""
 "\n"
-"%8u inodes gebruikt (%2.2f%%)\n"
+"%12u inodes gebruikt (%2.2f%% van %u)\n"
 
-#: e2fsck/unix.c:141
+#: e2fsck/unix.c:161
 #, c-format
-msgid "%8u non-contiguous file (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous files (%0d.%d%%)\n"
-msgstr[0] "%8u niet-aaneengesloten bestand (%0d.%d%%)\n"
-msgstr[1] "%8u niet-aaneengesloten bestanden (%0d.%d%%)\n"
+msgid "%12u non-contiguous file (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
+msgstr[0] "%12u niet-aaneengesloten bestand (%0d.%d%%)\n"
+msgstr[1] "%12u niet-aaneengesloten bestanden (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:146
+#: e2fsck/unix.c:166
 #, c-format
-msgid "%8u non-contiguous directory (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous directories (%0d.%d%%)\n"
-msgstr[0] "%8u niet-aaneengesloten map (%0d.%d%%)\n"
-msgstr[1] "%8u niet-aaneengesloten mappen (%0d.%d%%)\n"
+msgid "%12u non-contiguous directory (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
+msgstr[0] "%12u niet-aaneengesloten map (%0d.%d%%)\n"
+msgstr[1] "%12u niet-aaneengesloten mappen (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:151
+#: e2fsck/unix.c:171
 #, c-format
-msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr ""
-"         aantal inodes met indirecte blokken: %u enkel, %u dubbel, %u "
-"triple\n"
+msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "             aantal inodes met indirecte blokken: %u enkel, %u dubbel, %u triple\n"
 
-#: e2fsck/unix.c:159
-msgid "         Extent depth histogram: "
-msgstr "         Extents-dieptehistogram: "
+#: e2fsck/unix.c:179
+msgid "             Extent depth histogram: "
+msgstr "             Extents-dieptehistogram: "
 
-#: e2fsck/unix.c:168
+#: e2fsck/unix.c:188
 #, c-format
-msgid "%8llu block used (%2.2f%%)\n"
-msgid_plural "%8llu blocks used (%2.2f%%)\n"
-msgstr[0] "%8llu blok gebruikt (%2.2f%%)\n"
-msgstr[1] "%8llu blokken gebruikt (%2.2f%%)\n"
+msgid "%12llu block used (%2.2f%%, out of %llu)\n"
+msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
+msgstr[0] "%12llu blok gebruikt (%2.2f%% van %llu)\n"
+msgstr[1] "%12llu blokken gebruikt (%2.2f%% van %llu)\n"
 
-#: e2fsck/unix.c:171
+#: e2fsck/unix.c:192
 #, c-format
-msgid "%8u bad block\n"
-msgid_plural "%8u bad blocks\n"
-msgstr[0] "%8u slecht blok\n"
-msgstr[1] "%8u slechte blokken\n"
+msgid "%12u bad block\n"
+msgid_plural "%12u bad blocks\n"
+msgstr[0] "%12u slecht blok\n"
+msgstr[1] "%12u slechte blokken\n"
 
-#: e2fsck/unix.c:173
+#: e2fsck/unix.c:194
 #, c-format
-msgid "%8u large file\n"
-msgid_plural "%8u large files\n"
-msgstr[0] "%8u groot bestand\n"
-msgstr[1] "%8u grote bestanden\n"
+msgid "%12u large file\n"
+msgid_plural "%12u large files\n"
+msgstr[0] "%12u groot bestand\n"
+msgstr[1] "%12u grote bestanden\n"
 
-#: e2fsck/unix.c:175
+#: e2fsck/unix.c:196
 #, c-format
 msgid ""
 "\n"
-"%8u regular file\n"
+"%12u regular file\n"
 msgid_plural ""
 "\n"
-"%8u regular files\n"
+"%12u regular files\n"
 msgstr[0] ""
 "\n"
-"%8u normaal bestand\n"
+"%12u normaal bestand\n"
 msgstr[1] ""
 "\n"
-"%8u normale bestanden\n"
+"%12u normale bestanden\n"
 
-#: e2fsck/unix.c:177
+#: e2fsck/unix.c:198
 #, c-format
-msgid "%8u directory\n"
-msgid_plural "%8u directories\n"
-msgstr[0] "%8u map\n"
-msgstr[1] "%8u mappen\n"
+msgid "%12u directory\n"
+msgid_plural "%12u directories\n"
+msgstr[0] "%12u map\n"
+msgstr[1] "%12u mappen\n"
 
-#: e2fsck/unix.c:179
+#: e2fsck/unix.c:200
 #, c-format
-msgid "%8u character device file\n"
-msgid_plural "%8u character device files\n"
-msgstr[0] "%8u byte-apparaat\n"
-msgstr[1] "%8u byte-apparaten\n"
+msgid "%12u character device file\n"
+msgid_plural "%12u character device files\n"
+msgstr[0] "%12u byte-apparaat\n"
+msgstr[1] "%12u byte-apparaten\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:203
 #, c-format
-msgid "%8u block device file\n"
-msgid_plural "%8u block device files\n"
-msgstr[0] "%8u blok-apparaat\n"
-msgstr[1] "%8u blok-apparaten\n"
+msgid "%12u block device file\n"
+msgid_plural "%12u block device files\n"
+msgstr[0] "%12u blok-apparaat\n"
+msgstr[1] "%12u blok-apparaten\n"
 
-#: e2fsck/unix.c:184
+#: e2fsck/unix.c:205
 #, c-format
-msgid "%8u fifo\n"
-msgid_plural "%8u fifos\n"
-msgstr[0] "%8u fifo\n"
-msgstr[1] "%8u fifo's\n"
+msgid "%12u fifo\n"
+msgid_plural "%12u fifos\n"
+msgstr[0] "%12u fifo\n"
+msgstr[1] "%12u fifo's\n"
 
-#: e2fsck/unix.c:186
+#: e2fsck/unix.c:207
 #, c-format
-msgid "%8u link\n"
-msgid_plural "%8u links\n"
-msgstr[0] "%8u koppeling\n"
-msgstr[1] "%8u koppelingen\n"
+msgid "%12u link\n"
+msgid_plural "%12u links\n"
+msgstr[0] "%12u koppeling\n"
+msgstr[1] "%12u koppelingen\n"
 
-#: e2fsck/unix.c:189
+#: e2fsck/unix.c:210
 #, c-format
-msgid "%8u symbolic link"
-msgid_plural "%8u symbolic links"
-msgstr[0] "%8u symbolische koppeling"
-msgstr[1] "%8u symbolische koppelingen"
+msgid "%12u symbolic link"
+msgid_plural "%12u symbolic links"
+msgstr[0] "%12u symbolische koppeling"
+msgstr[1] "%12u symbolische koppelingen"
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:212
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u snelle koppeling)\n"
 msgstr[1] " (%u snelle koppelingen)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:216
 #, c-format
-msgid "%8u socket\n"
-msgid_plural "%8u sockets\n"
-msgstr[0] "%8u socket\n"
-msgstr[1] "%8u sockets\n"
+msgid "%12u socket\n"
+msgid_plural "%12u sockets\n"
+msgstr[0] "%12u socket\n"
+msgstr[1] "%12u sockets\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:220
 #, c-format
-msgid "%8u file\n"
-msgid_plural "%8u files\n"
-msgstr[0] "%8u bestand\n"
-msgstr[1] "%8u bestanden\n"
+msgid "%12u file\n"
+msgid_plural "%12u files\n"
+msgstr[0] "%12u bestand\n"
+msgstr[1] "%12u bestanden\n"
 
-#: e2fsck/unix.c:212 misc/badblocks.c:983 misc/tune2fs.c:1979 misc/util.c:147
+#: e2fsck/unix.c:234 misc/badblocks.c:983 misc/tune2fs.c:1970 misc/util.c:147
 #: resize/main.c:247
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "tijdens bepalen of %s aangekoppeld is."
 
-#: e2fsck/unix.c:230
-#, fuzzy, c-format
+#: e2fsck/unix.c:254
+#, c-format
 msgid "Warning!  %s is %s.\n"
-msgstr "WAARSCHUWING: %s is aangekoppeld!\n"
+msgstr "Waarschuwing!  %s is %s.\n"
 
-#: e2fsck/unix.c:237
+#: e2fsck/unix.c:261
 #, c-format
 msgid "%s is %s.\n"
-msgstr ""
+msgstr "%s is %s.\n"
 
-#: e2fsck/unix.c:240
+#: e2fsck/unix.c:264
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2856,7 +2768,7 @@ msgstr ""
 "Kan niet doorgaan.  Gestopt.\n"
 "\n"
 
-#: e2fsck/unix.c:242
+#: e2fsck/unix.c:266
 msgid ""
 "\n"
 "\n"
@@ -2870,81 +2782,79 @@ msgstr ""
 "    Als u doorgaat **ZAL** dit tot **ZWARE** beschadigingen leiden.\n"
 "\n"
 
-#: e2fsck/unix.c:247
+#: e2fsck/unix.c:271
 msgid "Do you really want to continue"
 msgstr "Wilt u echt doorgaan"
 
-#: e2fsck/unix.c:249
+#: e2fsck/unix.c:273
 #, c-format
 msgid "check aborted.\n"
 msgstr "De controle is afgebroken.\n"
 
-#: e2fsck/unix.c:339
+#: e2fsck/unix.c:363
 msgid " contains a file system with errors"
 msgstr " bevat een bestandssysteem met fouten"
 
-#: e2fsck/unix.c:341
+#: e2fsck/unix.c:365
 msgid " was not cleanly unmounted"
 msgstr " is niet goed ontkoppeld"
 
-#: e2fsck/unix.c:343
+#: e2fsck/unix.c:367
 msgid " primary superblock features different from backup"
-msgstr ""
-" het primaire superblok heeft andere functievlaggen gezet dan de "
-"reserveblokken"
+msgstr " het primaire superblok heeft andere functievlaggen gezet dan de reserveblokken"
 
-#: e2fsck/unix.c:347
+#: e2fsck/unix.c:371
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " is %u keer aangekoppeld geweest zonder controle"
 
-#: e2fsck/unix.c:354
+#: e2fsck/unix.c:378
 msgid " has filesystem last checked time in the future"
 msgstr " is schijnbaar het laatst gecontroleerd in de toekomst"
 
-#: e2fsck/unix.c:360
+#: e2fsck/unix.c:384
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " is gedurende %u dagen niet gecontroleerd"
 
-#: e2fsck/unix.c:369
+#: e2fsck/unix.c:393
 msgid ", check forced.\n"
 msgstr ", gedwongen controle.\n"
 
-#: e2fsck/unix.c:402
+#: e2fsck/unix.c:426
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: schoon, %u/%u bestanden, %llu/%llu blokken"
 
-#: e2fsck/unix.c:421
+#: e2fsck/unix.c:445
 msgid " (check deferred; on battery)"
 msgstr " (controle is uitgesteld; computer loopt op accu)"
 
-#: e2fsck/unix.c:424
+#: e2fsck/unix.c:448
 msgid " (check after next mount)"
 msgstr " (controle bij volgende aankoppeling)"
 
-#: e2fsck/unix.c:426
+#: e2fsck/unix.c:450
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (controle na %ld aankoppelingen)"
 
-#: e2fsck/unix.c:576
+#: e2fsck/unix.c:600
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "FOUT: kan /dev/null niet openen (%s)\n"
 
-#: e2fsck/unix.c:645
+#: e2fsck/unix.c:669
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Ongeldige versie van uitgebreide kenmerken.\n"
 
-#: e2fsck/unix.c:672
+#: e2fsck/unix.c:696
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Onbekende uitgebreide optie: %s\n"
 
-#: e2fsck/unix.c:697
+#: e2fsck/unix.c:721
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2953,48 +2863,48 @@ msgstr ""
 "Syntaxfout in 'e2fsck'-configuratiebestand (%s, regel #%d)\n"
 "    %s\n"
 
-#: e2fsck/unix.c:766
+#: e2fsck/unix.c:790
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fout tijdens valideren van bestandsdesriptor %d: %s\n"
 
-#: e2fsck/unix.c:770
+#: e2fsck/unix.c:794
 msgid "Invalid completion information file descriptor"
 msgstr "Ongeldige completeringsinformatie voor bestandsdescriptor."
 
-#: e2fsck/unix.c:785
+#: e2fsck/unix.c:809
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Slechts één van de opties -a, -p, -n of -y mag worden opgegeven."
 
-#: e2fsck/unix.c:806
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "De optie '-t' wordt niet ondersteund door deze versie van e2fsck.\n"
 
-#: e2fsck/unix.c:837 e2fsck/unix.c:909 misc/tune2fs.c:811 misc/tune2fs.c:1100
-#: misc/tune2fs.c:1118
+#: e2fsck/unix.c:861 e2fsck/unix.c:933 misc/tune2fs.c:802 misc/tune2fs.c:1091
+#: misc/tune2fs.c:1109
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Kan apparaat '%s' niet vinden."
 
-#: e2fsck/unix.c:888
+#: e2fsck/unix.c:912
 msgid "The -n and -D options are incompatible."
 msgstr "De opties '-n' en '-D' gaan niet samen."
 
-#: e2fsck/unix.c:893
+#: e2fsck/unix.c:917
 msgid "The -n and -c options are incompatible."
 msgstr "De opties '-n' en '-c' gaan niet samen."
 
-#: e2fsck/unix.c:898
+#: e2fsck/unix.c:922
 msgid "The -n and -l/-L options are incompatible."
 msgstr "De opties '-n' en '-l' of '-L' gaan niet samen."
 
-#: e2fsck/unix.c:943
+#: e2fsck/unix.c:976
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "De opties '-c' en '-l' of '-L' kunnen niet samen gebruikt worden.\n"
 
-#: e2fsck/unix.c:991
+#: e2fsck/unix.c:1024
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -3003,7 +2913,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG -- \"%s\" is geen geheel getal\n"
 "\n"
 
-#: e2fsck/unix.c:1000
+#: e2fsck/unix.c:1033
 #, c-format
 msgid ""
 "\n"
@@ -3014,20 +2924,16 @@ msgstr ""
 "Ongeldig niet-numeriek argument van '-%c': \"%s\"\n"
 "\n"
 
-#: e2fsck/unix.c:1089
+#: e2fsck/unix.c:1122
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"Het MMP-interval is %u seconden, en de totale wachttijd is %u seconden.  "
-"Even geduld...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "Het MMP-interval is %u seconden, en de totale wachttijd is %u seconden.  Even geduld...\n"
 
-#: e2fsck/unix.c:1106 e2fsck/unix.c:1111
+#: e2fsck/unix.c:1139 e2fsck/unix.c:1144
 msgid "while checking MMP block"
 msgstr "tijdens controleren van MMP-blok"
 
-#: e2fsck/unix.c:1113 misc/tune2fs.c:1912
+#: e2fsck/unix.c:1146 misc/tune2fs.c:1903
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
@@ -3035,50 +2941,50 @@ msgstr ""
 "Als u zeker weet dat het bestandssysteem nergens gebruikt wordt,\n"
 "geef dan deze opdracht: 'tune2fs -f -E clear_mmp {apparaat}'\n"
 
-#: e2fsck/unix.c:1163
+#: e2fsck/unix.c:1196
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fout: de ext2fs-bibliotheek is te oud!\n"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1204
 msgid "while trying to initialize program"
 msgstr "tijdens programma-initialisatie"
 
-#: e2fsck/unix.c:1194
+#: e2fsck/unix.c:1227
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "    gebruik makend van %s, %s\n"
 
-#: e2fsck/unix.c:1206
+#: e2fsck/unix.c:1239
 msgid "need terminal for interactive repairs"
 msgstr "voor interactieve reparaties is een terminal vereist"
 
-#: e2fsck/unix.c:1256
+#: e2fsck/unix.c:1292
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s reservekopieblokken worden bekeken...\n"
 
 # Gebruik van '--' in deze en volgende string is opzettelijk;
 # één van deze strings wordt ingevuld voor de tweede %s hierboven.
-#: e2fsck/unix.c:1258
+#: e2fsck/unix.c:1294
 msgid "Superblock invalid,"
 msgstr "Superblok is ongeldig --"
 
-#: e2fsck/unix.c:1259
+#: e2fsck/unix.c:1295
 msgid "Group descriptors look bad..."
 msgstr "Groepsbeschrijvers zien er slecht uit --"
 
-#: e2fsck/unix.c:1269
+#: e2fsck/unix.c:1305
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s tijdens gebruik van de reservekopieblokken"
 
-#: e2fsck/unix.c:1273
+#: e2fsck/unix.c:1309
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: er wordt teruggevallen op het eerste superblok\n"
 
-#: e2fsck/unix.c:1301
+#: e2fsck/unix.c:1337
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3088,31 +2994,28 @@ msgstr ""
 "(Of het superblok is beschadigd.)\n"
 "\n"
 
-#: e2fsck/unix.c:1307
+#: e2fsck/unix.c:1343
 msgid "Could this be a zero-length partition?\n"
 msgstr "Is dit misschien een partitie met lengte nul?\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1346
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
-msgstr ""
-"U dient %s-toegang tot het bestandssyteem te hebben, of root te zijn.\n"
+msgstr "U dient %s-toegang tot het bestandssyteem te hebben, of root te zijn.\n"
 
-#: e2fsck/unix.c:1315
+#: e2fsck/unix.c:1351
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Mogelijk een niet-bestaand apparaat of een swap-apparaat?\n"
 
-#: e2fsck/unix.c:1318
+#: e2fsck/unix.c:1354
 msgid "Filesystem mounted or opened exclusively by another program?\n"
-msgstr ""
-"Is bestandssysteem exclusief aangekoppeld of geopend door een ander "
-"programma?\n"
+msgstr "Is bestandssysteem exclusief aangekoppeld of geopend door een ander programma?\n"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1357
 msgid "Possibly non-existent device?\n"
 msgstr "Mogelijk een niet-bestaand apparaat?\n"
 
-#: e2fsck/unix.c:1324
+#: e2fsck/unix.c:1360
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3120,45 +3023,42 @@ msgstr ""
 "De schijf is schrijfbeveiligd.  Gebruik de optie '-n' om een\n"
 "alleen-lezencontrole van het apparaat uit te voeren.\n"
 
-#: e2fsck/unix.c:1389
+#: e2fsck/unix.c:1425
 msgid "Get a newer version of e2fsck!"
 msgstr "Installeer een nieuwere versie van e2fsck!"
 
-#: e2fsck/unix.c:1437
+#: e2fsck/unix.c:1469
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "tijdens controle van het ext3-journal van %s"
 
-#: e2fsck/unix.c:1448
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1480
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
 "Waarschuwing: afspelen van journal wordt overgeslagen\n"
 "omdat een alleen-lezencontrole uitgevoerd wordt.\n"
 
-#: e2fsck/unix.c:1461
+#: e2fsck/unix.c:1493
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "Kan superblokvlaggen van %s niet zetten.\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1499
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "tijdens afspelen van het ext3-journal van %s"
 
-#: e2fsck/unix.c:1492
+#: e2fsck/unix.c:1523
 #, c-format
 msgid "%s has unsupported feature(s):"
-msgstr ""
-"Bestandssysteem %s heeft functies ingeschakeld die niet ondersteund worden:"
+msgstr "Bestandssysteem %s heeft functies ingeschakeld die niet ondersteund worden:"
 
-#: e2fsck/unix.c:1507
+#: e2fsck/unix.c:1538
 #, c-format
 msgid "%s: warning: compression support is experimental.\n"
 msgstr "%s: Waarschuwing: compressie-ondersteuning is nog experimenteel.\n"
 
-#: e2fsck/unix.c:1513
+#: e2fsck/unix.c:1544
 #, c-format
 msgid ""
 "%s: e2fsck not compiled with HTREE support,\n"
@@ -3167,51 +3067,50 @@ msgstr ""
 "%s: Deze 'e2fsck' is niet gecompileerd met 'htree'-ondersteuning,\n"
 "    maar het bestandssysteem %s bevat 'htree'-mappen.\n"
 
-#: e2fsck/unix.c:1565
+#: e2fsck/unix.c:1596
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s tijdens lezen van slechteblokken-inode\n"
 
-#: e2fsck/unix.c:1568
+#: e2fsck/unix.c:1599
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Dit ziet er niet goed uit, maar we zullen doorgaan...\n"
 
-#: e2fsck/unix.c:1609
+#: e2fsck/unix.c:1640
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Aanmaken van journal (%d blokken): "
 
-#: e2fsck/unix.c:1619
+#: e2fsck/unix.c:1650
 msgid " Done.\n"
 msgstr " voltooid.\n"
 
-#: e2fsck/unix.c:1620
+#: e2fsck/unix.c:1651
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
 "\n"
-"*** journal is opnieuw aangemaakt -- het bestandssysteem is nu weer ext3 "
-"***\n"
+"*** journal is opnieuw aangemaakt -- het bestandssysteem is nu weer ext3 ***\n"
 
-#: e2fsck/unix.c:1643
+#: e2fsck/unix.c:1674
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "E2fsck wordt opnieuw gestart vanaf het begin...\n"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1678
 msgid "while resetting context"
 msgstr "tijdens wissen van de context"
 
-#: e2fsck/unix.c:1654
+#: e2fsck/unix.c:1685
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: 'e2fsck' is geannuleerd.\n"
 
-#: e2fsck/unix.c:1659
+#: e2fsck/unix.c:1690
 msgid "aborted"
 msgstr "afgebroken"
 
-#: e2fsck/unix.c:1671 e2fsck/util.c:67
+#: e2fsck/unix.c:1702 e2fsck/util.c:67
 #, c-format
 msgid ""
 "\n"
@@ -3220,12 +3119,12 @@ msgstr ""
 "\n"
 "%s: ***** BESTANDSSYSTEEM IS VERANDERD *****\n"
 
-#: e2fsck/unix.c:1675
+#: e2fsck/unix.c:1706
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** HERSTART UW SYSTEEM *****\n"
 
-#: e2fsck/unix.c:1683 e2fsck/util.c:73
+#: e2fsck/unix.c:1714 e2fsck/util.c:73
 #, c-format
 msgid ""
 "\n"
@@ -3236,7 +3135,7 @@ msgstr ""
 "%s: ********** WAARSCHUWING: bestandssysteem bevat nog fouten **********\n"
 "\n"
 
-#: e2fsck/unix.c:1723
+#: e2fsck/unix.c:1754
 msgid "while setting block group checksum info"
 msgstr "tijdens zetten van controlesom van blokgroep"
 
@@ -3373,12 +3272,8 @@ msgid "while allocating zeroizing buffer"
 msgstr "tijdens reserveren van nulmakingsbuffer"
 
 #: e2fsck/util.c:788
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"ONVERWACHTE INCONSISTENTIE: het bestandssysteem wordt gewijzigd terwijl "
-"'fsck' uitgevoerd wordt.\n"
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "ONVERWACHTE INCONSISTENTIE: het bestandssysteem wordt gewijzigd terwijl 'fsck' uitgevoerd wordt.\n"
 
 #: misc/badblocks.c:69
 msgid "done                                                 \n"
@@ -3388,14 +3283,12 @@ msgstr "voltooid                                             \n"
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
-"max_bad_blocks]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
 "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
 "       device [last_block [first_block]]\n"
 msgstr ""
 "Gebruik:  %s [-b blokgrootte] [-i invoerbestand] [-o uitvoerbestand]\n"
-"          [-c aantal_blokken_tegelijk] [-d "
-"vertragingsfactor_tussen_leesacties]\n"
+"          [-c aantal_blokken_tegelijk] [-d vertragingsfactor_tussen_leesacties]\n"
 "          [-e maximum_aantal_slechte_blokken] [-p aantal_controles]\n"
 "          [-t testpatroon [-t testpatroon [...]]]  [-fnsvw]\n"
 "          apparaat  [eindblok [beginblok]]\n"
@@ -3437,8 +3330,7 @@ msgstr "tijdens leegmaken van de buffers"
 
 #: misc/badblocks.c:489 misc/badblocks.c:749
 msgid "while beginning bad block list iteration"
-msgstr ""
-"tijdens voorbereiding van het langslopen van de lijst met slechte blokken"
+msgstr "tijdens voorbereiding van het langslopen van de lijst met slechte blokken"
 
 #: misc/badblocks.c:503 misc/badblocks.c:602 misc/badblocks.c:759
 msgid "while allocating buffers"
@@ -3477,13 +3369,11 @@ msgstr "Lezen en vergelijken: "
 
 #: misc/badblocks.c:771
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
-msgstr ""
-"Zoeken naar slechte blokken in niet-destructieve lezen-en-schrijven-modus\n"
+msgstr "Zoeken naar slechte blokken in niet-destructieve lezen-en-schrijven-modus\n"
 
 #: misc/badblocks.c:777
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr ""
-"Zoeken naar slechte blokken (niet-destructieve lezen-en-schrijven-test)\n"
+msgstr "Zoeken naar slechte blokken (niet-destructieve lezen-en-schrijven-test)\n"
 
 #: misc/badblocks.c:784
 msgid ""
@@ -3578,68 +3468,66 @@ msgstr "Controle is voltooid; %u slechte blokken gevonden (%d/%d/%d fouten).\n"
 
 #: misc/chattr.c:86
 #, c-format
-msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
-msgstr "Gebruik:  %s [-RVf] [-+=AacDdeijsSu] [-v versie] bestanden...\n"
+msgid "Usage: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] files...\n"
+msgstr "Gebruik:  %s [-RVf] [-+=AaCcDdeijsSu] [-v VERSIE] BESTAND...\n"
 
-#: misc/chattr.c:154
+#: misc/chattr.c:155
 #, c-format
 msgid "bad version - %s\n"
 msgstr "ongeldige versie: %s\n"
 
-#: misc/chattr.c:201 misc/lsattr.c:116
+#: misc/chattr.c:202 misc/lsattr.c:116
 #, c-format
 msgid "while trying to stat %s"
 msgstr "tijdens opvragen van de status van %s"
 
-#: misc/chattr.c:208
+#: misc/chattr.c:209
 #, c-format
 msgid "while reading flags on %s"
 msgstr "tijdens lezen van vlaggen op %s"
 
-#: misc/chattr.c:217 misc/chattr.c:236
+#: misc/chattr.c:218 misc/chattr.c:237
 #, c-format
 msgid "Clearing extent flag not supported on %s"
 msgstr "Het uitzetten van de 'extent'-functievlag wordt niet ondersteund op %s"
 
-#: misc/chattr.c:222 misc/chattr.c:241
+#: misc/chattr.c:223 misc/chattr.c:242
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Vlaggen van %s gezet als "
 
-#: misc/chattr.c:250
+#: misc/chattr.c:251
 #, c-format
 msgid "while setting flags on %s"
 msgstr "tijdens zetten van vlaggen op %s"
 
-#: misc/chattr.c:258
+#: misc/chattr.c:259
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Versie van %s gezet als %lu\n"
 
-#: misc/chattr.c:262
+#: misc/chattr.c:263
 #, c-format
 msgid "while setting version on %s"
 msgstr "tijdens zetten van versie op %s"
 
-#: misc/chattr.c:282
+#: misc/chattr.c:283
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Kan geen padvariabele reserveren in chattr_dir_proc()"
 
-#: misc/chattr.c:322
+#: misc/chattr.c:323
 msgid "= is incompatible with - and +\n"
 msgstr "'=' gaat niet samen met '-' en '+'\n"
 
-#: misc/chattr.c:330
+#: misc/chattr.c:331
 msgid "Must use '-v', =, - or +\n"
 msgstr "Gebruik '-v', '=', '-' of '+'.\n"
 
 #: misc/dumpe2fs.c:55
 #, c-format
 msgid "Usage: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Gebruik:  %s [-bfhixV] [-o superblock=<nummer>] [-o blocksize=<getal>] "
-"apparaat\n"
+msgstr "Gebruik:  %s [-bfhixV] [-o superblock=<nummer>] [-o blocksize=<getal>] apparaat\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -3781,9 +3669,9 @@ msgstr ""
 "Begin van journal:        %u\n"
 
 #: misc/dumpe2fs.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "Journal errno:            %d\n"
-msgstr "Journal-gebruikers:       %s\n"
+msgstr "Journal-foutmnummer:      %d\n"
 
 #: misc/dumpe2fs.c:401 misc/tune2fs.c:218
 msgid "while reading journal superblock"
@@ -3817,7 +3705,7 @@ msgstr ""
 msgid "Journal users:            %s\n"
 msgstr "Journal-gebruikers:       %s\n"
 
-#: misc/dumpe2fs.c:442 misc/mke2fs.c:662 misc/tune2fs.c:1137
+#: misc/dumpe2fs.c:442 misc/mke2fs.c:665 misc/tune2fs.c:1128
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Kan geen geheugen reserveren om opties te ontleden!\n"
@@ -3855,12 +3743,12 @@ msgstr ""
 "    superblock=<superbloknummer>\n"
 "    blocksize=<blokgrootte>\n"
 
-#: misc/dumpe2fs.c:554 misc/mke2fs.c:1525
+#: misc/dumpe2fs.c:554 misc/mke2fs.c:1528
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tgebruik makend van %s\n"
 
-#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1923
+#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1914
 #: resize/main.c:305
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
@@ -3908,8 +3796,7 @@ msgstr "tijdens schrijven van inode-bitkaart"
 #: misc/e2image.c:1341
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
-msgstr ""
-"tijdens converteren van een qcow2-image (%s) naar een raw-imagebestand (%s)"
+msgstr "tijdens converteren van een qcow2-image (%s) naar een raw-imagebestand (%s)"
 
 #: misc/e2label.c:58
 #, c-format
@@ -3931,7 +3818,7 @@ msgstr "e2label: fout tijdens lezen van superblok\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: dit is geen ext2-bestandssysteem\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2074
+#: misc/e2label.c:97 misc/tune2fs.c:2065
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Waarschuwing: label is te lang, wordt afgekapt.\n"
@@ -3946,7 +3833,7 @@ msgstr "e2label: kan niet opnieuw 'seek' doen naar superblok\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: fout tijdens schrijven van superblok\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:803
+#: misc/e2label.c:117 misc/tune2fs.c:794
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Gebruik:  e2label apparaat [nieuw_label]\n"
@@ -3968,14 +3855,11 @@ msgstr "Lezen van transactiegegevens is mislukt: %s\n"
 #: misc/e2undo.c:70
 #, c-format
 msgid "The file system Mount time didn't match %u\n"
-msgstr ""
-"aankoppelingstijd van bestandssysteem komt niet overeen met %u uit "
-"transactiebestand\n"
+msgstr "aankoppelingstijd van bestandssysteem komt niet overeen met %u uit transactiebestand\n"
 
 #: misc/e2undo.c:89
 msgid "The file system UUID didn't match \n"
-msgstr ""
-"UUID's van bestandssysteem en uit transactiebestand komen niet overeen\n"
+msgstr "UUID's van bestandssysteem en uit transactiebestand komen niet overeen\n"
 
 #: misc/e2undo.c:163
 #, c-format
@@ -4072,9 +3956,7 @@ msgstr "Kan geen geheugen reserveren voor bestandssysteemsoorten.\n"
 
 #: misc/fsck.c:884
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
 msgstr ""
 "%s: ongeldige regel in /etc/fstab wordt overgeslagen:\n"
 "zesde veld van 'bind'-aankoppeling is niet nul (fsck-volgnummer)\n"
@@ -4094,8 +3976,7 @@ msgid "--waiting-- (pass %d)\n"
 msgstr "--wachten-- (volgnummer %d)\n"
 
 #: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
 "Gebruik:  fsck [-AMNPRTV] [-C [descriptor]] [-t bestandssysteemsoort]\n"
 "          [bestandssysteemopties] [bestandssysteem...]\n"
@@ -4125,7 +4006,7 @@ msgstr "Tijdens lezen van vlaggen op %s"
 msgid "While reading version on %s"
 msgstr "Tijdens lezen van versie op %s"
 
-#: misc/mke2fs.c:114
+#: misc/mke2fs.c:115
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4134,54 +4015,47 @@ msgid ""
 "\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-"
-"count]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]\n"
 msgstr ""
 "Gebruik:  %s [-b blokgrootte] [-c|-l bestandsnaam] [-C clustergrootte]\n"
 "          [-g blokken_per_groep] [-G flexgroepgrootte] [-i bytes_per_inode]\n"
-"          [-I inode-grootte] [-J journal-opties] [-L label] [-N "
-"aantal_inodes]\n"
-"          [-m percentage_gereserveerde_blokken] [-M "
-"laatste_aankoppelingspunt]\n"
-"          [-o naam_van_aanmakende_besturingssyteem] [-O functie[,...]] [-U "
-"UUID]\n"
-"          [-r bestandssysteemversie] [-t bestandssysteemsoort] [-T "
-"gebruikstype]\n"
-"          [-E uitgebreide_optie[,...]] [-jnqvDFKSV]  apparaat  "
-"[aantal_blokken]\n"
-
-#: misc/mke2fs.c:217
+"          [-I inode-grootte] [-J journal-opties] [-L label] [-N aantal_inodes]\n"
+"          [-m percentage_gereserveerde_blokken] [-M laatste_aankoppelingspunt]\n"
+"          [-o naam_van_aanmakende_besturingssyteem] [-O functie[,...]] [-U UUID]\n"
+"          [-r bestandssysteemversie] [-t bestandssysteemsoort] [-T gebruikstype]\n"
+"          [-E uitgebreide_optie[,...]] [-jnqvDFKSV]  apparaat  [aantal_blokken]\n"
+
+#: misc/mke2fs.c:218
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Uitgevoerde opdracht is: %s\n"
 
-#: misc/mke2fs.c:221
+#: misc/mke2fs.c:222
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "tijdens uitvoering van '%s'"
 
-#: misc/mke2fs.c:228
+#: misc/mke2fs.c:229
 msgid "while processing list of bad blocks from program"
 msgstr "tijdens verwerken van de gemaakte lijst van slechte blokken"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:256
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
-msgstr ""
-"Blok %d in het primaire superblok of de groepsbeschrijvers is slecht.\n"
+msgstr "Blok %d in het primaire superblok of de groepsbeschrijvers is slecht.\n"
 
-#: misc/mke2fs.c:257
+#: misc/mke2fs.c:258
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Blokken %u tot en met %u moeten goed zijn\n"
 "om een bestandssysteem aan te kunnen maken.\n"
 
-#: misc/mke2fs.c:260
+#: misc/mke2fs.c:261
 msgid "Aborting....\n"
 msgstr "Gestopt...\n"
 
-#: misc/mke2fs.c:280
+#: misc/mke2fs.c:281
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -4192,15 +4066,15 @@ msgstr ""
 "beginnend bij blok %u, bevat slechte blokken.\n"
 "\n"
 
-#: misc/mke2fs.c:299
+#: misc/mke2fs.c:300
 msgid "while marking bad blocks as used"
 msgstr "tijdens het markeren van slechte blokken (als zijnde in gebruik)"
 
-#: misc/mke2fs.c:316
+#: misc/mke2fs.c:317
 msgid "Writing inode tables: "
 msgstr "Schrijven van inodetabellen: "
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:339
 #, c-format
 msgid ""
 "\n"
@@ -4209,72 +4083,72 @@ msgstr ""
 "\n"
 "Kan %d blokken in inodetabel niet schrijven, beginnend bij %llu: %s\n"
 
-#: misc/mke2fs.c:351 misc/mke2fs.c:2175 misc/mke2fs.c:2429
+#: misc/mke2fs.c:353 misc/mke2fs.c:2181 misc/mke2fs.c:2435
 #, c-format
 msgid "done                            \n"
 msgstr "voltooid                        \n"
 
-#: misc/mke2fs.c:362
+#: misc/mke2fs.c:364
 msgid "while creating root dir"
 msgstr "tijdens aanmaken van hoofdmap"
 
-#: misc/mke2fs.c:369
+#: misc/mke2fs.c:371
 msgid "while reading root inode"
 msgstr "tijdens lezen van hoofd-inode"
 
-#: misc/mke2fs.c:383
+#: misc/mke2fs.c:385
 msgid "while setting root inode ownership"
 msgstr "tijdens zetten van eigenaar van hoofd-inode"
 
-#: misc/mke2fs.c:401
+#: misc/mke2fs.c:403
 msgid "while creating /lost+found"
 msgstr "tijdens aanmaken van /lost+found"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:410
 msgid "while looking up /lost+found"
 msgstr "tijdens zoeken van /lost+found"
 
-#: misc/mke2fs.c:421
+#: misc/mke2fs.c:423
 msgid "while expanding /lost+found"
 msgstr "tijdens uitbreiden van /lost+found"
 
-#: misc/mke2fs.c:436
+#: misc/mke2fs.c:438
 msgid "while setting bad block inode"
 msgstr "tijdens zetten van slechteblokken-inode"
 
-#: misc/mke2fs.c:463
+#: misc/mke2fs.c:465
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Onvoldoende geheugen tijdens wissen van sectoren %d-%d.\n"
 
-#: misc/mke2fs.c:473
+#: misc/mke2fs.c:475
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Waarschuwing: kan blok 0 niet lezen: %s\n"
 
-#: misc/mke2fs.c:489
+#: misc/mke2fs.c:491
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Waarschuwing: kan sector %d niet wissen: %s\n"
 
-#: misc/mke2fs.c:505
+#: misc/mke2fs.c:507
 msgid "while initializing journal superblock"
 msgstr "tijdens initialiseren van het journal-superblok"
 
-#: misc/mke2fs.c:513
+#: misc/mke2fs.c:515
 msgid "Zeroing journal device: "
 msgstr "Nulmaken van journal-apparaat: "
 
-#: misc/mke2fs.c:525
+#: misc/mke2fs.c:527
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "tijdens nulmaken van journal-apparaat (blok %llu, nummer %d)"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:546
 msgid "while writing journal superblock"
 msgstr "tijdens schrijven van journal-superblok"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:561
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -4283,126 +4157,123 @@ msgstr ""
 "Waarschuwing: %llu ongebruikte blokken.\n"
 "\n"
 
-#: misc/mke2fs.c:563
+#: misc/mke2fs.c:566
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Bestandssysteemlabel=%s\n"
 
-#: misc/mke2fs.c:566
+#: misc/mke2fs.c:569
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Soort besturingssysteem: %s\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:571
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blokgrootte=%u (log=%u)\n"
 
-#: misc/mke2fs.c:572
+#: misc/mke2fs.c:575
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Clustergrootte=%u (log=%u)\n"
 
-#: misc/mke2fs.c:576
+#: misc/mke2fs.c:579
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentgrootte=%u (log=%u)\n"
 
-#: misc/mke2fs.c:578
+#: misc/mke2fs.c:581
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "'stride'=%u blokken, 'stripe'-breedte=%u blokken\n"
 
-#: misc/mke2fs.c:580
+#: misc/mke2fs.c:583
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u inodes, %llu blokken\n"
 
-#: misc/mke2fs.c:582
+#: misc/mke2fs.c:585
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu blokken (%2.2f%%) gereserveerd voor systeembeheer\n"
 
-#: misc/mke2fs.c:585
+#: misc/mke2fs.c:588
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Eerste gegevensblok=%u\n"
 
-#: misc/mke2fs.c:587
+#: misc/mke2fs.c:590
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximum aantal bestandssysteemblokken=%lu\n"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:594
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blokgroepen\n"
 
-#: misc/mke2fs.c:593
+#: misc/mke2fs.c:596
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blokgroep\n"
 
-#: misc/mke2fs.c:596
+#: misc/mke2fs.c:599
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u blokken per groep, %u clusters per groep\n"
 
-#: misc/mke2fs.c:599
+#: misc/mke2fs.c:602
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u blokken per groep, %u fragmenten per groep\n"
 
 # src/main.c:425
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:604
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inodes per groep\n"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:611
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Superblokreservekopieën opgeslagen in blokken: "
 
-#: misc/mke2fs.c:687 misc/tune2fs.c:1165
+#: misc/mke2fs.c:690 misc/tune2fs.c:1156
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Ongeldig mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:704
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ongeldig argument van 'stride': %s\n"
 
-#: misc/mke2fs.c:716
+#: misc/mke2fs.c:719
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Ongeldig argument van 'stripe_width': %s\n"
 
-#: misc/mke2fs.c:739
+#: misc/mke2fs.c:742
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Ongeldig argument van 'resize': %s\n"
 
-#: misc/mke2fs.c:746
+#: misc/mke2fs.c:749
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"De maximum grootte moet groter zijn dan de huidige bestandssysteemgrootte.\n"
+msgstr "De maximum grootte moet groter zijn dan de huidige bestandssysteemgrootte.\n"
 
-#: misc/mke2fs.c:770
+#: misc/mke2fs.c:773
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
-msgstr ""
-"Live vergroten of verkleinen is niet mogelijk op een bestandssysteem van "
-"versie 0.\n"
+msgstr "Live vergroten of verkleinen is niet mogelijk op een bestandssysteem van versie 0.\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:811
 #, c-format
 msgid "Invalid quotatype parameter: %s\n"
 msgstr "Ongeldig argument van 'quotatype': %s\n"
 
-#: misc/mke2fs.c:819
+#: misc/mke2fs.c:822
 #, c-format
 msgid ""
 "\n"
@@ -4430,10 +4301,8 @@ msgstr ""
 "hun argument wordt voorafgegaan door een '='-teken.\n"
 "\n"
 "Geldige uitgebreide opties zijn:\n"
-"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/"
-"geschreven>\n"
-"    stripe_width=<aantal blokken per stripe> (meestal stride × aantal "
-"schijven)\n"
+"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/geschreven>\n"
+"    stripe_width=<aantal blokken per stripe> (meestal stride × aantal schijven)\n"
 "    resize=<maximum grootte van bestandssysteem in blokken>\n"
 "    lazy_itable_init=<0 voor uitschakelen, 1 voor inschakelen>\n"
 "    lazy_journal_init=<0 voor uitschakelen, 1 voor inschakelen>\n"
@@ -4442,7 +4311,7 @@ msgstr ""
 "    nodiscard\n"
 "    quotatype=<usr OF grp>\n"
 
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:842
 #, c-format
 msgid ""
 "\n"
@@ -4453,7 +4322,7 @@ msgstr ""
 "Waarschuwing: 'stripe'-breedte %u is geen even veelvoud van 'stride' %u.\n"
 "\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:881
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -4463,17 +4332,17 @@ msgstr ""
 "    %s\n"
 
 # Dit gaat over het argument van optie -O.
-#: misc/mke2fs.c:891 misc/tune2fs.c:393
+#: misc/mke2fs.c:894 misc/tune2fs.c:393
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ongeldige bestandssysteemfunctie: %s\n"
 
-#: misc/mke2fs.c:903 misc/tune2fs.c:345
+#: misc/mke2fs.c:906 misc/tune2fs.c:345
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ongeldige aankoppelingsoptie: %s\n"
 
-#: misc/mke2fs.c:1043
+#: misc/mke2fs.c:1046
 #, c-format
 msgid ""
 "\n"
@@ -4482,7 +4351,7 @@ msgstr ""
 "\n"
 "Uw mke2fs.conf definieert geen bestandssysteemtype %s.\n"
 
-#: misc/mke2fs.c:1047
+#: misc/mke2fs.c:1050
 #, c-format
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
@@ -4491,12 +4360,12 @@ msgstr ""
 "U dient waarschijnlijk een nieuwer mke2fs.conf-bestand te installeren.\n"
 "\n"
 
-#: misc/mke2fs.c:1051
+#: misc/mke2fs.c:1054
 #, c-format
 msgid "Aborting...\n"
 msgstr "Gestopt...\n"
 
-#: misc/mke2fs.c:1091
+#: misc/mke2fs.c:1094
 #, c-format
 msgid ""
 "\n"
@@ -4507,126 +4376,122 @@ msgstr ""
 "Waarschuwing: bestandssysteemtype %s is niet gedefinieerd in mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1249
+#: misc/mke2fs.c:1252
 #, c-format
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Kan geen geheugen reserveren voor nieuwe PATH.\n"
 
-#: misc/mke2fs.c:1290
+#: misc/mke2fs.c:1293
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Initialiseren van profile is mislukt (fout: %ld).\n"
 
-#: misc/mke2fs.c:1330
+#: misc/mke2fs.c:1333
 #, c-format
 msgid "invalid block size - %s"
 msgstr "ongeldige blokgrootte: %s"
 
-#: misc/mke2fs.c:1334
+#: misc/mke2fs.c:1337
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
-msgstr ""
-"Waarschuwing: blokgrootte %d is op de meeste systemen niet bruikbaar.\n"
+msgstr "Waarschuwing: blokgrootte %d is op de meeste systemen niet bruikbaar.\n"
 
-#: misc/mke2fs.c:1350
+#: misc/mke2fs.c:1353
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "ongeldige clustergrootte: %s"
 
-#: misc/mke2fs.c:1362
+#: misc/mke2fs.c:1365
 msgid "Illegal number for blocks per group"
 msgstr "Ongeldig aantal blokken per groep"
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1370
 msgid "blocks per group must be multiple of 8"
 msgstr "argument van -g (blokken per groep) is geen veelvoud van 8"
 
-#: misc/mke2fs.c:1375
+#: misc/mke2fs.c:1378
 msgid "Illegal number for flex_bg size"
 msgstr "Ongeldig getal voor metagroepgrootte"
 
-#: misc/mke2fs.c:1381
+#: misc/mke2fs.c:1384
 msgid "flex_bg size must be a power of 2"
 msgstr "Metagroepgrootte moet een macht van 2 zijn"
 
-#: misc/mke2fs.c:1391
+#: misc/mke2fs.c:1394
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "ongeldige inodeverhouding %s (min %d / max %d)"
 
-#: misc/mke2fs.c:1401
+#: misc/mke2fs.c:1404
 #, c-format
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
 msgstr ""
 "Waarschuwing: optie '-K' is verouderd en zou u niet meer moeten gebruiken;\n"
 "gebruik in plaats daarvan de uitgebreide optie '-E nodiscard'.\n"
 
-#: misc/mke2fs.c:1415
+#: misc/mke2fs.c:1418
 msgid "in malloc for bad_blocks_filename"
 msgstr "onvoldoende geheugen in bad_blocks_filename()"
 
-#: misc/mke2fs.c:1425
+#: misc/mke2fs.c:1428
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "ongeldig percentage gereserveerde blokken: %s"
 
 # lib/prange.c:299 lib/prange.c:316
-#: misc/mke2fs.c:1443
+#: misc/mke2fs.c:1446
 #, c-format
 msgid "bad revision level - %s"
 msgstr "ongeldig versienummer: %s"
 
-#: misc/mke2fs.c:1455
+#: misc/mke2fs.c:1458
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ongeldige grootte van inode: %s"
 
 # lib/prange.c:299 lib/prange.c:316
-#: misc/mke2fs.c:1475
+#: misc/mke2fs.c:1478
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "ongeldig aantal inodes: %s"
 
-#: misc/mke2fs.c:1492
+#: misc/mke2fs.c:1495
 msgid "The -t option may only be used once"
 msgstr "Optie '-t' mag slechts één keer gegeven worden"
 
-#: misc/mke2fs.c:1500
+#: misc/mke2fs.c:1503
 msgid "The -T option may only be used once"
 msgstr "Optie '-T' mag slechts één keer gegeven worden"
 
-#: misc/mke2fs.c:1550 misc/mke2fs.c:2508
+#: misc/mke2fs.c:1553 misc/mke2fs.c:2514
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "tijdens openen van journal-apparaat %s\n"
 
-#: misc/mke2fs.c:1556
+#: misc/mke2fs.c:1559
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
-msgstr ""
-"Blokgrootte %d van journal-apparaat is kleiner dan minimum blokgrootte %d.\n"
+msgstr "Blokgrootte %d van journal-apparaat is kleiner dan minimum blokgrootte %d.\n"
 
-#: misc/mke2fs.c:1562
+#: misc/mke2fs.c:1565
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Blokgrootte van het journal-apparaat wordt gebruikt: %d\n"
 
-#: misc/mke2fs.c:1573
+#: misc/mke2fs.c:1576
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "ongeldige blokken '%s' op apparaat '%s'"
 
-#: misc/mke2fs.c:1583
+#: misc/mke2fs.c:1586
 msgid "filesystem"
 msgstr "bestandssysteem"
 
-#: misc/mke2fs.c:1596 resize/main.c:374
+#: misc/mke2fs.c:1599 resize/main.c:355
 msgid "while trying to determine filesystem size"
 msgstr "tijdens bepalen van grootte van bestandssysteem"
 
-#: misc/mke2fs.c:1602
+#: misc/mke2fs.c:1605
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -4634,7 +4499,7 @@ msgstr ""
 "Kan de grootte van het apparaat niet bepalen;\n"
 "u dient zelf de grootte van het bestandssysteem aan te geven.\n"
 
-#: misc/mke2fs.c:1609
+#: misc/mke2fs.c:1612
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4647,16 +4512,16 @@ msgstr ""
 "    in-gebruik-zijn van een gewijzigde partitie.  Mogelijk dient u uw\n"
 "    computer te herstarten om de juiste partitietabel te verkrijgen.\n"
 
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1629
 msgid "Filesystem larger than apparent device size."
 msgstr "Bestandssysteem is groter dan de schijnbare apparaatgrootte."
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1649
 #, c-format
 msgid "Failed to parse fs types list\n"
 msgstr "Verwerken van lijst met bestandssysteemsoorten is mislukt\n"
 
-#: misc/mke2fs.c:1700
+#: misc/mke2fs.c:1703
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -4665,34 +4530,31 @@ msgstr ""
 "%s: De grootte (0x%llx blokken) van apparaat %s kan niet uitgedrukt\n"
 "    worden in 32 bits bij een blokgrootte van %d.\n"
 
-#: misc/mke2fs.c:1716
+#: misc/mke2fs.c:1719
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "Lijst met bestandssysteemsoorten voor mke2fs.conf: "
 
-#: misc/mke2fs.c:1723
+#: misc/mke2fs.c:1726
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
-msgstr ""
-"Extra functies worden niet ondersteund op een bestandssysteem van versie 0.\n"
+msgstr "Extra functies worden niet ondersteund op een bestandssysteem van versie 0.\n"
 
-#: misc/mke2fs.c:1730
+#: misc/mke2fs.c:1733
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
-msgstr ""
-"Schaarse superblokken zijn niet mogelijk op een bestandssysteem van versie "
-"0.\n"
+msgstr "Schaarse superblokken zijn niet mogelijk op een bestandssysteem van versie 0.\n"
 
-#: misc/mke2fs.c:1742
+#: misc/mke2fs.c:1745
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Een journal is niet mogelijk op een bestandssysteem van versie 0.\n"
 
-#: misc/mke2fs.c:1756
+#: misc/mke2fs.c:1759
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "ongeldig percentage gereserveerde blokken: %lf"
 
-#: misc/mke2fs.c:1772
+#: misc/mke2fs.c:1775
 #, c-format
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
@@ -4701,89 +4563,80 @@ msgstr ""
 "De functies 'resize_inode' en 'meta_bg' gaan niet samen.\n"
 "Ze kunnen niet beide ingeschakeld worden.\n"
 
-#: misc/mke2fs.c:1789
+#: misc/mke2fs.c:1792
 msgid "while trying to determine hardware sector size"
 msgstr "tijdens bepalen van de hardware-sectorgrootte"
 
-#: misc/mke2fs.c:1795
+#: misc/mke2fs.c:1798
 msgid "while trying to determine physical sector size"
 msgstr "tijdens bepalen van de fysieke sectorgrootte"
 
-#: misc/mke2fs.c:1828
+#: misc/mke2fs.c:1831
 msgid "while setting blocksize; too small for device\n"
 msgstr "tijdens instellen van de blokgrootte; te klein voor apparaat\n"
 
-#: misc/mke2fs.c:1833
+#: misc/mke2fs.c:1836
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Waarschuwing: de gegeven blokgrootte %d is kleiner dan de fysieke "
-"sectorgrootte %d van het apparaat\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Waarschuwing: de gegeven blokgrootte %d is kleiner dan de fysieke sectorgrootte %d van het apparaat\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1867
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "Waarschuwing: kan logische schijfopbouw van %s niet verkrijgen.\n"
 
-#: misc/mke2fs.c:1867
+#: misc/mke2fs.c:1870
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "Uitlijning van %s is %lu bytes verschoven.\n"
 
-#: misc/mke2fs.c:1869
+#: misc/mke2fs.c:1872
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
 msgstr ""
 "Dit kan zeer slechte prestaties tot gevolg hebben;\n"
 "(her)partitionering wordt aanbevolen.\n"
 
-#: misc/mke2fs.c:1880
+#: misc/mke2fs.c:1883
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "Blokken van %d bytes zijn te groot voor dit systeem (max %d)."
 
-#: misc/mke2fs.c:1884
+#: misc/mke2fs.c:1887
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 "Waarschuwing: blokken van %d bytes zijn te groot voor dit systeem,\n"
 "het maximum is %d -- maar 'mke2fs' wordt gedwongen uitgevoerd.\n"
 
-#: misc/mke2fs.c:1920
+#: misc/mke2fs.c:1925
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
-msgstr ""
-"het reserveren van blokken voor bestandssysteemvergroting wordt niet "
-"ondersteund op een niet-schaars bestandssysteem"
+msgstr "het reserveren van blokken voor bestandssysteemvergroting wordt niet ondersteund op een niet-schaars bestandssysteem"
 
-#: misc/mke2fs.c:1929
+#: misc/mke2fs.c:1934
 msgid "blocks per group count out of range"
 msgstr "teller van blokken-per-groep ligt buiten het toegestane bereik"
 
-#: misc/mke2fs.c:1944
+#: misc/mke2fs.c:1949
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"De functie 'flex_bg' is niet ingeschakeld, dus de metagroepgrootte mag niet "
-"opgegeven worden"
+msgstr "De functie 'flex_bg' is niet ingeschakeld, dus de metagroepgrootte mag niet opgegeven worden"
 
-#: misc/mke2fs.c:1956
+#: misc/mke2fs.c:1961
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ongeldige inode-grootte %d (min %d / max %d)"
 
-#: misc/mke2fs.c:1974
+#: misc/mke2fs.c:1979
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "te veel inodes (%llu) -- inodeverhouding verhogen?"
 
-#: misc/mke2fs.c:1981
+#: misc/mke2fs.c:1986
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "te veel inodes (%llu) -- geef minder dan 2^32 op"
 
-#: misc/mke2fs.c:1995
+#: misc/mke2fs.c:2000
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4795,7 +4648,7 @@ msgstr ""
 "   geef een hogere bytes-per-inodeverhouding op (-i),\n"
 "   of verklein het aantal inodes (-N).\n"
 
-#: misc/mke2fs.c:2114
+#: misc/mke2fs.c:2119
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -4807,44 +4660,42 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/mke2fs.c:2128
+#: misc/mke2fs.c:2133
 msgid "while trying to setup undo file\n"
 msgstr "tijdens aanmaken van 'undo'-bestand\n"
 
-#: misc/mke2fs.c:2154
+#: misc/mke2fs.c:2159
 msgid "Discarding device blocks: "
 msgstr "Verwerpen van blokken: "
 
-#: misc/mke2fs.c:2170
+#: misc/mke2fs.c:2176
 msgid "failed - "
 msgstr "is mislukt - "
 
-#: misc/mke2fs.c:2277
+#: misc/mke2fs.c:2283
 msgid "while setting up superblock"
 msgstr "tijdens aanmaken van superblok"
 
-#: misc/mke2fs.c:2286
+#: misc/mke2fs.c:2292
 #, c-format
 msgid "Discard succeeded and will return 0s  - skipping inode table wipe\n"
-msgstr ""
-"Verwerping is gelukt en zal nullen retourneren -- wissen van inode-tabel "
-"wordt overgeslagen\n"
+msgstr "Verwerping is gelukt en zal nullen retourneren -- wissen van inode-tabel wordt overgeslagen\n"
 
-#: misc/mke2fs.c:2369
+#: misc/mke2fs.c:2375
 #, c-format
 msgid "unknown os - %s"
 msgstr "onbekend besturingssysteem: %s"
 
-#: misc/mke2fs.c:2421
+#: misc/mke2fs.c:2427
 #, c-format
 msgid "Allocating group tables: "
 msgstr "Reserveren van groepstabellen: "
 
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2431
 msgid "while trying to allocate filesystem tables"
 msgstr "tijdens reserveren van bestandssysteemtabellen"
 
-#: misc/mke2fs.c:2434
+#: misc/mke2fs.c:2440
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -4852,25 +4703,25 @@ msgstr ""
 "\n"
 "    tijdens converteren van subcluster-bitkaart"
 
-#: misc/mke2fs.c:2477
+#: misc/mke2fs.c:2483
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "tijdens nulmaken van blok %llu aan het eind van het bestandssysteem"
 
-#: misc/mke2fs.c:2490
+#: misc/mke2fs.c:2496
 msgid "while reserving blocks for online resize"
 msgstr "tijdens reserveren van uitbreidingsblokken"
 
-#: misc/mke2fs.c:2501 misc/tune2fs.c:640
+#: misc/mke2fs.c:2507 misc/tune2fs.c:640
 msgid "journal"
 msgstr "journal"
 
-#: misc/mke2fs.c:2513
+#: misc/mke2fs.c:2519
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Toevoegen van journal aan apparaat %s: "
 
-#: misc/mke2fs.c:2520
+#: misc/mke2fs.c:2526
 #, c-format
 msgid ""
 "\n"
@@ -4879,22 +4730,22 @@ msgstr ""
 "\n"
 "    tijdens toevoegen van journal aan apparaat %s"
 
-#: misc/mke2fs.c:2525 misc/mke2fs.c:2557 misc/tune2fs.c:669 misc/tune2fs.c:683
+#: misc/mke2fs.c:2531 misc/mke2fs.c:2563 misc/tune2fs.c:669 misc/tune2fs.c:683
 #, c-format
 msgid "done\n"
 msgstr "voltooid\n"
 
-#: misc/mke2fs.c:2534
+#: misc/mke2fs.c:2540
 #, c-format
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Aanmaken van journal wordt overgeslagen wegens optie '-S'.\n"
 
-#: misc/mke2fs.c:2545
+#: misc/mke2fs.c:2551
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Aanmaken van journal (%u blokken): "
 
-#: misc/mke2fs.c:2553
+#: misc/mke2fs.c:2559
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -4902,29 +4753,28 @@ msgstr ""
 "\n"
 "    tijdens aanmaken van journal"
 
-#: misc/mke2fs.c:2564 misc/tune2fs.c:446
+#: misc/mke2fs.c:2570 misc/tune2fs.c:446
 #, c-format
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 "\n"
-"Fout tijdens inschakelen van MMP (bescherming tegen meervoudige "
-"aankoppelingen)."
+"Fout tijdens inschakelen van MMP (bescherming tegen meervoudige aankoppelingen)."
 
-#: misc/mke2fs.c:2569
+#: misc/mke2fs.c:2575
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr ""
 "Bescherming tegen meervoudige aankoppelingen is ingeschakeld\n"
 "met een bijwerkingsinterval van %d seconden.\n"
 
-#: misc/mke2fs.c:2582
+#: misc/mke2fs.c:2588
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Schrijven van superblokken en bestandssysteem-metagegevens: "
 
-#: misc/mke2fs.c:2589
+#: misc/mke2fs.c:2595
 #, c-format
 msgid ""
 "\n"
@@ -4933,7 +4783,7 @@ msgstr ""
 "\n"
 "Waarschuwing: problemen tijdens schrijven van superblokken."
 
-#: misc/mke2fs.c:2591
+#: misc/mke2fs.c:2597
 #, c-format
 msgid ""
 "done\n"
@@ -4992,19 +4842,16 @@ msgstr "Controleer het bestandssysteem met 'e2fsck'.\n"
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
-"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p "
-"mmp_update_interval]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p mmp_update_interval]\n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[ -I new_inode_size ] device\n"
 msgstr ""
 "Gebruik:  %s [-c maximum_aantal_aankoppelingen] [-C aankoppelingental]\n"
-"          [-e gedrag_bij_fouten] [-E uitgebreide_optie[,...]] [-f] [-g "
-"groep]\n"
+"          [-e gedrag_bij_fouten] [-E uitgebreide_optie[,...]] [-f] [-g groep]\n"
 "          [-i interval[d|w|m]] [-j] [-J journal-opties] [-l] [-L label]\n"
-"          [-m percentage_gereserveerde_blokken] [-M "
-"laatste_aankoppelingspunt]\n"
+"          [-m percentage_gereserveerde_blokken] [-M laatste_aankoppelingspunt]\n"
 "          [-o [^]aankoppelingsopties[,...]] [-O [^]functie[,...]]\n"
 "          [-p MMP-bijwerkingsinterval] [-r aantal_gereserveerde_blokken]\n"
 "          [-T tijdstip_van_laatste_controle] [-u gebruiker] [-U UUID]\n"
@@ -5180,17 +5027,16 @@ msgstr ""
 "\n"
 "    tijdens aanmaken van journal-inode"
 
-#: misc/tune2fs.c:763
+#: misc/tune2fs.c:754
 msgid "Couldn't allocate memory to parse quota options!\n"
 msgstr "Kan geen geheugen reserveren om quota-opties te ontleden!\n"
 
-#: misc/tune2fs.c:785
+#: misc/tune2fs.c:776
 msgid ""
 "\n"
 "Bad quota options specified.\n"
 "\n"
-"Following valid quota options are available (pass by separating with "
-"comma):\n"
+"Following valid quota options are available (pass by separating with comma):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
@@ -5205,99 +5051,98 @@ msgstr ""
 "\n"
 "\n"
 
-#: misc/tune2fs.c:846
+#: misc/tune2fs.c:837
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Kan datum/tijd-specificatie niet ontleden: %s"
 
-#: misc/tune2fs.c:870 misc/tune2fs.c:883
+#: misc/tune2fs.c:861 misc/tune2fs.c:874
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "onjuist aankoppelingenaantal: %s"
 
-#: misc/tune2fs.c:899
+#: misc/tune2fs.c:890
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "onjuist argument van -e (gedrag bij een fout): %s"
 
-#: misc/tune2fs.c:926
+#: misc/tune2fs.c:917
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "onjuiste GID of groepsnaam: %s"
 
 # lib/prange.c:299 lib/prange.c:316
-#: misc/tune2fs.c:959
+#: misc/tune2fs.c:950
 #, c-format
 msgid "bad interval - %s"
 msgstr "onjuist interval: %s"
 
-#: misc/tune2fs.c:988
+#: misc/tune2fs.c:979
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "onjuiste verhouding (%s) voor gereserveerde blokken"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:994
 msgid "-o may only be specified once"
 msgstr "Optie '-o' mag slechts één keer gegeven worden"
 
-#: misc/tune2fs.c:1012
+#: misc/tune2fs.c:1003
 msgid "-O may only be specified once"
 msgstr "Optie '-o' mag slechts één keer gegeven worden"
 
-#: misc/tune2fs.c:1027
+#: misc/tune2fs.c:1018
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "onjuist aantal gereserveerde blokken: %s"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1047
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "onjuiste UID of gebruikersnaam: %s"
 
-#: misc/tune2fs.c:1073
+#: misc/tune2fs.c:1064
 #, c-format
 msgid "bad inode size - %s"
 msgstr "ongeldige grootte van inode: %s"
 
-#: misc/tune2fs.c:1080
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Inode-grootte moet een macht van 2 zijn -- niet %s"
 
-#: misc/tune2fs.c:1174
+#: misc/tune2fs.c:1165
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "MMP-bijwerkingsinterval is te groot: %lu\n"
 
-#: misc/tune2fs.c:1179
+#: misc/tune2fs.c:1170
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
-msgid_plural ""
-"Setting multiple mount protection update interval to %lu seconds\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
 msgstr[0] "Het MMP-bijwerkingsinterval is op %lu seconde gezet\n"
 msgstr[1] "Het MMP-bijwerkingsinterval is op %lu seconden gezet\n"
 
-#: misc/tune2fs.c:1202
+#: misc/tune2fs.c:1193
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ongeldig argument van 'stride': %s\n"
 
-#: misc/tune2fs.c:1217
+#: misc/tune2fs.c:1208
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Ongeldig argument van 'stripe_width': %s\n"
 
-#: misc/tune2fs.c:1232
+#: misc/tune2fs.c:1223
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Ongeldig hash-algoritme: %s\n"
 
-#: misc/tune2fs.c:1238
+#: misc/tune2fs.c:1229
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Het standaard-hash-algoritme is op %s (%d) gezet\n"
 
-#: misc/tune2fs.c:1257
+#: misc/tune2fs.c:1248
 #, c-format
 msgid ""
 "\n"
@@ -5325,40 +5170,36 @@ msgstr ""
 "    clear_mmp\n"
 "    hash_alg=<hash-algoritme>\n"
 "    mount_opts=<uitgebreide standaard aankoppelingsopties>\n"
-"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/"
-"geschreven>\n"
-"    stripe_width=<aantal blokken per stripe> (meestal stride × aantal "
-"schijven)\n"
+"    stride=<aantal blokken dat samen per RAID-schijf wordt gelezen/geschreven>\n"
+"    stripe_width=<aantal blokken per stripe> (meestal stride × aantal schijven)\n"
 "    test_fs\n"
 "    ^test_fs\n"
 
-#: misc/tune2fs.c:1723
+#: misc/tune2fs.c:1714
 msgid "Failed to read inode bitmap\n"
 msgstr "Lezen van inode-bitkaart is mislukt\n"
 
-#: misc/tune2fs.c:1728
+#: misc/tune2fs.c:1719
 msgid "Failed to read block bitmap\n"
 msgstr "Lezen van blok-bitkaart is mislukt\n"
 
-#: misc/tune2fs.c:1745 resize/resize2fs.c:784
+#: misc/tune2fs.c:1736 resize/resize2fs.c:802
 msgid "blocks to be moved"
 msgstr "te verplaatsen blokken"
 
-#: misc/tune2fs.c:1748
+#: misc/tune2fs.c:1739
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr ""
-"Reserveren van blok-bitkaart tijdens inode-grootteverandering is mislukt.\n"
+msgstr "Reserveren van blok-bitkaart tijdens inode-grootteverandering is mislukt.\n"
 
-#: misc/tune2fs.c:1754
+#: misc/tune2fs.c:1745
 msgid "Not enough space to increase inode size \n"
 msgstr "Er is onvoldoende ruimte om de inode-grootte te vergroten. \n"
 
-#: misc/tune2fs.c:1759
+#: misc/tune2fs.c:1750
 msgid "Failed to relocate blocks during inode resize \n"
-msgstr ""
-"Herplaatsen van blokken tijdens inode-grootteverandering is mislukt. \n"
+msgstr "Herplaatsen van blokken tijdens inode-grootteverandering is mislukt. \n"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1782
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -5366,16 +5207,16 @@ msgstr ""
 "Fout tijdens veranderen van de inode-grootte.\n"
 "Voer 'e2undo' uit om de bestandssysteemwijzigingen ongedaan te maken. \n"
 
-#: misc/tune2fs.c:1818
+#: misc/tune2fs.c:1809
 msgid "Couldn't allocate memory for tdb filename\n"
 msgstr "Kan geen geheugen reserveren voor 'tdb'-bestandsnaam\n"
 
-#: misc/tune2fs.c:1840
+#: misc/tune2fs.c:1831
 #, c-format
 msgid "while trying to delete %s"
 msgstr "tijdens verwijderen van %s"
 
-#: misc/tune2fs.c:1850
+#: misc/tune2fs.c:1841
 #, c-format
 msgid ""
 "To undo the tune2fs operation please run the command\n"
@@ -5387,7 +5228,7 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/tune2fs.c:1919
+#: misc/tune2fs.c:1910
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
@@ -5397,62 +5238,62 @@ msgstr ""
 "Probeer het te repareren met:\n"
 "    e2fsck -f %s\n"
 
-#: misc/tune2fs.c:1937
+#: misc/tune2fs.c:1928
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "De inode-grootte is al %lu\n"
 
-#: misc/tune2fs.c:1943
+#: misc/tune2fs.c:1934
 #, c-format
 msgid "Shrinking the inode size is not supported\n"
 msgstr "Het verkleinen van de inode-grootte is niet mogelijk.\n"
 
-#: misc/tune2fs.c:1990
+#: misc/tune2fs.c:1981
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Het maximum aantal aankoppelingen is op %d gezet\n"
 
-#: misc/tune2fs.c:1996
+#: misc/tune2fs.c:1987
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Het huidige aantal aankoppelingen is op %d gezet\n"
 
-#: misc/tune2fs.c:2001
+#: misc/tune2fs.c:1992
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Gedrag bij fouten is op %d gezet\n"
 
-#: misc/tune2fs.c:2006
+#: misc/tune2fs.c:1997
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "GID van gereserveerde blokken is op %lu gezet\n"
 
-#: misc/tune2fs.c:2011
+#: misc/tune2fs.c:2002
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "interval tussen controles is te groot (%lu)"
 
-#: misc/tune2fs.c:2018
+#: misc/tune2fs.c:2009
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Interval tussen controles is op %lu seconden gezet\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2016
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Percentage gereserveerde blokken is op %g%% gezet (%llu blokken)\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2022
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "aantal gereserveerde blokken is te groot (%llu)"
 
-#: misc/tune2fs.c:2038
+#: misc/tune2fs.c:2029
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Het aantal gereserveerde blokken is op %llu gezet\n"
 
-#: misc/tune2fs.c:2044
+#: misc/tune2fs.c:2035
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -5460,7 +5301,7 @@ msgstr ""
 "\n"
 "Het bestandssysteem is al zuinig met superblokken.\n"
 
-#: misc/tune2fs.c:2051
+#: misc/tune2fs.c:2042
 #, c-format
 msgid ""
 "\n"
@@ -5469,7 +5310,7 @@ msgstr ""
 "\n"
 "De zuinig-met-superblokkenvlag is aangezet.  %s"
 
-#: misc/tune2fs.c:2056
+#: misc/tune2fs.c:2047
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -5477,38 +5318,37 @@ msgstr ""
 "\n"
 "Het uitzetten van de zuinig-met-superblokkenvlag is niet mogelijk.\n"
 
-#: misc/tune2fs.c:2064
+#: misc/tune2fs.c:2055
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Tijd van laatste controle is op %s gezet\n"
 
-#: misc/tune2fs.c:2070
+#: misc/tune2fs.c:2061
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "UID van gereserveerde blokken is op %lu gezet\n"
 
-#: misc/tune2fs.c:2102
+#: misc/tune2fs.c:2093
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "Fout in gebruik van 'clear_mmp'.  Het moet samengaan met '-f'.\n"
 
-#: misc/tune2fs.c:2120
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
+#: misc/tune2fs.c:2111
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "De quota-functie mag alleen gewijzigd worden wanneer het bestandssysteem\n"
 "ontkoppeld is.\n"
 
-#: misc/tune2fs.c:2153
+#: misc/tune2fs.c:2144
 msgid "Invalid UUID format\n"
 msgstr "Onjuiste UUID-indeling\n"
 
-#: misc/tune2fs.c:2166
+#: misc/tune2fs.c:2157
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
 msgstr ""
 "De inode-grootte mag alleen gewijzigd worden wanneer het bestandssysteem\n"
 "ontkoppeld is.\n"
 
-#: misc/tune2fs.c:2174
+#: misc/tune2fs.c:2165
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -5516,27 +5356,27 @@ msgstr ""
 "Het veranderen van de inode-grootte is niet mogelijk voor\n"
 "bestandssystemen met ingeschakelde 'flex_bg'-functievlag.\n"
 
-#: misc/tune2fs.c:2187
+#: misc/tune2fs.c:2178
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "De inode-groote is op %lu gezet\n"
 
-#: misc/tune2fs.c:2190
+#: misc/tune2fs.c:2181
 #, c-format
 msgid "Failed to change inode size\n"
 msgstr "Het veranderen van de inode-grootte is mislukt. \n"
 
-#: misc/tune2fs.c:2201
+#: misc/tune2fs.c:2192
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "De 'stride'-lengte is op %d gezet\n"
 
-#: misc/tune2fs.c:2206
+#: misc/tune2fs.c:2197
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "De 'stripe'-breedte is op %d gezet\n"
 
-#: misc/tune2fs.c:2213
+#: misc/tune2fs.c:2204
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "De uitgebreide standaard aankoppelingsopties zijn op '%s' gezet\n"
@@ -5850,16 +5690,7 @@ msgstr "tijdens openen van %s"
 msgid "while getting stat information for %s"
 msgstr "tijdens opvragen van status van %s"
 
-#: resize/main.c:331
-#, c-format
-msgid ""
-"%s: The combination of flex_bg and\n"
-"\t!resize_inode features is not supported by resize2fs.\n"
-msgstr ""
-"%s: De functie 'flex_bg' zonder de functie 'resize_inode'\n"
-"    wordt door 'resize2fs' niet ondersteund.\n"
-
-#: resize/main.c:344 resize/main.c:452
+#: resize/main.c:325 resize/main.c:437
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -5868,31 +5699,30 @@ msgstr ""
 "Voer eerst 'e2fsck -f %s' uit.\n"
 "\n"
 
-#: resize/main.c:348
+#: resize/main.c:329
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Geschatte minimum grootte van het bestandssysteem: %llu\n"
 
-#: resize/main.c:384
+#: resize/main.c:365
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Ongeldige nieuwe grootte: %s\n"
 
-#: resize/main.c:392
+#: resize/main.c:381
 msgid "New size too large to be expressed in 32 bits\n"
-msgstr ""
-"Nieuwe grootte is te groot om uitgedrukt te kunnen worden in 32 bits.\n"
+msgstr "Nieuwe grootte is te groot om uitgedrukt te kunnen worden in 32 bits.\n"
 
-#: resize/main.c:404
+#: resize/main.c:389
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Nieuwe grootte is kleiner dan minimum (%llu).\n"
 
-#: resize/main.c:410
+#: resize/main.c:395
 msgid "Invalid stride length"
 msgstr "Ongeldige lengte voor 'stride'"
 
-#: resize/main.c:434
+#: resize/main.c:419
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -5903,7 +5733,7 @@ msgstr ""
 "U vroeg om een nieuwe grootte van %llu blokken.\n"
 "\n"
 
-#: resize/main.c:441
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The filesystem is already %llu blocks long.  Nothing to do!\n"
@@ -5912,19 +5742,26 @@ msgstr ""
 "Het bestandssysteem is al %llu blokken groot.  Er is niets te doen!\n"
 "\n"
 
-#: resize/main.c:456
+#: resize/main.c:457
 #, c-format
-msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
 msgstr ""
-"Van grootte veranderen van bestandssysteem op %s naar %llu blokken (van "
-"%dK).\n"
+"%s: De functie 'flex_bg' zonder de functie 'resize_inode'\n"
+"    wordt door 'resize2fs' niet ondersteund.\n"
+
+#: resize/main.c:463
+#, c-format
+msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
+msgstr "Van grootte veranderen van bestandssysteem op %s naar %llu blokken (van %dK).\n"
 
-#: resize/main.c:465
+#: resize/main.c:472
 #, c-format
 msgid "while trying to resize %s"
 msgstr "tijdens veranderen van de grootte van %s"
 
-#: resize/main.c:468
+#: resize/main.c:475
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -5933,7 +5770,7 @@ msgstr ""
 "Voer 'e2fsck -fy %s' uit om het bestandssysteem\n"
 "te repareren na de afgebroken grootteverandering.\n"
 
-#: resize/main.c:474
+#: resize/main.c:481
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu blocks long.\n"
@@ -5942,7 +5779,7 @@ msgstr ""
 "Het bestandssysteem op %s is nu %llu blokken groot.\n"
 "\n"
 
-#: resize/main.c:489
+#: resize/main.c:496
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "tijdens inkorten van %s"
@@ -5958,78 +5795,79 @@ msgstr ""
 msgid "On-line shrinking not supported"
 msgstr "Het live krimpen wordt niet ondersteund"
 
-#: resize/online.c:63
+#: resize/online.c:69
 msgid "Filesystem does not support online resizing"
 msgstr "Bestandssysteem ondersteunt live vergroten/verkleinen niet"
 
-#: resize/online.c:70
+#: resize/online.c:78
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr "Niet genoeg gereserveerde GDT-blokken om grootte te kunnen veranderen"
+
+#: resize/online.c:85
+msgid "Kernel does not support resizing a file system this large"
+msgstr ""
+"De kernel ondersteunt het vergroten/verkleinen van\n"
+"een bestandssysteem met deze afmetingen niet"
+
+#: resize/online.c:93
 #, c-format
 msgid "while trying to open mountpoint %s"
 msgstr "tijdens openen van aankoppelingspunt %s"
 
-#: resize/online.c:92 resize/online.c:116
+#: resize/online.c:115 resize/online.c:132
 msgid "Permission denied to resize filesystem"
 msgstr "Toegang geweigerd voor het vergroten/verkleinen van bestandssysteem"
 
-#: resize/online.c:95 resize/online.c:122
+#: resize/online.c:118 resize/online.c:138
 msgid "While checking for on-line resizing support"
 msgstr "Tijdens controle op ondersteuning voor live vergroten/verkleinen"
 
-#: resize/online.c:107
-msgid "Kernel does not support resizing a file system this large"
-msgstr ""
-"De kernel ondersteunt het vergroten/verkleinen van\n"
-"een bestandssysteem met deze afmetingen niet"
-
-#: resize/online.c:119
+#: resize/online.c:135
 msgid "Kernel does not support online resizing"
 msgstr "De kernel ondersteunt het live vergroten/verkleinen niet"
 
-#: resize/online.c:152
+#: resize/online.c:168
 #, c-format
 msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
 msgstr "Uitvoeren van live verandering van %s naar %llu blokken (van %dK).\n"
 
-#: resize/online.c:162
+#: resize/online.c:178
 msgid "While trying to extend the last group"
 msgstr "Tijdens uitbreiden van de laatste groep"
 
-#: resize/online.c:216
+#: resize/online.c:232
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Tijdens toevoegen van groep #%d"
 
-#: resize/online.c:227
+#: resize/online.c:243
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
 msgstr ""
 "Bestandssysteem op %s is aangekoppled op %s;\n"
 "op dit systeem is live vergroten/verkleinen niet mogelijk.\n"
 
-#: resize/resize2fs.c:348
+#: resize/resize2fs.c:346
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "aantal inodes (%llu) moet kleiner zijn dan %u"
 
-#: resize/resize2fs.c:576
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "gereserveerde blokken"
 
-#: resize/resize2fs.c:789
+#: resize/resize2fs.c:807
 msgid "meta-data blocks"
 msgstr "blokken voor metagegevens"
 
-#: resize/resize2fs.c:1735
+#: resize/resize2fs.c:1753
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Zou nooit mogen gebeuren: de 'resize'-inode is beschadigd!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.42.4"
-msgstr "EXT2FS-bibliotheek  versie 1.42.2"
+msgid "EXT2FS Library version 1.42.6"
+msgstr "EXT2FS-bibliotheek  versie 1.42.6"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -6113,8 +5951,7 @@ msgstr "Bestandssysteemrevisie is te hoog"
 
 #: lib/ext2fs/ext2_err.c:32
 msgid "Attempt to write to filesystem opened read-only"
-msgstr ""
-"Poging tot schrijven naar bestandssysteem dat geopend is voor alleen-lezen"
+msgstr "Poging tot schrijven naar bestandssysteem dat geopend is voor alleen-lezen"
 
 #: lib/ext2fs/ext2_err.c:33
 msgid "Can't read group descriptors"
@@ -6206,8 +6043,7 @@ msgstr "**Interne programmafout** in ext2fs_expand_dir()"
 
 #: lib/ext2fs/ext2_err.c:55
 msgid "Not enough space to build proposed filesystem"
-msgstr ""
-"Er is onvoldoende ruimte om het voorgestelde bestandssysteem te creëren"
+msgstr "Er is onvoldoende ruimte om het voorgestelde bestandssysteem te creëren"
 
 #: lib/ext2fs/ext2_err.c:56
 msgid "Illegal block number passed to ext2fs_mark_block_bitmap"
@@ -6239,8 +6075,7 @@ msgstr "Poging om het eind van blok-bitkaart voorbij het echte eind te smurfen"
 
 #: lib/ext2fs/ext2_err.c:63
 msgid "Attempt to fudge end of inode bitmap past the real end"
-msgstr ""
-"Poging om het eind van inode-bitkaart voorbij het echte eind te smurfen"
+msgstr "Poging om het eind van inode-bitkaart voorbij het echte eind te smurfen"
 
 #: lib/ext2fs/ext2_err.c:64
 msgid "Illegal indirect block found"
@@ -6631,8 +6466,7 @@ msgstr "Profile-relatie niet gevonden"
 
 #: e2fsck/prof_err.c:15
 msgid "Attempt to add a relation to node which is not a section"
-msgstr ""
-"Poging tot het toevoegen van een relatie aan een knoop die geen sectie is"
+msgstr "Poging tot het toevoegen van een relatie aan een knoop die geen sectie is"
 
 #: e2fsck/prof_err.c:16
 msgid "A profile section header has a non-zero value"
@@ -6743,14 +6577,10 @@ msgstr "Ongeldig magisch getal in 'profile_file_data_t'"
 #~ msgstr "Partitie %s is aangekoppeld.  "
 
 #~ msgid "@g %g @b @B uninitialized but @i @B in use.\n"
-#~ msgstr ""
-#~ "Groepsbeschrijver %g heeft een ongeïnitialiseerde blok-bitkaart maar de "
-#~ "inode-bitkaart is in gebruik.\n"
+#~ msgstr "Groepsbeschrijver %g heeft een ongeïnitialiseerde blok-bitkaart maar de inode-bitkaart is in gebruik.\n"
 
 #~ msgid "@i %i should not have EOFBLOCKS_FL set (size %Is, lblk %r)\n"
-#~ msgstr ""
-#~ "Inode %i zou niet de 'EOFBLOCKS_FL'-vlag gezet moeten hebben (grootte "
-#~ "%Is, lblk %r)\n"
+#~ msgstr "Inode %i zou niet de 'EOFBLOCKS_FL'-vlag gezet moeten hebben (grootte %Is, lblk %r)\n"
 
 #~ msgid "Couldn't determine journal size"
 #~ msgstr "Kan journal-grootte niet bepalen"
@@ -6771,9 +6601,7 @@ msgstr "Ongeldig magisch getal in 'profile_file_data_t'"
 #~ msgstr "ongeldige fragmentgrootte: %s"
 
 #~ msgid "Warning: fragments not supported.  Ignoring -f option\n"
-#~ msgstr ""
-#~ "Waarschuwing: fragmenten worden niet ondersteund; optie '-f' wordt "
-#~ "genegeerd\n"
+#~ msgstr "Waarschuwing: fragmenten worden niet ondersteund; optie '-f' wordt genegeerd\n"
 
 #~ msgid "Calling BLKDISCARD from %llu to %llu "
 #~ msgstr "Aanroepen van BLKDISCARD van %llu tot %llu "
@@ -6785,16 +6613,13 @@ msgstr "Ongeldig magisch getal in 'profile_file_data_t'"
 #~ msgstr "Journal is NIET verwijderd.\n"
 
 #~ msgid "@S doesn't have has_@j flag, but has ext3 @j %s.\n"
-#~ msgstr ""
-#~ "Superblok heeft journal-vlag niet gezet, maar heeft wel een ext3-journal "
-#~ "%s.\n"
+#~ msgstr "Superblok heeft journal-vlag niet gezet, maar heeft wel een ext3-journal %s.\n"
 
 #~ msgid "Error while deleting extent: %m\n"
 #~ msgstr "Fout tijdens verwijderen van extent: %m\n"
 
 #~ msgid "Recreate journal to make the filesystem ext3 again?\n"
-#~ msgstr ""
-#~ "Het journal heraanmaken om het bestandssysteem weer ext3 te maken?\n"
+#~ msgstr "Het journal heraanmaken om het bestandssysteem weer ext3 te maken?\n"
 
 #~ msgid "bad block size - %s"
 #~ msgstr "ongeldige blokgrootte: %s"
@@ -6815,9 +6640,7 @@ msgstr "Ongeldig magisch getal in 'profile_file_data_t'"
 #~ msgstr "Opvragen van grootte"
 
 #~ msgid "@a in @i %i has a hash (%N) which is @n (must be 0)\n"
-#~ msgstr ""
-#~ "Een uitgebreid kenmerk in inode %i heeft een ongeldige hashwaarde (%N, "
-#~ "moet 0 zijn).\n"
+#~ msgstr "Een uitgebreid kenmerk in inode %i heeft een ongeldige hashwaarde (%N, moet 0 zijn).\n"
 
 #~ msgid "while calling ext2fs_block_iterate"
 #~ msgstr "tijdens aanroep van ext2fs_block_iterate()"
@@ -6835,8 +6658,7 @@ msgstr "Ongeldig magisch getal in 'profile_file_data_t'"
 #~ msgstr "tijdens schrijven van inodetabel (groep %d)"
 
 #~ msgid "Pass 0: Doing byte-swap of filesystem\n"
-#~ msgstr ""
-#~ "Stap 0: Omwisseling van hoge en lage bytes in hele bestandssysteem\n"
+#~ msgstr "Stap 0: Omwisseling van hoge en lage bytes in hele bestandssysteem\n"
 
 #~ msgid ""
 #~ "%s: the filesystem must be freshly checked using fsck\n"
@@ -6882,5 +6704,4 @@ msgstr "Ongeldig magisch getal in 'profile_file_data_t'"
 #~ "\n"
 
 #~ msgid "Warning: %d-byte inodes not usable on older systems\n"
-#~ msgstr ""
-#~ "Waarschuwing: inodes van %d bytes zijn onbruikbaar op oudere systemen\n"
+#~ msgstr "Waarschuwing: inodes van %d bytes zijn onbruikbaar op oudere systemen\n"
index df332c0..d6c5d32 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index cdde6a3..924fcba 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.42.2\n"
+"Project-Id-Version: e2fsprogs 1.42.6\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2012-06-12 14:40-0400\n"
-"PO-Revision-Date: 2012-04-10 17:30+0200\n"
+"POT-Creation-Date: 2012-09-21 12:16-0400\n"
+"PO-Revision-Date: 2012-12-19 21:02+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "Language: pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:176
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:177
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Wadliwy blok %u poza zakresem - zignorowany.\n"
@@ -90,10 +89,10 @@ msgid "while reading the bad blocks inode"
 msgstr "podczas odczytu i-wêz³a wadliwych bloków"
 
 #: e2fsck/badblocks.c:72 e2fsck/iscan.c:110 e2fsck/scantest.c:107
-#: e2fsck/unix.c:1298 e2fsck/unix.c:1386 misc/badblocks.c:1214
+#: e2fsck/unix.c:1334 e2fsck/unix.c:1422 misc/badblocks.c:1214
 #: misc/badblocks.c:1222 misc/badblocks.c:1236 misc/badblocks.c:1248
 #: misc/dumpe2fs.c:588 misc/e2image.c:1189 misc/e2image.c:1307
-#: misc/e2image.c:1320 misc/mke2fs.c:192 misc/tune2fs.c:1907 resize/main.c:303
+#: misc/e2image.c:1320 misc/mke2fs.c:193 misc/tune2fs.c:1898 resize/main.c:303
 #, c-format
 msgid "while trying to open %s"
 msgstr "podczas próby otworzenia %s"
@@ -103,7 +102,7 @@ msgstr "podczas pr
 msgid "while trying popen '%s'"
 msgstr "podczas próby popen '%s'"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:199
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:200
 msgid "while reading in list of bad blocks from file"
 msgstr "podczas wczytywania z pliku listy wadliwych bloków"
 
@@ -114,9 +113,7 @@ msgstr "podczas uaktualniania i-w
 #: e2fsck/badblocks.c:131
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Uwaga: znaleziono niedopuszczalny blok %u w i-wê¼le wadliwego bloku. "
-"Wyczyszczono.\n"
+msgstr "Uwaga: znaleziono niedopuszczalny blok %u w i-wê¼le wadliwego bloku. Wyczyszczono.\n"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -189,12 +186,12 @@ msgstr "ioctl BLKFLSBUF nie obs
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
 msgstr "Sk³adnia: %s [-F] [-I bloki_bufora_i-wêz³ów] urz±dzenie\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:930
+#: e2fsck/iscan.c:81 e2fsck/unix.c:963
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "podczas otwierania %s w celu opró¿nienia"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:936 resize/main.c:276
+#: e2fsck/iscan.c:86 e2fsck/unix.c:969 resize/main.c:276
 #, c-format
 msgid "while trying to flush %s"
 msgstr "podczas próby opró¿nienia %s"
@@ -234,8 +231,7 @@ msgstr "%s: odtwarzanie z kroniki\n"
 #: e2fsck/journal.c:872
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
-msgstr ""
-"%s: odtworzenie z kroniki nie zostanie wykonane w trybie tylko do odczytu\n"
+msgstr "%s: odtworzenie z kroniki nie zostanie wykonane w trybie tylko do odczytu\n"
 
 #: e2fsck/journal.c:899
 #, c-format
@@ -886,8 +882,7 @@ msgstr "@S ma b
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:193
 msgid "External @j has multiple @f users (unsupported).\n"
-msgstr ""
-"Zewnêtrzna @j ma wielu u¿ytkowników systemu plików (nie obs³ugiwane).\n"
+msgstr "Zewnêtrzna @j ma wielu u¿ytkowników systemu plików (nie obs³ugiwane).\n"
 
 #. @-expanded: Can't find external journal\n
 #: e2fsck/problem.c:198
@@ -911,8 +906,7 @@ msgstr "Zewn
 #: e2fsck/problem.c:213
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
-"format.\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 "@S kroniki systemu plików ma nieznany typ %N (nie obs³ugiwany).\n"
@@ -1061,8 +1055,7 @@ msgstr ""
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:328
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"Resize_inode nie w³±czone, ale i-wêze³ zmiany rozmiaru jest niezerowy. "
+msgstr "Resize_inode nie w³±czone, ale i-wêze³ zmiany rozmiaru jest niezerowy. "
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:333
@@ -1141,8 +1134,7 @@ msgstr "Flags test_fs jest ustawiona (i ext4 jest dost
 #: e2fsck/problem.c:386
 msgid ""
 "@S last mount time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set)  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)  "
 msgstr ""
 "Czas ostatniego montowania @Su jest w przysz³o¶ci\n"
 "\t(o mniej ni¿ dzieñ, zapewne z powodu z³ego ustawienia zegara sprzêtowego)  "
@@ -1153,8 +1145,7 @@ msgstr ""
 #: e2fsck/problem.c:392
 msgid ""
 "@S last write time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set).  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set).  "
 msgstr ""
 "Czas ostatniego zapisu @Su jest w przysz³o¶ci\n"
 "\t(o mniej ni¿ dzieñ, zapewne z powodu z³ego ustawienia zegara sprzêtowego)  "
@@ -1176,11 +1167,8 @@ msgstr "Ustawianie liczby wolnych @b
 
 #. @-expanded: Making quota inode %i (%Q) hidden.\n
 #: e2fsck/problem.c:413
-#, fuzzy
 msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"Zmiana i-wêz³ów @qów na ukryte.\n"
-"\n"
+msgstr "Zmiana i-wêz³a @qów na ukryty.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
 #: e2fsck/problem.c:418
@@ -1315,8 +1303,7 @@ msgstr "Podw
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
 #: e2fsck/problem.c:544
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr ""
-"Wadliwy @b %b jest u¿ywany jako niebiezpo¶redni @b i-wê¼³a z wadliwym @biem. "
+msgstr "Wadliwy @b %b jest u¿ywany jako niebiezpo¶redni @b i-wê¼³a z wadliwym @biem. "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
@@ -1451,14 +1438,12 @@ msgstr "B
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
 #: e2fsck/problem.c:655
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr ""
-"B³±d podczas zapisu informacji o liczbie i-wêz³ów (@i=%i, liczba=%N): %m\n"
+msgstr "B³±d podczas zapisu informacji o liczbie i-wêz³ów (@i=%i, liczba=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
 #: e2fsck/problem.c:660
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"B³±d podczas zapisu informacji o @dch @bach (@i=%i, @b=%b, liczba=%N): %m\n"
+msgstr "B³±d podczas zapisu informacji o @dch @bach (@i=%i, @b=%b, liczba=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
 #: e2fsck/problem.c:666
@@ -1561,8 +1546,7 @@ msgstr "@A @bu rozszerzonych atrybut
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
 #: e2fsck/problem.c:761
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr ""
-"@b rozszerzonych atrybutów %b jest uszkodzony (kolizja przydzielania). "
+msgstr "@b rozszerzonych atrybutów %b jest uszkodzony (kolizja przydzielania). "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
 #: e2fsck/problem.c:766
@@ -1597,8 +1581,7 @@ msgstr "%B (%b) powoduje, 
 #: e2fsck/problem.c:795
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr ""
-"@i %i ma ustawion± flagê INDEX_FL na systemie plików bez obs³ugi htree.\n"
+msgstr "@i %i ma ustawion± flagê INDEX_FL na systemie plików bez obs³ugi htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
 #: e2fsck/problem.c:800
@@ -1719,16 +1702,13 @@ msgstr ""
 #: e2fsck/problem.c:892
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"@i %i ma ustawion± flagê EXTENTS_FL na systemie plików bez obs³ugi "
-"ekstentów.\n"
+msgstr "@i %i ma ustawion± flagê EXTENTS_FL na systemie plików bez obs³ugi ekstentów.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
 #: e2fsck/problem.c:897
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"@i %i ma format z ekstentami, ale w superbloku brakuje w³a¶ciwo¶ci EXTENTS\n"
+msgstr "@i %i ma format z ekstentami, ale w superbloku brakuje w³a¶ciwo¶ci EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
 #: e2fsck/problem.c:902
@@ -1832,15 +1812,12 @@ msgstr "B
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
 #: e2fsck/problem.c:989 e2fsck/problem.c:1304
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr ""
-"B³±d podczas poprawiania refcount dla @bu rozszerzonych atrybutów %b (@i "
-"%i): %m\n"
+msgstr "B³±d podczas poprawiania refcount dla @bu rozszerzonych atrybutów %b (@i %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
 #: e2fsck/problem.c:994
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
-msgstr ""
-"Przebieg 1C: Przeszukiwanie katalogów pod k±tem i-wêz³ów z @mmi @bami\n"
+msgstr "Przebieg 1C: Przeszukiwanie katalogów pod k±tem i-wêz³ów z @mmi @bami\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
 #: e2fsck/problem.c:1000
@@ -2230,8 +2207,7 @@ msgstr "Nieoczekiwany @b w i-w
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
 #: e2fsck/problem.c:1358
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
-msgstr ""
-"@i %Di znaleziony w grupie %g, która ma ustawion± flagê _INONE_UNINIT.\n"
+msgstr "@i %Di znaleziony w grupie %g, która ma ustawion± flagê _INONE_UNINIT.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
 #: e2fsck/problem.c:1363
@@ -2480,12 +2456,8 @@ msgstr "B
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 #: e2fsck/problem.c:1638
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"B£¡D PROGRAMU: koñce bitmap systemu plików (#%N) (%b, %c) nie zgadzaj± siê z "
-"policzonymi koñcami bitmap (%i, %j)\n"
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "B£¡D PROGRAMU: koñce bitmap systemu plików (#%N) (%b, %c) nie zgadzaj± siê z policzonymi koñcami bitmap (%i, %j)\n"
 
 #: e2fsck/problem.c:1644
 msgid "Internal error: fudging end of bitmap (%N)\n"
@@ -2522,7 +2494,7 @@ msgstr "Odtworzy
 
 #: e2fsck/problem.c:1696
 msgid "Update quota info for quota type %N"
-msgstr ""
+msgstr "Uaktualniæ informacje o limitach typu %N"
 
 #: e2fsck/problem.c:1815
 #, c-format
@@ -2590,8 +2562,7 @@ msgid ""
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock "
-"list\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
@@ -2600,8 +2571,7 @@ msgstr ""
 " -n                   Nie wykonywanie zmian w systemie plików\n"
 " -y                   Przyjêcie odpowiedzi \"tak\" na wszystkie pytania\n"
 " -c                   Szukanie wadliwych bloków i dodanie ich do listy\n"
-" -f                   Wymuszenie sprawdzenia nawet \"czystego\" systemu "
-"plików\n"
+" -f                   Wymuszenie sprawdzenia nawet \"czystego\" systemu plików\n"
 
 #: e2fsck/unix.c:86
 #, c-format
@@ -2615,151 +2585,150 @@ msgid ""
 msgstr ""
 " -v                   Pokazywanie wiêkszej ilo¶ci informacji\n"
 " -b superblok         U¿ycie innego superbloku\n"
-" -B rozm.bloku        Wymuszenie rozmiaru bloku przy poszukiwaniu "
-"superbloku\n"
+" -B rozm.bloku        Wymuszenie rozmiaru bloku przy poszukiwaniu superbloku\n"
 " -j zewn-kronika      Ustawienie po³o¿enia zewnêtrznej kroniki\n"
 " -l plik_z³ych_bloków Dodanie do listy wadliwych bloków\n"
 " -L plik_z³ych_bloków Ustawienie listy wadliwych bloków\n"
 
-#: e2fsck/unix.c:130
+#: e2fsck/unix.c:131
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u plików (%0d.%d%% nieci±g³ych), %llu/%llu bloków\n"
 
-#: e2fsck/unix.c:137
+#: e2fsck/unix.c:157
 #, c-format
 msgid ""
 "\n"
-"%8u inode used (%2.2f%%)\n"
+"%12u inode used (%2.2f%%, out of %u)\n"
 msgid_plural ""
 "\n"
-"%8u inodes used (%2.2f%%)\n"
+"%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
 "\n"
-"%8u u¿yty i-wêze³ (%2.2f%%)\n"
+"%12u u¿yty i-wêze³ (%2.2f%% z %u)\n"
 msgstr[1] ""
 "\n"
-"%8u u¿yte i-wêz³y (%2.2f%%)\n"
+"%12u u¿yte i-wêz³y (%2.2f%% z %u)\n"
 msgstr[2] ""
 "\n"
-"%8u u¿ytych i-wêz³ów (%2.2f%%)\n"
+"%12u u¿ytych i-wêz³ów (%2.2f%% z %u)\n"
 
-#: e2fsck/unix.c:141
+#: e2fsck/unix.c:161
 #, c-format
-msgid "%8u non-contiguous file (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous files (%0d.%d%%)\n"
-msgstr[0] "%8u plik nieci±g³y (%0d.%d%%)\n"
-msgstr[1] "%8u pliki nieci±g³e (%0d.%d%%)\n"
-msgstr[2] "%8u plików nieci±g³ych (%0d.%d%%)\n"
+msgid "%12u non-contiguous file (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
+msgstr[0] "%12u plik nieci±g³y (%0d.%d%%)\n"
+msgstr[1] "%12u pliki nieci±g³e (%0d.%d%%)\n"
+msgstr[2] "%12u plików nieci±g³ych (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:146
+#: e2fsck/unix.c:166
 #, c-format
-msgid "%8u non-contiguous directory (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous directories (%0d.%d%%)\n"
-msgstr[0] "%8u katalog nieci±g³y (%0d.%d%%)\n"
-msgstr[1] "%8u katalogi nieci±g³e (%0d.%d%%)\n"
-msgstr[2] "%8u katalogów nieci±g³ych (%0d.%d%%)\n"
+msgid "%12u non-contiguous directory (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
+msgstr[0] "%12u katalog nieci±g³y (%0d.%d%%)\n"
+msgstr[1] "%12u katalogi nieci±g³e (%0d.%d%%)\n"
+msgstr[2] "%12u katalogów nieci±g³ych (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:151
+#: e2fsck/unix.c:171
 #, c-format
-msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr "         liczba i-wêz³ów z blokami ind/dind/tind: %u/%u/%u\n"
+msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "             liczba i-wêz³ów z blokami ind/dind/tind: %u/%u/%u\n"
 
-#: e2fsck/unix.c:159
-msgid "         Extent depth histogram: "
-msgstr "         Histogram g³êboko¶ci ekstentów: "
+#: e2fsck/unix.c:179
+msgid "             Extent depth histogram: "
+msgstr "             Histogram g³êboko¶ci ekstentów: "
 
-#: e2fsck/unix.c:168
+#: e2fsck/unix.c:188
 #, c-format
-msgid "%8llu block used (%2.2f%%)\n"
-msgid_plural "%8llu blocks used (%2.2f%%)\n"
-msgstr[0] "%8llu u¿yty blok (%2.2f%%)\n"
-msgstr[1] "%8llu u¿yte bloki (%2.2f%%)\n"
-msgstr[2] "%8llu u¿ytych bloków (%2.2f%%)\n"
+msgid "%12llu block used (%2.2f%%, out of %llu)\n"
+msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
+msgstr[0] "%12llu u¿yty blok (%2.2f%% z %llu)\n"
+msgstr[1] "%12llu u¿yte bloki (%2.2f%% z %llu)\n"
+msgstr[2] "%12llu u¿ytych bloków (%2.2f%% z %llu)\n"
 
-#: e2fsck/unix.c:171
+#: e2fsck/unix.c:192
 #, c-format
-msgid "%8u bad block\n"
-msgid_plural "%8u bad blocks\n"
-msgstr[0] "%8u wadliwy blok\n"
-msgstr[1] "%8u wadliwe bloki\n"
-msgstr[2] "%8u wadliwych bloków\n"
+msgid "%12u bad block\n"
+msgid_plural "%12u bad blocks\n"
+msgstr[0] "%12u wadliwy blok\n"
+msgstr[1] "%12u wadliwe bloki\n"
+msgstr[2] "%12u wadliwych bloków\n"
 
-#: e2fsck/unix.c:173
+#: e2fsck/unix.c:194
 #, c-format
-msgid "%8u large file\n"
-msgid_plural "%8u large files\n"
-msgstr[0] "%8u du¿y plik\n"
-msgstr[1] "%8u du¿e pliki\n"
-msgstr[2] "%8u du¿ych plików\n"
+msgid "%12u large file\n"
+msgid_plural "%12u large files\n"
+msgstr[0] "%12u du¿y plik\n"
+msgstr[1] "%12u du¿e pliki\n"
+msgstr[2] "%12u du¿ych plików\n"
 
-#: e2fsck/unix.c:175
+#: e2fsck/unix.c:196
 #, c-format
 msgid ""
 "\n"
-"%8u regular file\n"
+"%12u regular file\n"
 msgid_plural ""
 "\n"
-"%8u regular files\n"
+"%12u regular files\n"
 msgstr[0] ""
 "\n"
-"%8u zwyk³y plik\n"
+"%12u zwyk³y plik\n"
 msgstr[1] ""
 "\n"
-"%8u zwyk³e pliki\n"
+"%12u zwyk³e pliki\n"
 msgstr[2] ""
 "\n"
-"%8u zwyk³ych plików\n"
+"%12u zwyk³ych plików\n"
 
-#: e2fsck/unix.c:177
+#: e2fsck/unix.c:198
 #, c-format
-msgid "%8u directory\n"
-msgid_plural "%8u directories\n"
-msgstr[0] "%8u katalog\n"
-msgstr[1] "%8u katalogi\n"
-msgstr[2] "%8u katalogów\n"
+msgid "%12u directory\n"
+msgid_plural "%12u directories\n"
+msgstr[0] "%12u katalog\n"
+msgstr[1] "%12u katalogi\n"
+msgstr[2] "%12u katalogów\n"
 
-#: e2fsck/unix.c:179
+#: e2fsck/unix.c:200
 #, c-format
-msgid "%8u character device file\n"
-msgid_plural "%8u character device files\n"
-msgstr[0] "%8u plik urz±dzenia znakowego\n"
-msgstr[1] "%8u pliki urz±dzeñ znakowych\n"
-msgstr[2] "%8u plików urz±dzeñ znakowych\n"
+msgid "%12u character device file\n"
+msgid_plural "%12u character device files\n"
+msgstr[0] "%12u plik urz±dzenia znakowego\n"
+msgstr[1] "%12u pliki urz±dzeñ znakowych\n"
+msgstr[2] "%12u plików urz±dzeñ znakowych\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:203
 #, c-format
-msgid "%8u block device file\n"
-msgid_plural "%8u block device files\n"
-msgstr[0] "%8u plik urz±dzenia blokowego\n"
-msgstr[1] "%8u pliki urz±dzeñ blokowych\n"
-msgstr[2] "%8u plików urz±dzeñ blokowych\n"
+msgid "%12u block device file\n"
+msgid_plural "%12u block device files\n"
+msgstr[0] "%12u plik urz±dzenia blokowego\n"
+msgstr[1] "%12u pliki urz±dzeñ blokowych\n"
+msgstr[2] "%12u plików urz±dzeñ blokowych\n"
 
-#: e2fsck/unix.c:184
+#: e2fsck/unix.c:205
 #, c-format
-msgid "%8u fifo\n"
-msgid_plural "%8u fifos\n"
-msgstr[0] "%8u potok\n"
-msgstr[1] "%8u potoki\n"
-msgstr[2] "%8u potoków\n"
+msgid "%12u fifo\n"
+msgid_plural "%12u fifos\n"
+msgstr[0] "%12u potok\n"
+msgstr[1] "%12u potoki\n"
+msgstr[2] "%12u potoków\n"
 
-#: e2fsck/unix.c:186
+#: e2fsck/unix.c:207
 #, c-format
-msgid "%8u link\n"
-msgid_plural "%8u links\n"
-msgstr[0] "%8u dowi±zanie\n"
-msgstr[1] "%8u dowi±zania\n"
-msgstr[2] "%8u dowi±zañ\n"
+msgid "%12u link\n"
+msgid_plural "%12u links\n"
+msgstr[0] "%12u dowi±zanie\n"
+msgstr[1] "%12u dowi±zania\n"
+msgstr[2] "%12u dowi±zañ\n"
 
-#: e2fsck/unix.c:189
+#: e2fsck/unix.c:210
 #, c-format
-msgid "%8u symbolic link"
-msgid_plural "%8u symbolic links"
-msgstr[0] "%8u dowi±zanie symboliczne"
-msgstr[1] "%8u dowi±zania symboliczne"
-msgstr[2] "%8u dowi±zañ symbolicznych"
+msgid "%12u symbolic link"
+msgid_plural "%12u symbolic links"
+msgstr[0] "%12u dowi±zanie symboliczne"
+msgstr[1] "%12u dowi±zania symboliczne"
+msgstr[2] "%12u dowi±zañ symbolicznych"
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:212
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
@@ -2767,39 +2736,39 @@ msgstr[0] " (%u szybkie dowi
 msgstr[1] " (%u szybkie dowi±zania symboliczne)\n"
 msgstr[2] " (%u szybkich dowi±zañ symbolicznych)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:216
 #, c-format
-msgid "%8u socket\n"
-msgid_plural "%8u sockets\n"
-msgstr[0] "%8u gniazdo\n"
-msgstr[1] "%8u gniazda\n"
-msgstr[2] "%8u gniazd\n"
+msgid "%12u socket\n"
+msgid_plural "%12u sockets\n"
+msgstr[0] "%12u gniazdo\n"
+msgstr[1] "%12u gniazda\n"
+msgstr[2] "%12u gniazd\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:220
 #, c-format
-msgid "%8u file\n"
-msgid_plural "%8u files\n"
-msgstr[0] "%8u plik\n"
-msgstr[1] "%8u pliki\n"
-msgstr[2] "%8u plików\n"
+msgid "%12u file\n"
+msgid_plural "%12u files\n"
+msgstr[0] "%12u plik\n"
+msgstr[1] "%12u pliki\n"
+msgstr[2] "%12u plików\n"
 
-#: e2fsck/unix.c:212 misc/badblocks.c:983 misc/tune2fs.c:1979 misc/util.c:147
+#: e2fsck/unix.c:234 misc/badblocks.c:983 misc/tune2fs.c:1970 misc/util.c:147
 #: resize/main.c:247
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "podczas sprawdzania, czy %s jest zamontowany."
 
-#: e2fsck/unix.c:230
-#, fuzzy, c-format
+#: e2fsck/unix.c:254
+#, c-format
 msgid "Warning!  %s is %s.\n"
-msgstr "Uwaga! %s jest zamontowany.\n"
+msgstr "Uwaga! %s jest %s.\n"
 
-#: e2fsck/unix.c:237
+#: e2fsck/unix.c:261
 #, c-format
 msgid "%s is %s.\n"
-msgstr ""
+msgstr "%s jest %s.\n"
 
-#: e2fsck/unix.c:240
+#: e2fsck/unix.c:264
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2807,7 +2776,7 @@ msgstr ""
 "Nie mo¿na kontynuowaæ, przerwano.\n"
 "\n"
 
-#: e2fsck/unix.c:242
+#: e2fsck/unix.c:266
 msgid ""
 "\n"
 "\n"
@@ -2821,79 +2790,79 @@ msgstr ""
 "***POWA¯NE*** uszkodzenie systemu plików.\n"
 "\n"
 
-#: e2fsck/unix.c:247
+#: e2fsck/unix.c:271
 msgid "Do you really want to continue"
 msgstr "Naprawdê kontynuowaæ?"
 
-#: e2fsck/unix.c:249
+#: e2fsck/unix.c:273
 #, c-format
 msgid "check aborted.\n"
 msgstr "sprawdzanie przerwane.\n"
 
-#: e2fsck/unix.c:339
+#: e2fsck/unix.c:363
 msgid " contains a file system with errors"
 msgstr " zawiera system plików z b³êdami"
 
-#: e2fsck/unix.c:341
+#: e2fsck/unix.c:365
 msgid " was not cleanly unmounted"
 msgstr " nie by³ czysto odmontowany"
 
-#: e2fsck/unix.c:343
+#: e2fsck/unix.c:367
 msgid " primary superblock features different from backup"
 msgstr " cechy g³ównego superbloku ró¿ni± siê od kopii zapasowej"
 
-#: e2fsck/unix.c:347
+#: e2fsck/unix.c:371
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " by³ montowany %u razy bez sprawdzania"
 
-#: e2fsck/unix.c:354
+#: e2fsck/unix.c:378
 msgid " has filesystem last checked time in the future"
 msgstr " ma czas ostatniego sprawdzenia systemu plików w przysz³o¶ci"
 
-#: e2fsck/unix.c:360
+#: e2fsck/unix.c:384
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " przetrwa³ %u dni bez sprawdzania"
 
-#: e2fsck/unix.c:369
+#: e2fsck/unix.c:393
 msgid ", check forced.\n"
 msgstr ", wymuszono sprawdzenie.\n"
 
-#: e2fsck/unix.c:402
+#: e2fsck/unix.c:426
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: czysty, %u/%u plików, %llu/%llu bloków"
 
-#: e2fsck/unix.c:421
+#: e2fsck/unix.c:445
 msgid " (check deferred; on battery)"
 msgstr " (sprawdzenie wstrzymane; zasilanie z baterii)"
 
-#: e2fsck/unix.c:424
+#: e2fsck/unix.c:448
 msgid " (check after next mount)"
 msgstr " (sprawdzenie po nastêpnym montowaniu)"
 
-#: e2fsck/unix.c:426
+#: e2fsck/unix.c:450
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr "(sprawdzenie za %ld montowañ)"
 
-#: e2fsck/unix.c:576
+#: e2fsck/unix.c:600
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
 msgstr "B£¡D: Nie mo¿na otworzyæ /dev/null (%s)\n"
 
-#: e2fsck/unix.c:645
+#: e2fsck/unix.c:669
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "B³êdna wersja EA.\n"
 
-#: e2fsck/unix.c:672
+#: e2fsck/unix.c:696
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Nieznana opcja rozszerzona: %s\n"
 
-#: e2fsck/unix.c:697
+#: e2fsck/unix.c:721
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2902,48 +2871,48 @@ msgstr ""
 "B³±d sk³adni w pliku konfiguracyjnym e2fsck (%s, linia %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:766
+#: e2fsck/unix.c:790
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "B³±d podczas kontroli deskryptora pliku %d: %s\n"
 
-#: e2fsck/unix.c:770
+#: e2fsck/unix.c:794
 msgid "Invalid completion information file descriptor"
 msgstr "B³êdne informacje dope³niaj±ce deskryptora plików"
 
-#: e2fsck/unix.c:785
+#: e2fsck/unix.c:809
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Mo¿na podaæ tylko jedn± z opcji -p/-a, -n lub -y."
 
-#: e2fsck/unix.c:806
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
 msgstr "Opcja -t nie jest obs³ugiwana przez tê wersjê e2fsck.\n"
 
-#: e2fsck/unix.c:837 e2fsck/unix.c:909 misc/tune2fs.c:811 misc/tune2fs.c:1100
-#: misc/tune2fs.c:1118
+#: e2fsck/unix.c:861 e2fsck/unix.c:933 misc/tune2fs.c:802 misc/tune2fs.c:1091
+#: misc/tune2fs.c:1109
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Nie uda³o siê rozwi±zaæ '%s'"
 
-#: e2fsck/unix.c:888
+#: e2fsck/unix.c:912
 msgid "The -n and -D options are incompatible."
 msgstr "Opcje -n i -D s± niekompatybilne."
 
-#: e2fsck/unix.c:893
+#: e2fsck/unix.c:917
 msgid "The -n and -c options are incompatible."
 msgstr "Opcje -n i -c s± niekompatybilne."
 
-#: e2fsck/unix.c:898
+#: e2fsck/unix.c:922
 msgid "The -n and -l/-L options are incompatible."
 msgstr "Opcje -n i -l/-L s± niekompatybilne."
 
-#: e2fsck/unix.c:943
+#: e2fsck/unix.c:976
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
 msgstr "Opcje -c oraz -l/-L nie mog± byæ podane jednocze¶nie.\n"
 
-#: e2fsck/unix.c:991
+#: e2fsck/unix.c:1024
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
@@ -2952,7 +2921,7 @@ msgstr ""
 "E2FSCK_JBD_DEBUG \"%s\" nie jest liczb± ca³kowit±\n"
 "\n"
 
-#: e2fsck/unix.c:1000
+#: e2fsck/unix.c:1033
 #, c-format
 msgid ""
 "\n"
@@ -2963,70 +2932,65 @@ msgstr ""
 "B³êdny argument nieliczbowy dla -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1089
+#: e2fsck/unix.c:1122
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"Przedzia³ MMP to %u sek, a ca³kowity czas oczekiwania %u sek. Proszê "
-"czekaæ...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "Przedzia³ MMP to %u sek, a ca³kowity czas oczekiwania %u sek. Proszê czekaæ...\n"
 
-#: e2fsck/unix.c:1106 e2fsck/unix.c:1111
+#: e2fsck/unix.c:1139 e2fsck/unix.c:1144
 msgid "while checking MMP block"
 msgstr "podczas sprawdzania bloku MMP"
 
-#: e2fsck/unix.c:1113 misc/tune2fs.c:1912
+#: e2fsck/unix.c:1146 misc/tune2fs.c:1903
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
 msgstr ""
-"Je¶li system plików nie jest na pewno u¿ywany przez ¿aden system, mo¿na "
-"uruchomiæ:\n"
+"Je¶li system plików nie jest na pewno u¿ywany przez ¿aden system, mo¿na uruchomiæ:\n"
 "'tune2fs -f -E clear_mmp {urz±dzenie}'\n"
 
-#: e2fsck/unix.c:1163
+#: e2fsck/unix.c:1196
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "B³±d: wersja biblioteki ext2fs jest za stara!\n"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1204
 msgid "while trying to initialize program"
 msgstr "podczas próby inicjalizacji programu"
 
-#: e2fsck/unix.c:1194
+#: e2fsck/unix.c:1227
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tU¿ywane %s, %s\n"
 
-#: e2fsck/unix.c:1206
+#: e2fsck/unix.c:1239
 msgid "need terminal for interactive repairs"
 msgstr "interaktywna naprawa wymaga terminala"
 
-#: e2fsck/unix.c:1256
+#: e2fsck/unix.c:1292
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
 msgstr "%s: %s próba u¿ycia zapasowych bloków...\n"
 
-#: e2fsck/unix.c:1258
+#: e2fsck/unix.c:1294
 msgid "Superblock invalid,"
 msgstr "Superblok b³êdny,"
 
-#: e2fsck/unix.c:1259
+#: e2fsck/unix.c:1295
 msgid "Group descriptors look bad..."
 msgstr "Deskryptory grup wygl±daj± ¼le..."
 
-#: e2fsck/unix.c:1269
+#: e2fsck/unix.c:1305
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s podczas próby u¿ycia zapasowych bloków"
 
-#: e2fsck/unix.c:1273
+#: e2fsck/unix.c:1309
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: powracanie do oryginalnego superbloku\n"
 
-#: e2fsck/unix.c:1301
+#: e2fsck/unix.c:1337
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -3036,29 +3000,28 @@ msgstr ""
 "(lub superblok systemu plików jest uszkodzony)\n"
 "\n"
 
-#: e2fsck/unix.c:1307
+#: e2fsck/unix.c:1343
 msgid "Could this be a zero-length partition?\n"
 msgstr "Czy to mo¿e jest partycja zerowej d³ugo¶ci?\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1346
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
 msgstr "Trzeba mieæ dostêp %s do systemu plików lub byæ rootem\n"
 
-#: e2fsck/unix.c:1315
+#: e2fsck/unix.c:1351
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Zapewne nie istniej±ce urz±dzenie lub swap?\n"
 
-#: e2fsck/unix.c:1318
+#: e2fsck/unix.c:1354
 msgid "Filesystem mounted or opened exclusively by another program?\n"
-msgstr ""
-"System plików zamontowany lub otwarty na wy³±czno¶æ przez inny program?\n"
+msgstr "System plików zamontowany lub otwarty na wy³±czno¶æ przez inny program?\n"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1357
 msgid "Possibly non-existent device?\n"
 msgstr "Zapewne nie istniej±ce urz±dzenie?\n"
 
-#: e2fsck/unix.c:1324
+#: e2fsck/unix.c:1360
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
@@ -3066,44 +3029,42 @@ msgstr ""
 "Dysk zabezpieczony przed zapisem; mo¿na u¿yæ opcji -n aby sprawdziæ\n"
 "urz±dzenie w trybie tylko do odczytu.\n"
 
-#: e2fsck/unix.c:1389
+#: e2fsck/unix.c:1425
 msgid "Get a newer version of e2fsck!"
 msgstr "Potrzeba nowszej wersji e2fsck!"
 
-#: e2fsck/unix.c:1437
+#: e2fsck/unix.c:1469
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "podczas sprawdzania kroniki ext3 dla %s"
 
-#: e2fsck/unix.c:1448
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
+#: e2fsck/unix.c:1480
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
 msgstr ""
 "Uwaga: pominiêto odtwarzanie z kroniki z powodu sprawdzania w trybie tylko\n"
 "do odczytu.\n"
 
-#: e2fsck/unix.c:1461
+#: e2fsck/unix.c:1493
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "nie mo¿na ustawiæ flag superbloku na %s\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1499
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "podczas odtwarzania z kroniki ext3 dla %s"
 
-#: e2fsck/unix.c:1492
+#: e2fsck/unix.c:1523
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s ma w³±czone nie obs³ugiwane cechy:"
 
-#: e2fsck/unix.c:1507
+#: e2fsck/unix.c:1538
 #, c-format
 msgid "%s: warning: compression support is experimental.\n"
 msgstr "%s: uwaga: obs³uga kompresji jest eksperymentalna.\n"
 
-#: e2fsck/unix.c:1513
+#: e2fsck/unix.c:1544
 #, c-format
 msgid ""
 "%s: e2fsck not compiled with HTREE support,\n"
@@ -3112,25 +3073,25 @@ msgstr ""
 "%s: e2fsck skompilowany bez obs³ugi HTREE,\n"
 "\tale system plików %s ma katalogi HTREE.\n"
 
-#: e2fsck/unix.c:1565
+#: e2fsck/unix.c:1596
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s podczas odczytu i-wêz³a wadliwych bloków\n"
 
-#: e2fsck/unix.c:1568
+#: e2fsck/unix.c:1599
 msgid "This doesn't bode well, but we'll try to go on...\n"
 msgstr "Nie wró¿y to dobrze, ale spróbujê kontynuowaæ...\n"
 
-#: e2fsck/unix.c:1609
+#: e2fsck/unix.c:1640
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Tworzenie kroniki (%d bloków): "
 
-#: e2fsck/unix.c:1619
+#: e2fsck/unix.c:1650
 msgid " Done.\n"
 msgstr " Wykonano.\n"
 
-#: e2fsck/unix.c:1620
+#: e2fsck/unix.c:1651
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
@@ -3138,24 +3099,24 @@ msgstr ""
 "\n"
 "*** kronika zosta³a ponownie utworzona - system plików to znowu ext3 ***\n"
 
-#: e2fsck/unix.c:1643
+#: e2fsck/unix.c:1674
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Restart e2fsck od pocz±tku...\n"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1678
 msgid "while resetting context"
 msgstr "podczas resetowania kontekstu"
 
-#: e2fsck/unix.c:1654
+#: e2fsck/unix.c:1685
 #, c-format
 msgid "%s: e2fsck canceled.\n"
 msgstr "%s: e2fsck przerwany.\n"
 
-#: e2fsck/unix.c:1659
+#: e2fsck/unix.c:1690
 msgid "aborted"
 msgstr "przerwano"
 
-#: e2fsck/unix.c:1671 e2fsck/util.c:67
+#: e2fsck/unix.c:1702 e2fsck/util.c:67
 #, c-format
 msgid ""
 "\n"
@@ -3164,12 +3125,12 @@ msgstr ""
 "\n"
 "%s: ***** SYSTEM PLIKÓW ZMODYFIKOWANY *****\n"
 
-#: e2fsck/unix.c:1675
+#: e2fsck/unix.c:1706
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** WYMAGANY RESTART LINUKSA *****\n"
 
-#: e2fsck/unix.c:1683 e2fsck/util.c:73
+#: e2fsck/unix.c:1714 e2fsck/util.c:73
 #, c-format
 msgid ""
 "\n"
@@ -3180,7 +3141,7 @@ msgstr ""
 "%s: ********** UWAGA: System plików nadal ma b³êdy **********\n"
 "\n"
 
-#: e2fsck/unix.c:1723
+#: e2fsck/unix.c:1754
 msgid "while setting block group checksum info"
 msgstr "podczas ustawiania informacji o sumie kontrolnej grupy bloków"
 
@@ -3313,12 +3274,8 @@ msgid "while allocating zeroizing buffer"
 msgstr "podczas przydzielania bufora zeruj±cego"
 
 #: e2fsck/util.c:788
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"NIEOCZEKIWANA NIESPÓJNO¦Æ: system plików zosta³ zmodyfikowany podczas "
-"dzia³ania fsck.\n"
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "NIEOCZEKIWANA NIESPÓJNO¦Æ: system plików zosta³ zmodyfikowany podczas dzia³ania fsck.\n"
 
 #: misc/badblocks.c:69
 msgid "done                                                 \n"
@@ -3328,8 +3285,7 @@ msgstr "zako
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
-"max_bad_blocks]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
 "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
 "       device [last_block [first_block]]\n"
 msgstr ""
@@ -3511,73 +3467,70 @@ msgstr "podczas dodawania do listy wadliwych blok
 #: misc/badblocks.c:1298
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
-msgstr ""
-"Przebieg zakoñczony, znaleziono %u wadliwych bloków (b³êdów: %d/%d/%d).\n"
+msgstr "Przebieg zakoñczony, znaleziono %u wadliwych bloków (b³êdów: %d/%d/%d).\n"
 
 #: misc/chattr.c:86
 #, c-format
-msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
-msgstr "Sk³adnia: %s [-RVf] [-+=AacDdeijsSu] [-v wersja] pliki...\n"
+msgid "Usage: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] files...\n"
+msgstr "Sk³adnia: %s [-RVf] [-+=AaCcDdeijsSu] [-v wersja] pliki...\n"
 
-#: misc/chattr.c:154
+#: misc/chattr.c:155
 #, c-format
 msgid "bad version - %s\n"
 msgstr "b³êdna wersja - %s\n"
 
-#: misc/chattr.c:201 misc/lsattr.c:116
+#: misc/chattr.c:202 misc/lsattr.c:116
 #, c-format
 msgid "while trying to stat %s"
 msgstr "podczas próby stat %s"
 
-#: misc/chattr.c:208
+#: misc/chattr.c:209
 #, c-format
 msgid "while reading flags on %s"
 msgstr "podczas odczytu flag %s"
 
-#: misc/chattr.c:217 misc/chattr.c:236
+#: misc/chattr.c:218 misc/chattr.c:237
 #, c-format
 msgid "Clearing extent flag not supported on %s"
 msgstr "Usuwanie flagi ekstentów nie jest obs³ugiwane na %s"
 
-#: misc/chattr.c:222 misc/chattr.c:241
+#: misc/chattr.c:223 misc/chattr.c:242
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Flagi %s ustawiono jako "
 
-#: misc/chattr.c:250
+#: misc/chattr.c:251
 #, c-format
 msgid "while setting flags on %s"
 msgstr "podczas ustawiania flag %s"
 
-#: misc/chattr.c:258
+#: misc/chattr.c:259
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Wersja %s ustawiona jako %lu\n"
 
-#: misc/chattr.c:262
+#: misc/chattr.c:263
 #, c-format
 msgid "while setting version on %s"
 msgstr "podczas ustawiania wersji %s"
 
-#: misc/chattr.c:282
+#: misc/chattr.c:283
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Nie mo¿na przydzieliæ zmiennej path w chattr_dir_proc"
 
-#: misc/chattr.c:322
+#: misc/chattr.c:323
 msgid "= is incompatible with - and +\n"
 msgstr "= jest niekompatybilne z - i +\n"
 
-#: misc/chattr.c:330
+#: misc/chattr.c:331
 msgid "Must use '-v', =, - or +\n"
 msgstr "Trzeba u¿yæ '-v', =, - lub +\n"
 
 #: misc/dumpe2fs.c:55
 #, c-format
 msgid "Usage: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Sk³adnia: %s [-bfhixV] [-o superblok=<numer>] [-o blocksize=<rozmiar>] "
-"urz±dzenie\n"
+msgstr "Sk³adnia: %s [-bfhixV] [-o superblok=<numer>] [-o blocksize=<rozmiar>] urz±dzenie\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -3719,9 +3672,9 @@ msgstr ""
 "Pocz±tek kroniki:             %u\n"
 
 #: misc/dumpe2fs.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "Journal errno:            %d\n"
-msgstr "U¿ytkownicy kroniki:          %s\n"
+msgstr "B³±d kroniki:             %d\n"
 
 #: misc/dumpe2fs.c:401 misc/tune2fs.c:218
 msgid "while reading journal superblock"
@@ -3755,7 +3708,7 @@ msgstr ""
 msgid "Journal users:            %s\n"
 msgstr "U¿ytkownicy kroniki:          %s\n"
 
-#: misc/dumpe2fs.c:442 misc/mke2fs.c:662 misc/tune2fs.c:1137
+#: misc/dumpe2fs.c:442 misc/mke2fs.c:665 misc/tune2fs.c:1128
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
 msgstr "Nie mo¿na przydzieliæ pamiêci do analizy opcji!\n"
@@ -3793,12 +3746,12 @@ msgstr ""
 "\tsuperblock=<numer superbloku>\n"
 "\tblocksize=<rozmiar bloku>\n"
 
-#: misc/dumpe2fs.c:554 misc/mke2fs.c:1525
+#: misc/dumpe2fs.c:554 misc/mke2fs.c:1528
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tU¿ywane %s\n"
 
-#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1923
+#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1914
 #: resize/main.c:305
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
@@ -3868,7 +3821,7 @@ msgstr "e2label: b
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: to nie jest system plików ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2074
+#: misc/e2label.c:97 misc/tune2fs.c:2065
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Uwaga: etykieta za d³uga, skrócono.\n"
@@ -3883,7 +3836,7 @@ msgstr "e2label: nie mo
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: b³±d podczas zapisu superbloku\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:803
+#: misc/e2label.c:117 misc/tune2fs.c:794
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
 msgstr "Sk³adnia: e2label urz±dzenie [nowa-etykieta]\n"
@@ -4005,12 +3958,8 @@ msgstr "Nie mo
 
 #: misc/fsck.c:884
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
-"%s: pominiêto b³êdn± liniê w /etc/fstab: montowanie bind z niezerowym "
-"numerem przebiegu fsck\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: pominiêto b³êdn± liniê w /etc/fstab: montowanie bind z niezerowym numerem przebiegu fsck\n"
 
 #: misc/fsck.c:911
 #, c-format
@@ -4027,11 +3976,8 @@ msgid "--waiting-- (pass %d)\n"
 msgstr "--oczekiwanie-- (przebieg %d)\n"
 
 #: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"Sk³adnia: fsck [-AMNPRTV] [ -C [ deskryptor ] ] [-t rodzaj-fs] [opcje-fs] "
-"[system-plików ...]\n"
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Sk³adnia: fsck [-AMNPRTV] [ -C [ deskryptor ] ] [-t rodzaj-fs] [opcje-fs] [system-plików ...]\n"
 
 #: misc/fsck.c:1120
 #, c-format
@@ -4058,7 +4004,7 @@ msgstr "Podczas odczytu flag %s"
 msgid "While reading version on %s"
 msgstr "Podczas odczytu wersji %s"
 
-#: misc/mke2fs.c:114
+#: misc/mke2fs.c:115
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4067,8 +4013,7 @@ msgid ""
 "\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-"
-"count]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]\n"
 msgstr ""
 "Sk³adnia: %s [-c|-l nazwa-pliku] [-b rozm.bloku] [-C rozm.klastra]\n"
 "\t[-i bajtów-na-i-wêze³] [-I rozm-i-wêz³a] [-J opcje-kroniki]\n"
@@ -4076,38 +4021,37 @@ msgstr ""
 "\t[-m procent-rezerw.-bloków] [-o os-twórcy]\n"
 "\t[-g bloków-w-grupie] [-L etykieta-wolumenu] [-M ost.-mont.-katalog]\n"
 "\t[-O cecha[,...]] [-r wersja-fs] [-E opcja-rozszerzona[,...]]\n"
-"\t[-t typ-fs] [-T typ-u¿ycia] [-U UUID] [-jnqvDFKSV] urz±dzenie [liczba-"
-"bloków]\n"
+"\t[-t typ-fs] [-T typ-u¿ycia] [-U UUID] [-jnqvDFKSV] urz±dzenie [liczba-bloków]\n"
 
-#: misc/mke2fs.c:217
+#: misc/mke2fs.c:218
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Uruchamianie polecenia: %s\n"
 
-#: misc/mke2fs.c:221
+#: misc/mke2fs.c:222
 #, c-format
 msgid "while trying to run '%s'"
 msgstr "podczas próby uruchomienia '%s'"
 
-#: misc/mke2fs.c:228
+#: misc/mke2fs.c:229
 msgid "while processing list of bad blocks from program"
 msgstr "podczas przetwarzania listy wadliwych bloków z programu"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:256
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Wadliwy blok %d w g³ównym superbloku/obszarze deskryptora grup.\n"
 
-#: misc/mke2fs.c:257
+#: misc/mke2fs.c:258
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr "Bloki od %u do %u musz± byæ dobre, aby stworzyæ system plików.\n"
 
-#: misc/mke2fs.c:260
+#: misc/mke2fs.c:261
 msgid "Aborting....\n"
 msgstr "Przerwano...\n"
 
-#: misc/mke2fs.c:280
+#: misc/mke2fs.c:281
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -4118,15 +4062,15 @@ msgstr ""
 "\twadliwe bloki.\n"
 "\n"
 
-#: misc/mke2fs.c:299
+#: misc/mke2fs.c:300
 msgid "while marking bad blocks as used"
 msgstr "podczas zaznaczania wadliwych bloków jako u¿ywane"
 
-#: misc/mke2fs.c:316
+#: misc/mke2fs.c:317
 msgid "Writing inode tables: "
 msgstr "Zapis tablicy i-wêz³ów: "
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:339
 #, c-format
 msgid ""
 "\n"
@@ -4135,72 +4079,72 @@ msgstr ""
 "\n"
 "Nie uda³o siê zapisaæ %d bloków w tablicy i-wêz³ów pocz±wszy od %llu: %s\n"
 
-#: misc/mke2fs.c:351 misc/mke2fs.c:2175 misc/mke2fs.c:2429
+#: misc/mke2fs.c:353 misc/mke2fs.c:2181 misc/mke2fs.c:2435
 #, c-format
 msgid "done                            \n"
 msgstr "zakoñczono                      \n"
 
-#: misc/mke2fs.c:362
+#: misc/mke2fs.c:364
 msgid "while creating root dir"
 msgstr "podczas tworzenia g³ównego katalogu"
 
-#: misc/mke2fs.c:369
+#: misc/mke2fs.c:371
 msgid "while reading root inode"
 msgstr "podczas odczytu g³ównego i-wêz³a"
 
-#: misc/mke2fs.c:383
+#: misc/mke2fs.c:385
 msgid "while setting root inode ownership"
 msgstr "podczas ustawiania w³a¶ciciela g³ównego i-wêz³a"
 
-#: misc/mke2fs.c:401
+#: misc/mke2fs.c:403
 msgid "while creating /lost+found"
 msgstr "podczas tworzenia /lost+found"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:410
 msgid "while looking up /lost+found"
 msgstr "podczas szukania /lost+found"
 
-#: misc/mke2fs.c:421
+#: misc/mke2fs.c:423
 msgid "while expanding /lost+found"
 msgstr "podczas rozszerzania /lost+found"
 
-#: misc/mke2fs.c:436
+#: misc/mke2fs.c:438
 msgid "while setting bad block inode"
 msgstr "podczas ustawiania i-wêz³a wadliwych bloków"
 
-#: misc/mke2fs.c:463
+#: misc/mke2fs.c:465
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Brak pamiêci podczas czyszczenia sektorów %d-%d\n"
 
-#: misc/mke2fs.c:473
+#: misc/mke2fs.c:475
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Uwaga: nie mo¿na odczytaæ bloku 0: %s\n"
 
-#: misc/mke2fs.c:489
+#: misc/mke2fs.c:491
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Uwaga: nie mo¿na wyczy¶ciæ sektora %d: %s\n"
 
-#: misc/mke2fs.c:505
+#: misc/mke2fs.c:507
 msgid "while initializing journal superblock"
 msgstr "podczas inicjalizacji superbloku kroniki"
 
-#: misc/mke2fs.c:513
+#: misc/mke2fs.c:515
 msgid "Zeroing journal device: "
 msgstr "Zerowanie urz±dzenia kroniki: "
 
-#: misc/mke2fs.c:525
+#: misc/mke2fs.c:527
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "podczas zerowania urz±dzenia kroniki (blok %llu, liczba %d)"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:546
 msgid "while writing journal superblock"
 msgstr "podczas zapisu superbloku kroniki"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:561
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -4209,125 +4153,122 @@ msgstr ""
 "uwaga: %llu bloków nie u¿ywanych.\n"
 "\n"
 
-#: misc/mke2fs.c:563
+#: misc/mke2fs.c:566
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Etykieta systemu plików=%s\n"
 
-#: misc/mke2fs.c:566
+#: misc/mke2fs.c:569
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Typ OS: %s\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:571
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Rozmiar bloku=%u (log=%u)\n"
 
-#: misc/mke2fs.c:572
+#: misc/mke2fs.c:575
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Rozmiar klastra=%u (log=%u)\n"
 
-#: misc/mke2fs.c:576
+#: misc/mke2fs.c:579
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Rozmiar fragmentu=%u (log=%u)\n"
 
-#: misc/mke2fs.c:578
+#: misc/mke2fs.c:581
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Stride=%u bloków, szeroko¶æ Stripe=%u bloków\n"
 
-#: misc/mke2fs.c:580
+#: misc/mke2fs.c:583
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u i-wêz³ów, %llu bloków\n"
 
-#: misc/mke2fs.c:582
+#: misc/mke2fs.c:585
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu bloków (%2.2f%%) zarezerwowanych dla superu¿ytkownika\n"
 
-#: misc/mke2fs.c:585
+#: misc/mke2fs.c:588
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Pierwszy blok danych=%u\n"
 
-#: misc/mke2fs.c:587
+#: misc/mke2fs.c:590
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maksymalna liczba bloków systemu plików=%lu\n"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:594
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u grup bloków\n"
 
-#: misc/mke2fs.c:593
+#: misc/mke2fs.c:596
 #, c-format
 msgid "%u block group\n"
 msgstr "%u grupa bloków\n"
 
-#: misc/mke2fs.c:596
+#: misc/mke2fs.c:599
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u bloków w grupie, %u klastrów w grupie\n"
 
-#: misc/mke2fs.c:599
+#: misc/mke2fs.c:602
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u bloków w grupie, %u fragmentów w grupie\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:604
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u i-wêz³ów w grupie\n"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:611
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Kopie zapasowe superbloku zapisane w blokach: "
 
-#: misc/mke2fs.c:687 misc/tune2fs.c:1165
+#: misc/mke2fs.c:690 misc/tune2fs.c:1156
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "B³êdny okres uaktualniania mmp: %s\n"
 
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:704
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "B³êdny parametr stride: %s\n"
 
-#: misc/mke2fs.c:716
+#: misc/mke2fs.c:719
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "B³êdny parametr stripe-width: %s\n"
 
-#: misc/mke2fs.c:739
+#: misc/mke2fs.c:742
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "B³êdny parametr resize: %s\n"
 
-#: misc/mke2fs.c:746
+#: misc/mke2fs.c:749
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"Maksymalny rozmiar (resize) musi byæ wiêkszy od rozmiaru systemu plików.\n"
+msgstr "Maksymalny rozmiar (resize) musi byæ wiêkszy od rozmiaru systemu plików.\n"
 
-#: misc/mke2fs.c:770
+#: misc/mke2fs.c:773
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
-msgstr ""
-"Zmiana rozmiaru w locie nie jest obs³ugiwana przez systemy plików w wersji "
-"0\n"
+msgstr "Zmiana rozmiaru w locie nie jest obs³ugiwana przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:811
 #, c-format
 msgid "Invalid quotatype parameter: %s\n"
 msgstr "B³êdny parametr quotatype: %s\n"
 
-#: misc/mke2fs.c:819
+#: misc/mke2fs.c:822
 #, c-format
 msgid ""
 "\n"
@@ -4366,7 +4307,7 @@ msgstr ""
 "\tquotatype=<usr LUB grp>\n"
 "\n"
 
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:842
 #, c-format
 msgid ""
 "\n"
@@ -4377,7 +4318,7 @@ msgstr ""
 "Uwaga: RAID stripe-width %u nie jest parzyst± wielokrotno¶ci± stride %u.\n"
 "\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:881
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -4386,17 +4327,17 @@ msgstr ""
 "B³±d sk³adni w pliku konfiguracyjnym mke2fs (%s, linia %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:891 misc/tune2fs.c:393
+#: misc/mke2fs.c:894 misc/tune2fs.c:393
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ustawiona b³êdna opcja systemu plików: %s\n"
 
-#: misc/mke2fs.c:903 misc/tune2fs.c:345
+#: misc/mke2fs.c:906 misc/tune2fs.c:345
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ustawiona b³êdna opcja montowania: %s\n"
 
-#: misc/mke2fs.c:1043
+#: misc/mke2fs.c:1046
 #, c-format
 msgid ""
 "\n"
@@ -4405,7 +4346,7 @@ msgstr ""
 "\n"
 "Uwaga! Plik mke2fs.conf nie okre¶la typu systemu plików %s.\n"
 
-#: misc/mke2fs.c:1047
+#: misc/mke2fs.c:1050
 #, c-format
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
@@ -4414,12 +4355,12 @@ msgstr ""
 "Prawdopodobnie trzeba zainstalowaæ uaktualniony plik mke2fs.conf.\n"
 "\n"
 
-#: misc/mke2fs.c:1051
+#: misc/mke2fs.c:1054
 #, c-format
 msgid "Aborting...\n"
 msgstr "Przerwano...\n"
 
-#: misc/mke2fs.c:1091
+#: misc/mke2fs.c:1094
 #, c-format
 msgid ""
 "\n"
@@ -4430,122 +4371,118 @@ msgstr ""
 "Uwaga: typ systemu plików %s nie jest zdefiniowany w mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1249
+#: misc/mke2fs.c:1252
 #, c-format
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Nie uda³o siê przydzieliæ pamiêci na now± PATH\n"
 
-#: misc/mke2fs.c:1290
+#: misc/mke2fs.c:1293
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Nie uda³o siê poprawnie zainicjowaæ profilu (b³±d: %ld).\n"
 
-#: misc/mke2fs.c:1330
+#: misc/mke2fs.c:1333
 #, c-format
 msgid "invalid block size - %s"
 msgstr "b³êdny rozmiar bloku - %s"
 
-#: misc/mke2fs.c:1334
+#: misc/mke2fs.c:1337
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Uwaga: rozmiar bloku %d nie u¿ywalny na wiêkszo¶ci systemów.\n"
 
-#: misc/mke2fs.c:1350
+#: misc/mke2fs.c:1353
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "b³êdny rozmiar klastra - %s"
 
-#: misc/mke2fs.c:1362
+#: misc/mke2fs.c:1365
 msgid "Illegal number for blocks per group"
 msgstr "B³êdna liczba bloków w grupie"
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1370
 msgid "blocks per group must be multiple of 8"
 msgstr "liczba bloków w grupie musi byæ wielokrotno¶ci± 8"
 
-#: misc/mke2fs.c:1375
+#: misc/mke2fs.c:1378
 msgid "Illegal number for flex_bg size"
 msgstr "Niedopuszczalny rozmiar flex_bg"
 
-#: misc/mke2fs.c:1381
+#: misc/mke2fs.c:1384
 msgid "flex_bg size must be a power of 2"
 msgstr "rozmiar flex_bg musi byæ potêg± 2"
 
-#: misc/mke2fs.c:1391
+#: misc/mke2fs.c:1394
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "b³êdny stosunek i-wêz³ów %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1401
+#: misc/mke2fs.c:1404
 #, c-format
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Uwaga: opcja -K jest przestarza³a i nie powinna ju¿ byæ u¿ywana. Zamiast "
-"niej nale¿y u¿yæ opcji rozszerzonej '-E nodiscard'.\n"
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Uwaga: opcja -K jest przestarza³a i nie powinna ju¿ byæ u¿ywana. Zamiast niej nale¿y u¿yæ opcji rozszerzonej '-E nodiscard'.\n"
 
-#: misc/mke2fs.c:1415
+#: misc/mke2fs.c:1418
 msgid "in malloc for bad_blocks_filename"
 msgstr "w malloc dla bad_blocks_filename"
 
-#: misc/mke2fs.c:1425
+#: misc/mke2fs.c:1428
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "b³êdny procent zarezerwowanych bloków - %s"
 
-#: misc/mke2fs.c:1443
+#: misc/mke2fs.c:1446
 #, c-format
 msgid "bad revision level - %s"
 msgstr "b³êdny poziom wersji - %s"
 
-#: misc/mke2fs.c:1455
+#: misc/mke2fs.c:1458
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "b³êdny rozmiar i-wêz³a - %s"
 
-#: misc/mke2fs.c:1475
+#: misc/mke2fs.c:1478
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "b³êdna liczba i-wêz³ów - %s"
 
-#: misc/mke2fs.c:1492
+#: misc/mke2fs.c:1495
 msgid "The -t option may only be used once"
 msgstr "Opcja -t mo¿e byæ u¿yta tylko raz"
 
-#: misc/mke2fs.c:1500
+#: misc/mke2fs.c:1503
 msgid "The -T option may only be used once"
 msgstr "Opcja -T mo¿e byæ u¿yta tylko raz"
 
-#: misc/mke2fs.c:1550 misc/mke2fs.c:2508
+#: misc/mke2fs.c:1553 misc/mke2fs.c:2514
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "podczas próby otwarcia urz±dzenia kroniki %s\n"
 
-#: misc/mke2fs.c:1556
+#: misc/mke2fs.c:1559
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Rozmiar bloku urz±dzenia z kronik± (%d) mniejszy od minimalnego %d\n"
 
-#: misc/mke2fs.c:1562
+#: misc/mke2fs.c:1565
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "U¿ycie rozmiaru bloku urz±dzenia kroniki: %d\n"
 
-#: misc/mke2fs.c:1573
+#: misc/mke2fs.c:1576
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
 msgstr "b³êdna liczba bloków '%s' na urz±dzeniu '%s'"
 
-#: misc/mke2fs.c:1583
+#: misc/mke2fs.c:1586
 msgid "filesystem"
 msgstr "system plików"
 
-#: misc/mke2fs.c:1596 resize/main.c:374
+#: misc/mke2fs.c:1599 resize/main.c:355
 msgid "while trying to determine filesystem size"
 msgstr "podczas próby okre¶lenia rozmiaru systemu plików"
 
-#: misc/mke2fs.c:1602
+#: misc/mke2fs.c:1605
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -4553,7 +4490,7 @@ msgstr ""
 "Nie mo¿na okre¶liæ rozmiaru urz±dzenia; rozmiar systemu\n"
 "plików musi byæ podany\n"
 
-#: misc/mke2fs.c:1609
+#: misc/mke2fs.c:1612
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4565,16 +4502,16 @@ msgstr ""
 "\tfdiska z powodu zajêtej modyfikowanej partycji. Ponowny odczyt\n"
 "\ttablicy partycji mo¿e wymagaæ rebootu.\n"
 
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1629
 msgid "Filesystem larger than apparent device size."
 msgstr "System plików wiêkszy od widocznego rozmiaru urz±dzenia."
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1649
 #, c-format
 msgid "Failed to parse fs types list\n"
 msgstr "Nie uda³o siê przeanalizowaæ listy typów systemów plików\n"
 
-#: misc/mke2fs.c:1700
+#: misc/mke2fs.c:1703
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -4583,32 +4520,31 @@ msgstr ""
 "%s: Rozmiar urz±dzenia (0x%llx bloków) %s jest zbyt du¿y, aby wyraziæ go\n"
 "\tw 32 bitach przy u¿yciu rozmiaru bloku %d.\n"
 
-#: misc/mke2fs.c:1716
+#: misc/mke2fs.c:1719
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "Rozwiniêcie fs_types dla mke2fs.conf: "
 
-#: misc/mke2fs.c:1723
+#: misc/mke2fs.c:1726
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr "Cechy systemu plików nie obs³ugiwane przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:1730
+#: misc/mke2fs.c:1733
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
-msgstr ""
-"Rzadkie superbloki nie s± obs³ugiwane przez systemy plików w wersji 0\n"
+msgstr "Rzadkie superbloki nie s± obs³ugiwane przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:1742
+#: misc/mke2fs.c:1745
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr "Kroniki nie s± obs³ugiwane przez systemy plików w wersji 0\n"
 
-#: misc/mke2fs.c:1756
+#: misc/mke2fs.c:1759
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "b³êdny procent zarezerwowanych bloków - %lf"
 
-#: misc/mke2fs.c:1772
+#: misc/mke2fs.c:1775
 #, c-format
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
@@ -4617,88 +4553,76 @@ msgstr ""
 "Cechy resize_inode i meta_bg nie s± kompatybilne.\n"
 "Nie mo¿na ich w³±czyæ jednocze¶nie.\n"
 
-#: misc/mke2fs.c:1789
+#: misc/mke2fs.c:1792
 msgid "while trying to determine hardware sector size"
 msgstr "podczas próby okre¶lenia rozmiaru sprzêtowego sektora"
 
-#: misc/mke2fs.c:1795
+#: misc/mke2fs.c:1798
 msgid "while trying to determine physical sector size"
 msgstr "podczas próby okre¶lenia rozmiaru sektora fizycznego"
 
-#: misc/mke2fs.c:1828
+#: misc/mke2fs.c:1831
 msgid "while setting blocksize; too small for device\n"
 msgstr "podczas ustawiania rozmiaru bloku; zbyt ma³y dla urz±dzenia\n"
 
-#: misc/mke2fs.c:1833
+#: misc/mke2fs.c:1836
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Uwaga: podany rozmiar bloku %d jest mniejszy ni¿ rozmiar sektora fizycznego "
-"%d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Uwaga: podany rozmiar bloku %d jest mniejszy ni¿ rozmiar sektora fizycznego %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1867
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "uwaga: nie uda³o siê odczytaæ geometrii urz±dzenia dla %s\n"
 
-#: misc/mke2fs.c:1867
+#: misc/mke2fs.c:1870
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "Wyrównanie %s jest przesuniête o %lu bajtów.\n"
 
-#: misc/mke2fs.c:1869
+#: misc/mke2fs.c:1872
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
-msgstr ""
-"Mo¿e to powodowaæ bardzo nisk± wydajno¶æ, zalecane jest (prze)"
-"partycjonowanie.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Mo¿e to powodowaæ bardzo nisk± wydajno¶æ, zalecane jest (prze)partycjonowanie.\n"
 
-#: misc/mke2fs.c:1880
+#: misc/mke2fs.c:1883
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "%d-bajtowe bloki s± zbyt du¿e dla systemu (max %d)"
 
-#: misc/mke2fs.c:1884
+#: misc/mke2fs.c:1887
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
-msgstr ""
-"Uwaga: %d-bajtowe bloki s± zbyt du¿e dla systemu (max %d), wymuszono "
-"kontynuacjê\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Uwaga: %d-bajtowe bloki s± zbyt du¿e dla systemu (max %d), wymuszono kontynuacjê\n"
 
-#: misc/mke2fs.c:1920
+#: misc/mke2fs.c:1925
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
-msgstr ""
-"zarezerwowane bloki do zmiany rozmiaru w locie nie obs³ugiwane na nieci±g³ym "
-"systemie plików"
+msgstr "zarezerwowane bloki do zmiany rozmiaru w locie nie obs³ugiwane na nieci±g³ym systemie plików"
 
-#: misc/mke2fs.c:1929
+#: misc/mke2fs.c:1934
 msgid "blocks per group count out of range"
 msgstr "liczba bloków w grupie spoza zakresu"
 
-#: misc/mke2fs.c:1944
+#: misc/mke2fs.c:1949
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"Cecha flex_bg nie jest w³±czona, wiêc nie mo¿na okre¶liæ rozmiaru flex_bg"
+msgstr "Cecha flex_bg nie jest w³±czona, wiêc nie mo¿na okre¶liæ rozmiaru flex_bg"
 
-#: misc/mke2fs.c:1956
+#: misc/mke2fs.c:1961
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "b³êdny rozmiar i-wêz³a %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1974
+#: misc/mke2fs.c:1979
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "zbyt du¿o i-wêz³ów (%llu), zwiêkszyæ wspó³czynnik i-wêz³ów?"
 
-#: misc/mke2fs.c:1981
+#: misc/mke2fs.c:1986
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "zbyt du¿o i-wêz³ów (%llu), nale¿y podaæ < 2^32"
 
-#: misc/mke2fs.c:1995
+#: misc/mke2fs.c:2000
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4709,7 +4633,7 @@ msgstr ""
 "\tplików o liczbie bloków %llu, nale¿y podaæ wiêkszy wspó³czynnik (-i)\n"
 "\tlub mniejsz± liczbê i-wêz³ów (-N).\n"
 
-#: misc/mke2fs.c:2114
+#: misc/mke2fs.c:2119
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -4720,44 +4644,42 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/mke2fs.c:2128
+#: misc/mke2fs.c:2133
 msgid "while trying to setup undo file\n"
 msgstr "podczas próby utworzenia pliku cofniêcia (undo)\n"
 
-#: misc/mke2fs.c:2154
+#: misc/mke2fs.c:2159
 msgid "Discarding device blocks: "
 msgstr "Porzucanie bloków urz±dzenia: "
 
-#: misc/mke2fs.c:2170
+#: misc/mke2fs.c:2176
 msgid "failed - "
 msgstr "nie powiod³o siê - "
 
-#: misc/mke2fs.c:2277
+#: misc/mke2fs.c:2283
 msgid "while setting up superblock"
 msgstr "podczas ustawiania superbloku"
 
-#: misc/mke2fs.c:2286
+#: misc/mke2fs.c:2292
 #, c-format
 msgid "Discard succeeded and will return 0s  - skipping inode table wipe\n"
-msgstr ""
-"Czyszczenie siê powiod³o i bêdzie zwracaæ zera - pominiêto czyszczenie "
-"tablicy i-wêz³ów\n"
+msgstr "Czyszczenie siê powiod³o i bêdzie zwracaæ zera - pominiêto czyszczenie tablicy i-wêz³ów\n"
 
-#: misc/mke2fs.c:2369
+#: misc/mke2fs.c:2375
 #, c-format
 msgid "unknown os - %s"
 msgstr "nieznany os - %s"
 
-#: misc/mke2fs.c:2421
+#: misc/mke2fs.c:2427
 #, c-format
 msgid "Allocating group tables: "
 msgstr "Przydzielanie tablicy grup: "
 
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2431
 msgid "while trying to allocate filesystem tables"
 msgstr "podczas próby przydzielenia tablic systemu plików"
 
-#: misc/mke2fs.c:2434
+#: misc/mke2fs.c:2440
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -4765,25 +4687,25 @@ msgstr ""
 "\n"
 "\tpodczas próby przekszta³cenia bitmapy podklastrów"
 
-#: misc/mke2fs.c:2477
+#: misc/mke2fs.c:2483
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "podczas zerowania bloku %llu na koñcu systemu plików"
 
-#: misc/mke2fs.c:2490
+#: misc/mke2fs.c:2496
 msgid "while reserving blocks for online resize"
 msgstr "podczas rezerwowania bloków na zmianê rozmiaru w locie"
 
-#: misc/mke2fs.c:2501 misc/tune2fs.c:640
+#: misc/mke2fs.c:2507 misc/tune2fs.c:640
 msgid "journal"
 msgstr "kronika"
 
-#: misc/mke2fs.c:2513
+#: misc/mke2fs.c:2519
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Dodano kronikê do urz±dzenia %s: "
 
-#: misc/mke2fs.c:2520
+#: misc/mke2fs.c:2526
 #, c-format
 msgid ""
 "\n"
@@ -4792,22 +4714,22 @@ msgstr ""
 "\n"
 "\tpodczas próby dodania kroniki do urz±dzenia %s"
 
-#: misc/mke2fs.c:2525 misc/mke2fs.c:2557 misc/tune2fs.c:669 misc/tune2fs.c:683
+#: misc/mke2fs.c:2531 misc/mke2fs.c:2563 misc/tune2fs.c:669 misc/tune2fs.c:683
 #, c-format
 msgid "done\n"
 msgstr "wykonano\n"
 
-#: misc/mke2fs.c:2534
+#: misc/mke2fs.c:2540
 #, c-format
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Pominiêto tworzenie kroniki w trybie super-only\n"
 
-#: misc/mke2fs.c:2545
+#: misc/mke2fs.c:2551
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Tworzenie kroniki (%u bloków): "
 
-#: misc/mke2fs.c:2553
+#: misc/mke2fs.c:2559
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -4815,7 +4737,7 @@ msgstr ""
 "\n"
 "\tpodczas próby utworzenia kroniki"
 
-#: misc/mke2fs.c:2564 misc/tune2fs.c:446
+#: misc/mke2fs.c:2570 misc/tune2fs.c:446
 #, c-format
 msgid ""
 "\n"
@@ -4824,19 +4746,17 @@ msgstr ""
 "\n"
 "B³±d podczas w³±czania funkcji zabezpieczenia przed wielokrotnym montowaniem."
 
-#: misc/mke2fs.c:2569
+#: misc/mke2fs.c:2575
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
-msgstr ""
-"Zabezpieczenie przed wielokrotnym montowaniem jest w³±czone z okresem "
-"uaktualniania %d sekund.\n"
+msgstr "Zabezpieczenie przed wielokrotnym montowaniem jest w³±czone z okresem uaktualniania %d sekund.\n"
 
-#: misc/mke2fs.c:2582
+#: misc/mke2fs.c:2588
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Zapis superbloków i podsumowania systemu plików: "
 
-#: misc/mke2fs.c:2589
+#: misc/mke2fs.c:2595
 #, c-format
 msgid ""
 "\n"
@@ -4845,7 +4765,7 @@ msgstr ""
 "\n"
 "Uwaga, problemy z zapisem superbloków."
 
-#: misc/mke2fs.c:2591
+#: misc/mke2fs.c:2597
 #, c-format
 msgid ""
 "done\n"
@@ -4903,8 +4823,7 @@ msgstr "Prosz
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
-"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p "
-"mmp_update_interval]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p mmp_update_interval]\n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
@@ -4912,8 +4831,7 @@ msgid ""
 msgstr ""
 "Sk³adnia: %s [-c max_licznik_montowañ] [-e trakt._b³êdów] [-g grupa]\n"
 "\t[-i odstêp[d|m|w]] [-j] [-J opcje_kroniki] [-l]\n"
-"\t[-m procent_rezerw._bloków] [-o [^]opcje_montowania[,...]] [-p okres_uakt."
-"_mmp]\n"
+"\t[-m procent_rezerw._bloków] [-o [^]opcje_montowania[,...]] [-p okres_uakt._mmp]\n"
 "\t[-r liczba_zarez._bloków] [-u u¿ytkownik] [-C licznik_montowañ]\n"
 "\t[-L etykieta_wolumenu] [-M ostatnio_mont._katalog] [-O [^]cecha[,...]]\n"
 "\t[-E opcja_rozszerzona[,...]] [-T czas_ost._sprawdz.] [-U UUID]\n"
@@ -5003,9 +4921,7 @@ msgstr ""
 #: misc/tune2fs.c:456
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
-msgstr ""
-"Zavezpieczenie przed wielokrotnym montowaniem zosta³a w³±czona z czasem "
-"uaktualniania %ds.\n"
+msgstr "Zavezpieczenie przed wielokrotnym montowaniem zosta³a w³±czona z czasem uaktualniania %ds.\n"
 
 #: misc/tune2fs.c:465
 msgid ""
@@ -5085,17 +5001,16 @@ msgstr ""
 "\n"
 "\tpodczas próby utworzenia pliku kroniki"
 
-#: misc/tune2fs.c:763
+#: misc/tune2fs.c:754
 msgid "Couldn't allocate memory to parse quota options!\n"
 msgstr "Nie mo¿na przydzieliæ pamiêci do analizy opcji limitów!\n"
 
-#: misc/tune2fs.c:785
+#: misc/tune2fs.c:776
 msgid ""
 "\n"
 "Bad quota options specified.\n"
 "\n"
-"Following valid quota options are available (pass by separating with "
-"comma):\n"
+"Following valid quota options are available (pass by separating with comma):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
@@ -5104,112 +5019,104 @@ msgstr ""
 "\n"
 "Podano b³êdne opcje limitów.\n"
 "\n"
-"Dostêpne s± nastêpuj±ce opcje limitów (mo¿na je przekazywaæ oddzielone "
-"przecinkiem):\n"
+"Dostêpne s± nastêpuj±ce opcje limitów (mo¿na je przekazywaæ oddzielone przecinkiem):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:846
+#: misc/tune2fs.c:837
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Nie mo¿na przeanalizowaæ podanej daty/czasu: %s"
 
-#: misc/tune2fs.c:870 misc/tune2fs.c:883
+#: misc/tune2fs.c:861 misc/tune2fs.c:874
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "b³êdna liczba montowañ - %s"
 
-#: misc/tune2fs.c:899
+#: misc/tune2fs.c:890
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "b³êdne traktowanie b³êdów - %s"
 
-#: misc/tune2fs.c:926
+#: misc/tune2fs.c:917
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "b³êdny gid/nazwa grupy - %s"
 
-#: misc/tune2fs.c:959
+#: misc/tune2fs.c:950
 #, c-format
 msgid "bad interval - %s"
 msgstr "b³êdny odstêp - %s"
 
-#: misc/tune2fs.c:988
+#: misc/tune2fs.c:979
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "b³êdny procent zarezerwowanych bloków - %s"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:994
 msgid "-o may only be specified once"
 msgstr "-o mo¿e byæ podane tylko raz"
 
-#: misc/tune2fs.c:1012
+#: misc/tune2fs.c:1003
 msgid "-O may only be specified once"
 msgstr "-O mo¿e byæ podane tylko raz"
 
-#: misc/tune2fs.c:1027
+#: misc/tune2fs.c:1018
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "b³êdna liczba zarezerwowanych bloków - %s"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1047
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "b³êdny uid/nazwa u¿ytkownika - %s"
 
-#: misc/tune2fs.c:1073
+#: misc/tune2fs.c:1064
 #, c-format
 msgid "bad inode size - %s"
 msgstr "b³êdny rozmiar i-wêz³a - %s"
 
-#: misc/tune2fs.c:1080
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Rozmiar i-wêz³a musi byæ potêg± dwójki - %s"
 
-#: misc/tune2fs.c:1174
+#: misc/tune2fs.c:1165
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "Okres uaktualniania mmp zbyt du¿y: %lu\n"
 
-#: misc/tune2fs.c:1179
+#: misc/tune2fs.c:1170
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
-msgid_plural ""
-"Setting multiple mount protection update interval to %lu seconds\n"
-msgstr[0] ""
-"Ustawianie okresu uaktualniania zabezpieczenia przed wielokrotnym "
-"montowaniem na %lu sekundê\n"
-msgstr[1] ""
-"Ustawianie okresu uaktualniania zabezpieczenia przed wielokrotnym "
-"montowaniem na %lu sekundy\n"
-msgstr[2] ""
-"Ustawianie okresu uaktualniania zabezpieczenia przed wielokrotnym "
-"montowaniem na %lu sekund\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Ustawianie okresu uaktualniania zabezpieczenia przed wielokrotnym montowaniem na %lu sekundê\n"
+msgstr[1] "Ustawianie okresu uaktualniania zabezpieczenia przed wielokrotnym montowaniem na %lu sekundy\n"
+msgstr[2] "Ustawianie okresu uaktualniania zabezpieczenia przed wielokrotnym montowaniem na %lu sekund\n"
 
-#: misc/tune2fs.c:1202
+#: misc/tune2fs.c:1193
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "B³êdny parametr RAID stride: %s\n"
 
-#: misc/tune2fs.c:1217
+#: misc/tune2fs.c:1208
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "B³êdny parametr RAID stripe-width: %s\n"
 
-#: misc/tune2fs.c:1232
+#: misc/tune2fs.c:1223
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "B³êdny algorytm haszowania: %s\n"
 
-#: misc/tune2fs.c:1238
+#: misc/tune2fs.c:1229
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Ustawianie domy¶lnego algorytmu haszowania na %s (%d)\n"
 
-#: misc/tune2fs.c:1257
+#: misc/tune2fs.c:1248
 #, c-format
 msgid ""
 "\n"
@@ -5242,33 +5149,31 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:1723
+#: misc/tune2fs.c:1714
 msgid "Failed to read inode bitmap\n"
 msgstr "Nie uda³o siê odczytaæ bitmapy i-wêz³ów\n"
 
-#: misc/tune2fs.c:1728
+#: misc/tune2fs.c:1719
 msgid "Failed to read block bitmap\n"
 msgstr "Nie uda³o siê odczytaæ bitmapy bloków\n"
 
-#: misc/tune2fs.c:1745 resize/resize2fs.c:784
+#: misc/tune2fs.c:1736 resize/resize2fs.c:802
 msgid "blocks to be moved"
 msgstr "bloki do przeniesienia"
 
-#: misc/tune2fs.c:1748
+#: misc/tune2fs.c:1739
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr ""
-"Nie uda³o siê przydzieliæ bitmapy bloków podczas zwiêkszania rozmiaru i-"
-"wêz³a\n"
+msgstr "Nie uda³o siê przydzieliæ bitmapy bloków podczas zwiêkszania rozmiaru i-wêz³a\n"
 
-#: misc/tune2fs.c:1754
+#: misc/tune2fs.c:1745
 msgid "Not enough space to increase inode size \n"
 msgstr "Za ma³o miejsca, aby zwiêkszyæ rozmiar i-wêz³a\n"
 
-#: misc/tune2fs.c:1759
+#: misc/tune2fs.c:1750
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "Nie uda³o siê przemie¶ciæ bloków podczas zmiany rozmiaru i-wêz³a\n"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1782
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
@@ -5276,16 +5181,16 @@ msgstr ""
 "B³±d podczas zmiany rozmiaru i-wêz³a.\n"
 "Nale¿y uruchomiæ e2undo w celu wycofania zmian w systemie plików.\n"
 
-#: misc/tune2fs.c:1818
+#: misc/tune2fs.c:1809
 msgid "Couldn't allocate memory for tdb filename\n"
 msgstr "Nie mo¿na przydzieliæ pamiêci na nazwê plików tdb\n"
 
-#: misc/tune2fs.c:1840
+#: misc/tune2fs.c:1831
 #, c-format
 msgid "while trying to delete %s"
 msgstr "podczas próby usuniêcia %s"
 
-#: misc/tune2fs.c:1850
+#: misc/tune2fs.c:1841
 #, c-format
 msgid ""
 "To undo the tune2fs operation please run the command\n"
@@ -5296,72 +5201,71 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/tune2fs.c:1919
+#: misc/tune2fs.c:1910
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
-"Liczba magiczna bloku MMP jest b³êdna. Mo¿na próbowaæ to naprawiæ "
-"uruchamiaj±c:\n"
+"Liczba magiczna bloku MMP jest b³êdna. Mo¿na próbowaæ to naprawiæ uruchamiaj±c:\n"
 "'e2fsck -f %s'\n"
 
-#: misc/tune2fs.c:1937
+#: misc/tune2fs.c:1928
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Rozmiar i-wêz³a ju¿ wynosi %lu\n"
 
-#: misc/tune2fs.c:1943
+#: misc/tune2fs.c:1934
 #, c-format
 msgid "Shrinking the inode size is not supported\n"
 msgstr "Zmniejszanie rozmiaru i-wêz³a nie jest obs³ugiwane\n"
 
-#: misc/tune2fs.c:1990
+#: misc/tune2fs.c:1981
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Ustawianie maksymalnej liczby montowañ na %d\n"
 
-#: misc/tune2fs.c:1996
+#: misc/tune2fs.c:1987
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Ustawianie aktualnego licznika montowañ na %d\n"
 
-#: misc/tune2fs.c:2001
+#: misc/tune2fs.c:1992
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Ustawianie traktowania b³êdów na %d\n"
 
-#: misc/tune2fs.c:2006
+#: misc/tune2fs.c:1997
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Ustawianie gid-a zarezerwowanych bloków na %lu\n"
 
-#: misc/tune2fs.c:2011
+#: misc/tune2fs.c:2002
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "odstêp pomiêdzy sprawdzeniami jest zbyt du¿y (%lu)"
 
-#: misc/tune2fs.c:2018
+#: misc/tune2fs.c:2009
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Ustawianie odstêpu pomiêdzy sprawdzeniami na %lu sekund\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2016
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Ustawianie procentu zarezerwowanych bloków na %g%% (%llu bloków)\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2022
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "liczba zarezerwowanych bloków jest zbyt du¿a (%llu)"
 
-#: misc/tune2fs.c:2038
+#: misc/tune2fs.c:2029
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Ustawianie liczby zarezerwowanych bloków na %llu\n"
 
-#: misc/tune2fs.c:2044
+#: misc/tune2fs.c:2035
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -5369,7 +5273,7 @@ msgstr ""
 "\n"
 "System plików ju¿ ma rzadkie superbloki.\n"
 
-#: misc/tune2fs.c:2051
+#: misc/tune2fs.c:2042
 #, c-format
 msgid ""
 "\n"
@@ -5378,7 +5282,7 @@ msgstr ""
 "\n"
 "Flaga rzadkich superbloków ustawiona. %s"
 
-#: misc/tune2fs.c:2056
+#: misc/tune2fs.c:2047
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -5386,36 +5290,33 @@ msgstr ""
 "\n"
 "Usuwanie superflagi sparse nie jest obs³ugiwane.\n"
 
-#: misc/tune2fs.c:2064
+#: misc/tune2fs.c:2055
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Ustawianie czasu ostatniego sprawdzenia systemu plików na %s\n"
 
-#: misc/tune2fs.c:2070
+#: misc/tune2fs.c:2061
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Ustawianie uid-a zarezerwowanych bloków na %lu\n"
 
-#: misc/tune2fs.c:2102
+#: misc/tune2fs.c:2093
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "B³±d w u¿yciu clear_mmp. Opcja ta musi byæ u¿yta z -f\n"
 
-#: misc/tune2fs.c:2120
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Funkcjê limitów mo¿na zmieniæ tylko na niezamontowanym systemie plików.\n"
+#: misc/tune2fs.c:2111
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "Funkcjê limitów mo¿na zmieniæ tylko na niezamontowanym systemie plików.\n"
 
-#: misc/tune2fs.c:2153
+#: misc/tune2fs.c:2144
 msgid "Invalid UUID format\n"
 msgstr "B³êdny format UUID-a\n"
 
-#: misc/tune2fs.c:2166
+#: misc/tune2fs.c:2157
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Rozmiar i-wêz³a mo¿na zmieniæ tylko na niezamontowanym systemie plików.\n"
+msgstr "Rozmiar i-wêz³a mo¿na zmieniæ tylko na niezamontowanym systemie plików.\n"
 
-#: misc/tune2fs.c:2174
+#: misc/tune2fs.c:2165
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
@@ -5423,27 +5324,27 @@ msgstr ""
 "Zmiana rozmiaru i-wêz³a nie jest obs³ugiwana dla systemów plików\n"
 "z w³±czon± cech± flex_bg.\n"
 
-#: misc/tune2fs.c:2187
+#: misc/tune2fs.c:2178
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Ustawianie rozmiaru i-wêz³a na %lu\n"
 
-#: misc/tune2fs.c:2190
+#: misc/tune2fs.c:2181
 #, c-format
 msgid "Failed to change inode size\n"
 msgstr "Nie uda³o siê zmieniæ rozmiaru i-wêz³a\n"
 
-#: misc/tune2fs.c:2201
+#: misc/tune2fs.c:2192
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Ustawianie rozmiaru stride na %d\n"
 
-#: misc/tune2fs.c:2206
+#: misc/tune2fs.c:2197
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Ustawianie szeroko¶ci stripe na na %d\n"
 
-#: misc/tune2fs.c:2213
+#: misc/tune2fs.c:2204
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
 msgstr "Ustawianie rozszerzonych domy¶lnych opcji montowania na '%s'\n"
@@ -5569,8 +5470,7 @@ msgstr ""
 #: misc/uuidd.c:48
 #, c-format
 msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\n"
-msgstr ""
-"Sk³adnia: %s [-d] [-p plik_pid] [-s ¶cie¿ka_gniazda] [-T limit_czasu]\n"
+msgstr "Sk³adnia: %s [-d] [-p plik_pid] [-s ¶cie¿ka_gniazda] [-T limit_czasu]\n"
 
 #: misc/uuidd.c:50
 #, c-format
@@ -5718,8 +5618,7 @@ msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Sk³adnia: %s [-d flagi_¶ledzenia] [-f] [-F] [-M] [-P] [-p] urz±dzenie "
-"[nowy_rozm]\n"
+"Sk³adnia: %s [-d flagi_¶ledzenia] [-f] [-F] [-M] [-P] [-p] urz±dzenie [nowy_rozm]\n"
 "\n"
 
 #: resize/main.c:65
@@ -5761,16 +5660,7 @@ msgstr "podczas otwierania %s"
 msgid "while getting stat information for %s"
 msgstr "podczas pobierania informacji stat dla %s"
 
-#: resize/main.c:331
-#, c-format
-msgid ""
-"%s: The combination of flex_bg and\n"
-"\t!resize_inode features is not supported by resize2fs.\n"
-msgstr ""
-"%s: Kombinacja cech flex_bg i\n"
-"\t!resize_inode nie jest obs³ugiwana przez resize2fs.\n"
-
-#: resize/main.c:344 resize/main.c:452
+#: resize/main.c:325 resize/main.c:437
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
@@ -5779,30 +5669,30 @@ msgstr ""
 "Proszê uruchomiæ najpierw 'e2fsck -f %s'.\n"
 "\n"
 
-#: resize/main.c:348
+#: resize/main.c:329
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Przybli¿ony minimalny rozmiar systemu plików: %llu\n"
 
-#: resize/main.c:384
+#: resize/main.c:365
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "B³êdny nowy rozmiar: %s\n"
 
-#: resize/main.c:392
+#: resize/main.c:381
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Nowy rozmiar zbyt du¿y, by móg³ byæ wyra¿ony w 32 bitach\n"
 
-#: resize/main.c:404
+#: resize/main.c:389
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Nowy rozmiar jest mniejszy ni¿ minimalny (%llu)\n"
 
-#: resize/main.c:410
+#: resize/main.c:395
 msgid "Invalid stride length"
 msgstr "B³êdna d³ugo¶æ stride"
 
-#: resize/main.c:434
+#: resize/main.c:419
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -5813,7 +5703,7 @@ msgstr ""
 "Za¿±dano nowego rozmiaru %llu bloków.\n"
 "\n"
 
-#: resize/main.c:441
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The filesystem is already %llu blocks long.  Nothing to do!\n"
@@ -5822,17 +5712,26 @@ msgstr ""
 "System plików ju¿ ma wielko¶æ %llu bloków. Nie ma nic do roboty!\n"
 "\n"
 
-#: resize/main.c:456
+#: resize/main.c:457
+#, c-format
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Kombinacja cech flex_bg i\n"
+"\t!resize_inode nie jest obs³ugiwana przez resize2fs.\n"
+
+#: resize/main.c:463
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
 msgstr "Zmiana rozmiaru systemu plików %s na %llu (%dk) bloków.\n"
 
-#: resize/main.c:465
+#: resize/main.c:472
 #, c-format
 msgid "while trying to resize %s"
 msgstr "podczas próby zmiany rozmiaru %s"
 
-#: resize/main.c:468
+#: resize/main.c:475
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
@@ -5841,7 +5740,7 @@ msgstr ""
 "Proszê uruchomiæ 'e2fsck -fy %s', aby naprawiæ system plików\n"
 "po przerwanej operacji zmiany rozmiaru.\n"
 
-#: resize/main.c:474
+#: resize/main.c:481
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu blocks long.\n"
@@ -5850,7 +5749,7 @@ msgstr ""
 "System plików na %s ma teraz %llu bloków.\n"
 "\n"
 
-#: resize/main.c:489
+#: resize/main.c:496
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "podczas próby skrócenia %s"
@@ -5858,83 +5757,81 @@ msgstr "podczas pr
 #: resize/online.c:40
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
-msgstr ""
-"System plików %s jest zamontowany pod %s; wymagana zmiana rozmiaru w locie\n"
+msgstr "System plików %s jest zamontowany pod %s; wymagana zmiana rozmiaru w locie\n"
 
 #: resize/online.c:44
 msgid "On-line shrinking not supported"
 msgstr "Zmniejszanie w locie nie jest obs³ugiwane"
 
-#: resize/online.c:63
+#: resize/online.c:69
 msgid "Filesystem does not support online resizing"
 msgstr "System plików nie obs³uguje zmiany rozmiaru w locie"
 
-#: resize/online.c:70
+#: resize/online.c:78
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr "Zbyt ma³o zarezerwowanych bloków gdt do zmiany rozmiaru"
+
+#: resize/online.c:85
+msgid "Kernel does not support resizing a file system this large"
+msgstr "J±dro nie obs³uguje zmiany rozmiaru tak du¿ego systemu plików"
+
+#: resize/online.c:93
 #, c-format
 msgid "while trying to open mountpoint %s"
 msgstr "podczas próby otwarcia punktu montowania %s"
 
-#: resize/online.c:92 resize/online.c:116
+#: resize/online.c:115 resize/online.c:132
 msgid "Permission denied to resize filesystem"
 msgstr "Brak uprawnieñ do zmiany rozmiaru systemu plików"
 
-#: resize/online.c:95 resize/online.c:122
+#: resize/online.c:118 resize/online.c:138
 msgid "While checking for on-line resizing support"
 msgstr "Podczas sprawdzania obs³ugi zmiany rozmiaru w locie"
 
-#: resize/online.c:107
-msgid "Kernel does not support resizing a file system this large"
-msgstr "J±dro nie obs³uguje zmiany rozmiaru tak du¿ego systemu plików"
-
-#: resize/online.c:119
+#: resize/online.c:135
 msgid "Kernel does not support online resizing"
 msgstr "J±dro nie obs³uguje zmiany rozmiaru w locie"
 
-#: resize/online.c:152
+#: resize/online.c:168
 #, c-format
 msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
 msgstr "Wykonywanie zmiany rozmiaru w locie %s na %llu (%dk) bloków.\n"
 
-#: resize/online.c:162
+#: resize/online.c:178
 msgid "While trying to extend the last group"
 msgstr "Podczas próby rozszerzenia ostatniej grupy"
 
-#: resize/online.c:216
+#: resize/online.c:232
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Podczas próby dodania grupy #%d"
 
-#: resize/online.c:227
+#: resize/online.c:243
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"System plików na %s jest zamontowany pod %s, zmiana rozmiaru w locie nie "
-"jest obs³ugiwana na tym systemie.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "System plików na %s jest zamontowany pod %s, zmiana rozmiaru w locie nie jest obs³ugiwana na tym systemie.\n"
 
-#: resize/resize2fs.c:348
+#: resize/resize2fs.c:346
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "liczba i-wêz³ów (%llu) musi byæ mniejsza ni¿ %u"
 
-#: resize/resize2fs.c:576
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "zarezerwowane bloki"
 
-#: resize/resize2fs.c:789
+#: resize/resize2fs.c:807
 msgid "meta-data blocks"
 msgstr "bloki metadanych"
 
-#: resize/resize2fs.c:1735
+#: resize/resize2fs.c:1753
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Nigdy siê nie powinno zdarzyæ: i-wêze³ zmiany rozmiaru uszkodzony!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.42.4"
-msgstr "Biblioteka EXT2FS w wersji 1.42.2"
+msgid "EXT2FS Library version 1.42.6"
+msgstr "Biblioteka EXT2FS w wersji 1.42.6"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -6210,8 +6107,7 @@ msgstr "System plik
 
 #: lib/ext2fs/ext2_err.c:80
 msgid "IO Channel failed to seek on read or write"
-msgstr ""
-"Nie powiod³o siê przemieszczenie w kana³ we/wy przy odczycie lub zapisie"
+msgstr "Nie powiod³o siê przemieszczenie w kana³ we/wy przy odczycie lub zapisie"
 
 #: lib/ext2fs/ext2_err.c:81
 msgid "Memory allocation failed"
@@ -6363,8 +6259,7 @@ msgstr "Lista blok
 
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
-msgstr ""
-"Próba zmodyfikowania mapy bloków poprzez iterator bloków tylko do odczytu"
+msgstr "Próba zmodyfikowania mapy bloków poprzez iterator bloków tylko do odczytu"
 
 #: lib/ext2fs/ext2_err.c:119
 msgid "Wrong magic number for ext4 extent saved path"
@@ -6480,9 +6375,7 @@ msgstr "Kana
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"Nie mo¿na sprawdziæ, czy system plików jest zamontowany z powodu braku pliku "
-"mtab"
+msgstr "Nie mo¿na sprawdziæ, czy system plików jest zamontowany z powodu braku pliku mtab"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
@@ -6598,8 +6491,7 @@ msgstr "B
 
 #: e2fsck/prof_err.c:31
 msgid "Iteration through all top level section not supported"
-msgstr ""
-"Iterowanie poprzez wszystkie sekcje najwy¿szego poziomu nie jest obs³ugiwane"
+msgstr "Iterowanie poprzez wszystkie sekcje najwy¿szego poziomu nie jest obs³ugiwane"
 
 #: e2fsck/prof_err.c:32
 msgid "Invalid profile_section object"
index be86da7..9502669 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index 6f4d1f0..b2c5df1 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,9 +1,9 @@
 # Swedish messages for e2fsprogs.
-# Copyright © 2003, 2005, 2006, 2008, 2009, 2010, 2011, 2012 Theodore Tso (msgids)
+# Copyright Â© 2003, 2005, 2006, 2008, 2009, 2010, 2011, 2012 Theodore Tso (msgids)
 # This file is distributed under the same license as the e2fsprogs package.
-# Göran Uddeborg <goeran@uddeborg.se>, 2003, 2005, 2006, 2008, 2009, 2010, 2011, 2012.
+# Göran Uddeborg <goeran@uddeborg.se>, 2003, 2005, 2006, 2008, 2009, 2010, 2011, 2012.
 #
-# $Revision: 1.69 $
+# $Revision: 1.72 $
 #
 #. The strings in e2fsck's problem.c can be very hard to translate,
 #. since the strings are expanded in two different ways.  First of all,
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs 1.42.2\n"
+"Project-Id-Version: e2fsprogs 1.42.6\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2012-06-12 14:40-0400\n"
-"PO-Revision-Date: 2012-04-14 18:31+0200\n"
-"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
+"POT-Creation-Date: 2012-09-21 12:16-0400\n"
+"PO-Revision-Date: 2012-12-22 13:13+0100\n"
+"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:176
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:177
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
-msgstr "Dåligt block %u utanför giltigt intervall; ignoreras.\n"
+msgstr "Dåligt block %u utanför giltigt intervall; ignoreras.\n"
 
 #: e2fsck/badblocks.c:46
 msgid "while sanity checking the bad blocks inode"
-msgstr "vid rimlighetskontroll av inoden för dåliga block"
+msgstr "vid rimlighetskontroll av inoden för dåliga block"
 
 #: e2fsck/badblocks.c:58
 msgid "while reading the bad blocks inode"
-msgstr "vid läsning av inoden för dåliga block"
+msgstr "vid läsning av inoden för dåliga block"
 
 #: e2fsck/badblocks.c:72 e2fsck/iscan.c:110 e2fsck/scantest.c:107
-#: e2fsck/unix.c:1298 e2fsck/unix.c:1386 misc/badblocks.c:1214
+#: e2fsck/unix.c:1334 e2fsck/unix.c:1422 misc/badblocks.c:1214
 #: misc/badblocks.c:1222 misc/badblocks.c:1236 misc/badblocks.c:1248
 #: misc/dumpe2fs.c:588 misc/e2image.c:1189 misc/e2image.c:1307
-#: misc/e2image.c:1320 misc/mke2fs.c:192 misc/tune2fs.c:1907 resize/main.c:303
+#: misc/e2image.c:1320 misc/mke2fs.c:193 misc/tune2fs.c:1898 resize/main.c:303
 #, c-format
 msgid "while trying to open %s"
-msgstr "vid försök att öppna %s"
+msgstr "vid försök att öppna %s"
 
 #: e2fsck/badblocks.c:83
 #, c-format
 msgid "while trying popen '%s'"
-msgstr "vid försök att använda popen \"%s\""
+msgstr "vid försök att använda popen \"%s\""
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:199
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:200
 msgid "while reading in list of bad blocks from file"
-msgstr "vid läsning i listan över dåliga block från fil"
+msgstr "vid läsning i listan över dåliga block från fil"
 
 #: e2fsck/badblocks.c:105
 msgid "while updating bad block inode"
-msgstr "vid uppdatering av inoden för dåliga block"
+msgstr "vid uppdatering av inoden för dåliga block"
 
 #: e2fsck/badblocks.c:131
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr "Varning: otillåtet block %u hittat i inoden får dåliga block.  Tömt.\n"
+msgstr "Varning: otillåtet block %u hittat i inoden får dåliga block.  Tömt.\n"
 
 #: e2fsck/ehandler.c:55
 #, c-format
 msgid "Error reading block %lu (%s) while %s.  "
-msgstr "Fel vid läsning av block %lu (%s) vid %s.  "
+msgstr "Fel vid läsning av block %lu (%s) vid %s.  "
 
 #: e2fsck/ehandler.c:58
 #, c-format
 msgid "Error reading block %lu (%s).  "
-msgstr "Fel vid läsning av block %lu (%s).  "
+msgstr "Fel vid läsning av block %lu (%s).  "
 
 #: e2fsck/ehandler.c:61 e2fsck/ehandler.c:110
 msgid "Ignore error"
@@ -166,7 +166,7 @@ msgstr "%s: %s filnamn nblock blockstorlek\n"
 #: e2fsck/extend.c:44
 #, c-format
 msgid "Illegal number of blocks!\n"
-msgstr "Otillåtet antal block!\n"
+msgstr "Otillåtet antal block!\n"
 
 #: e2fsck/extend.c:50
 #, c-format
@@ -176,44 +176,44 @@ msgstr "Kunde inte allokera blockbuffert (storlek=%d)\n"
 #: e2fsck/flushb.c:35
 #, c-format
 msgid "Usage: %s disk\n"
-msgstr "Användning: %s disk\n"
+msgstr "Användning: %s disk\n"
 
 #: e2fsck/flushb.c:64
 #, c-format
 msgid "BLKFLSBUF ioctl not supported!  Can't flush buffers.\n"
-msgstr "BLKFLSBUF-ioctl stöds inte!  Kan inte tömma buffertar.\n"
+msgstr "BLKFLSBUF-ioctl stöds inte!  Kan inte tömma buffertar.\n"
 
 #: e2fsck/iscan.c:44
 #, c-format
 msgid "Usage: %s [-F] [-I inode_buffer_blocks] device\n"
-msgstr "Användning: %s [-F] [-I inodbuffertblock] enhet\n"
+msgstr "Användning: %s [-F] [-I inodbuffertblock] enhet\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:930
+#: e2fsck/iscan.c:81 e2fsck/unix.c:963
 #, c-format
 msgid "while opening %s for flushing"
-msgstr "vid öppning av %s för utskrivning"
+msgstr "vid öppning av %s för utskrivning"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:936 resize/main.c:276
+#: e2fsck/iscan.c:86 e2fsck/unix.c:969 resize/main.c:276
 #, c-format
 msgid "while trying to flush %s"
-msgstr "vid försök att skriva ut %s"
+msgstr "vid försök att skriva ut %s"
 
 #: e2fsck/iscan.c:119 e2fsck/scantest.c:114 misc/e2image.c:1084
 msgid "while opening inode scan"
-msgstr "vid öppning av inodsökning"
+msgstr "vid öppning av inodsökning"
 
 #: e2fsck/iscan.c:127 misc/e2image.c:1102
 msgid "while getting next inode"
-msgstr "när nästa inod hämtades"
+msgstr "när nästa inod hämtades"
 
 #: e2fsck/iscan.c:136
 #, c-format
 msgid "%u inodes scanned.\n"
-msgstr "%u inoder genomsökta.\n"
+msgstr "%u inoder genomsökta.\n"
 
 #: e2fsck/journal.c:512
 msgid "reading journal superblock\n"
-msgstr "läser journalsuperblock\n"
+msgstr "läser journalsuperblock\n"
 
 #: e2fsck/journal.c:569
 #, c-format
@@ -223,42 +223,42 @@ msgstr "%s: inget giltigt journalsuperblock hittades\n"
 #: e2fsck/journal.c:578
 #, c-format
 msgid "%s: journal too short\n"
-msgstr "%s: journalen för kort\n"
+msgstr "%s: journalen för kort\n"
 
 #: e2fsck/journal.c:870
 #, c-format
 msgid "%s: recovering journal\n"
-msgstr "%s: återhämtar journalen\n"
+msgstr "%s: återhämtar journalen\n"
 
 #: e2fsck/journal.c:872
 #, c-format
 msgid "%s: won't do journal recovery while read-only\n"
-msgstr "%s: återhämtar inte journalen i skrivskyddat läge\n"
+msgstr "%s: återhämtar inte journalen i skrivskyddat läge\n"
 
 #: e2fsck/journal.c:899
 #, c-format
 msgid "while trying to re-open %s"
-msgstr "vid försök att återöppna %s"
-
-# Första bokstaven i detta och följande meddelanden är ett index som
-# används som en förkortning i andra meddelanden, och inte skrivs ut.
-# Uppslagningen sker på det ursprungliga meddelandet, så det spelar
-# egentligen ingen roll vilket tecken som står först i den översatta
-# strängen.  Det viktiga är att det står någon platshållare där, första
-# tecknet skrivs inte ut, vare sig i orginalsträngen eller den översatta
-# strängen.  Jag tyckte det var bäst att behålla orginaltecknet.
+msgstr "vid försök att återöppna %s"
+
+# Första bokstaven i detta och följande meddelanden är ett index som
+# används som en förkortning i andra meddelanden, och inte skrivs ut.
+# Uppslagningen sker på det ursprungliga meddelandet, så det spelar
+# egentligen ingen roll vilket tecken som står först i den översatta
+# strängen.  Det viktiga är att det står någon platshållare där, första
+# tecknet skrivs inte ut, vare sig i orginalsträngen eller den översatta
+# strängen.  Jag tyckte det var bäst att behålla orginaltecknet.
 #
-# Jag har felrapporterat hela idén.  Det innebär ju att man bygger ihop
-# meningar från delar, och det brukar ju gå sönder i översättningar med
-# olika genus och dylikt.  Men författaren har en del bra argument om
-# att förkortningssystemet är en fördel när man skall få plats med så
-# mycket som möjligt på en räddningsdiskett.  I det fallet är ändå
-# knappast översättningar med.  Så den bästa lösningen är nog att låta
-# systemet som sådant finnas kvar, men inte använda det alls i översatta
+# Jag har felrapporterat hela idén.  Det innebär ju att man bygger ihop
+# meningar från delar, och det brukar ju gå sönder i översättningar med
+# olika genus och dylikt.  Men författaren har en del bra argument om
+# att förkortningssystemet är en fördel när man skall få plats med så
+# mycket som möjligt på en räddningsdiskett.  I det fallet är ändå
+# knappast översättningar med.  Så den bästa lösningen är nog att låta
+# systemet som sådant finnas kvar, men inte använda det alls i översatta
 # meddelanden.
 #: e2fsck/message.c:113
 msgid "aextended attribute"
-msgstr "autökat attribut"
+msgstr "autökat attribut"
 
 #: e2fsck/message.c:114
 msgid "Aerror allocating"
@@ -278,7 +278,7 @@ msgstr "ckomprimera"
 
 #: e2fsck/message.c:118
 msgid "Cconflicts with some other fs @b"
-msgstr "Ckonflikt med något annat fs @b"
+msgstr "Ckonflikt med något annat fs @b"
 
 #: e2fsck/message.c:119
 msgid "iinode"
@@ -286,7 +286,7 @@ msgstr "iinod"
 
 #: e2fsck/message.c:120
 msgid "Iillegal"
-msgstr "Iotillåten"
+msgstr "Iotillåten"
 
 #: e2fsck/message.c:121
 msgid "jjournal"
@@ -314,7 +314,7 @@ msgstr "ffilsystem"
 
 #: e2fsck/message.c:127
 msgid "Ffor @i %i (%Q) is"
-msgstr "Fför inod %i (%Q) är"
+msgstr "Fför inod %i (%Q) är"
 
 #: e2fsck/message.c:128
 msgid "ggroup"
@@ -330,11 +330,11 @@ msgstr "llost+found"
 
 #: e2fsck/message.c:131
 msgid "Lis a link"
-msgstr "Lär en länk"
+msgstr "Lär en länk"
 
 #: e2fsck/message.c:132
 msgid "mmultiply-claimed"
-msgstr "mflerfaldigt ianspråkstagna"
+msgstr "mflerfaldigt ianspråkstagna"
 
 #: e2fsck/message.c:133
 msgid "ninvalid"
@@ -342,7 +342,7 @@ msgstr "nogiltig"
 
 #: e2fsck/message.c:134
 msgid "oorphaned"
-msgstr "oföräldralös"
+msgstr "oföräldralös"
 
 #: e2fsck/message.c:135
 msgid "pproblem in"
@@ -366,7 +366,7 @@ msgstr "Ssuperblock"
 
 #: e2fsck/message.c:140
 msgid "uunattached"
-msgstr "ulös"
+msgstr "ulös"
 
 #: e2fsck/message.c:141
 msgid "vdevice"
@@ -374,11 +374,11 @@ msgstr "venhet"
 
 #: e2fsck/message.c:142
 msgid "xextent"
-msgstr "xutsträckning"
+msgstr "xutsträckning"
 
 #: e2fsck/message.c:143
 msgid "zzero-length"
-msgstr "znollängds"
+msgstr "znollängds"
 
 #: e2fsck/message.c:154
 msgid "<The NULL inode>"
@@ -386,15 +386,15 @@ msgstr "<Inod noll>"
 
 #: e2fsck/message.c:155
 msgid "<The bad blocks inode>"
-msgstr "<Inoden för dåliga block>"
+msgstr "<Inoden för dåliga block>"
 
 #: e2fsck/message.c:157
 msgid "<The user quota inode>"
-msgstr "<Inoden för användarkvoter>"
+msgstr "<Inoden för användarkvoter>"
 
 #: e2fsck/message.c:158
 msgid "<The group quota inode>"
-msgstr "<Inoden för gruppkvoter>"
+msgstr "<Inoden för gruppkvoter>"
 
 #: e2fsck/message.c:159
 msgid "<The boot loader inode>"
@@ -402,7 +402,7 @@ msgstr "<Uppstartsprograminoden>"
 
 #: e2fsck/message.c:160
 msgid "<The undelete directory inode>"
-msgstr "<Inoden för återhämtning av borttagna kataloger>"
+msgstr "<Inoden för återhämtning av borttagna kataloger>"
 
 #: e2fsck/message.c:161
 msgid "<The group descriptor inode>"
@@ -438,11 +438,11 @@ msgstr "blockenhet"
 
 #: e2fsck/message.c:341
 msgid "named pipe"
-msgstr "namngivet rör"
+msgstr "namngivet rör"
 
 #: e2fsck/message.c:343
 msgid "symbolic link"
-msgstr "symbolisk länk"
+msgstr "symbolisk länk"
 
 #: e2fsck/message.c:345 misc/uuidd.c:161
 msgid "socket"
@@ -451,7 +451,7 @@ msgstr "uttag (socket)"
 #: e2fsck/message.c:347
 #, c-format
 msgid "unknown file type with mode 0%o"
-msgstr "okänd filtyp med typ 0%o"
+msgstr "okänd filtyp med typ 0%o"
 
 #: e2fsck/message.c:423
 msgid "indirect block"
@@ -467,7 +467,7 @@ msgstr "trippelt indirekt block"
 
 #: e2fsck/message.c:429
 msgid "translator block"
-msgstr "översättningsblock"
+msgstr "översättningsblock"
 
 #: e2fsck/message.c:431
 msgid "block #"
@@ -475,34 +475,34 @@ msgstr "block nr."
 
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
-msgstr "karta över flerfaldigt i anspråkstagna inoder"
+msgstr "karta över flerfaldigt i anspråkstagna inoder"
 
 #: e2fsck/pass1b.c:610 e2fsck/pass1b.c:729
 #, c-format
 msgid "internal error: can't find dup_blk for %llu\n"
-msgstr "internt fel: kan inte hitta dup_blk för %llu\n"
+msgstr "internt fel: kan inte hitta dup_blk för %llu\n"
 
 #: e2fsck/pass1b.c:820
 msgid "returned from clone_file_block"
-msgstr "återvände från clone_file_block"
+msgstr "återvände från clone_file_block"
 
 #: e2fsck/pass1b.c:842
 #, c-format
 msgid "internal error: couldn't lookup EA block record for %llu"
-msgstr "internt fel: det gick inte att slå upp EA-blockpost för %llu"
+msgstr "internt fel: det gick inte att slå upp EA-blockpost för %llu"
 
 #: e2fsck/pass1b.c:854
 #, c-format
 msgid "internal error: couldn't lookup EA inode record for %u"
-msgstr "internt fel: det gick inte att slå upp EA-inodpost för %u"
+msgstr "internt fel: det gick inte att slå upp EA-inodpost för %u"
 
 #: e2fsck/pass1.c:476 e2fsck/pass2.c:782
 msgid "reading directory block"
-msgstr "läser katalogblock"
+msgstr "läser katalogblock"
 
 #: e2fsck/pass1.c:599
 msgid "in-use inode map"
-msgstr "karta över använda inoder"
+msgstr "karta över använda inoder"
 
 #: e2fsck/pass1.c:610
 msgid "directory inode map"
@@ -510,19 +510,19 @@ msgstr "kataloginodskarta"
 
 #: e2fsck/pass1.c:620
 msgid "regular file inode map"
-msgstr "inodskarta över reguljära filer"
+msgstr "inodskarta över reguljära filer"
 
 #: e2fsck/pass1.c:629
 msgid "in-use block map"
-msgstr "karta över använda block"
+msgstr "karta över använda block"
 
 #: e2fsck/pass1.c:696
 msgid "opening inode scan"
-msgstr "öppnar inodsökning"
+msgstr "öppnar inodsökning"
 
 #: e2fsck/pass1.c:730
 msgid "getting next inode from scan"
-msgstr "hämtar nästa inod från sökning"
+msgstr "hämtar nästa inod från sökning"
 
 #: e2fsck/pass1.c:1240
 msgid "Pass 1"
@@ -531,15 +531,15 @@ msgstr "Pass 1"
 #: e2fsck/pass1.c:1297
 #, c-format
 msgid "reading indirect blocks of inode %u"
-msgstr "läser indirektblock för inod %u"
+msgstr "läser indirektblock för inod %u"
 
 #: e2fsck/pass1.c:1347
 msgid "bad inode map"
-msgstr "karta över dåliga inoder"
+msgstr "karta över dåliga inoder"
 
 #: e2fsck/pass1.c:1370
 msgid "inode in bad block map"
-msgstr "inod i karta över dåliga block"
+msgstr "inod i karta över dåliga block"
 
 #: e2fsck/pass1.c:1390
 msgid "imagic inode map"
@@ -547,16 +547,16 @@ msgstr "imagic inodskarta"
 
 #: e2fsck/pass1.c:1417
 msgid "multiply claimed block map"
-msgstr "karta över flerfaldigt i anspråkstagna block"
+msgstr "karta över flerfaldigt i anspråkstagna block"
 
 #: e2fsck/pass1.c:1518
 msgid "ext attr block map"
-msgstr "karta över block för utökade attribut"
+msgstr "karta över block för utökade attribut"
 
 #: e2fsck/pass1.c:2266
 #, c-format
 msgid "%6lu(%c): expecting %6lu got phys %6lu (blkcnt %lld)\n"
-msgstr "%6lu(%c): förväntade %6lu fick fys %6lu (blkant %lld)\n"
+msgstr "%6lu(%c): förväntade %6lu fick fys %6lu (blkant %lld)\n"
 
 #: e2fsck/pass1.c:2627
 msgid "block bitmap"
@@ -576,7 +576,7 @@ msgstr "Pass 2"
 
 #: e2fsck/pass2.c:805
 msgid "Can not continue."
-msgstr "Kan inte fortsätta."
+msgstr "Kan inte fortsätta."
 
 #: e2fsck/pass3.c:77
 msgid "inode done bitmap"
@@ -592,7 +592,7 @@ msgstr "Pass 3"
 
 #: e2fsck/pass3.c:322
 msgid "inode loop detection bitmap"
-msgstr "bitkarta för upptäckt av inodsslingor"
+msgstr "bitkarta för upptäckt av inodsslingor"
 
 #: e2fsck/pass4.c:195
 msgid "Pass 4"
@@ -612,7 +612,7 @@ msgstr "Fixa"
 
 #: e2fsck/problem.c:53
 msgid "Clear"
-msgstr "Töm"
+msgstr "Töm"
 
 #: e2fsck/problem.c:54
 msgid "Relocate"
@@ -636,7 +636,7 @@ msgstr "Skapa"
 
 #: e2fsck/problem.c:59
 msgid "Salvage"
-msgstr "Rädda"
+msgstr "Rädda"
 
 #: e2fsck/problem.c:60
 msgid "Truncate"
@@ -644,7 +644,7 @@ msgstr "Kapa"
 
 #: e2fsck/problem.c:61
 msgid "Clear inode"
-msgstr "Töm inod"
+msgstr "Töm inod"
 
 #: e2fsck/problem.c:62
 msgid "Abort"
@@ -656,11 +656,11 @@ msgstr "Dela"
 
 #: e2fsck/problem.c:64
 msgid "Continue"
-msgstr "Fortsätt"
+msgstr "Fortsätt"
 
 #: e2fsck/problem.c:65
 msgid "Clone multiply-claimed blocks"
-msgstr "Klona flerfaldigt ianspråkstagna block"
+msgstr "Klona flerfaldigt ianspråkstagna block"
 
 #: e2fsck/problem.c:66
 msgid "Delete file"
@@ -672,15 +672,15 @@ msgstr "Undertryck meddelanden"
 
 #: e2fsck/problem.c:68
 msgid "Unlink"
-msgstr "Avlänka"
+msgstr "Avlänka"
 
 #: e2fsck/problem.c:69
 msgid "Clear HTree index"
-msgstr "Töm HTree-index"
+msgstr "Töm HTree-index"
 
 #: e2fsck/problem.c:70
 msgid "Recreate"
-msgstr "Återskapa"
+msgstr "Återskapa"
 
 #: e2fsck/problem.c:79
 msgid "(NONE)"
@@ -692,7 +692,7 @@ msgstr "FIXAT"
 
 #: e2fsck/problem.c:81
 msgid "CLEARED"
-msgstr "TÖMD"
+msgstr "TÖMD"
 
 #: e2fsck/problem.c:82
 msgid "RELOCATED"
@@ -708,7 +708,7 @@ msgstr "EXPANDERAD"
 
 #: e2fsck/problem.c:85
 msgid "RECONNECTED"
-msgstr "ÅTERKOPPLAD"
+msgstr "ÅTERKOPPLAD"
 
 #: e2fsck/problem.c:86
 msgid "CREATED"
@@ -716,7 +716,7 @@ msgstr "SKAPAD"
 
 #: e2fsck/problem.c:87
 msgid "SALVAGED"
-msgstr "RÄDDAD"
+msgstr "RÄDDAD"
 
 #: e2fsck/problem.c:88
 msgid "TRUNCATED"
@@ -724,7 +724,7 @@ msgstr "KAPAT"
 
 #: e2fsck/problem.c:89
 msgid "INODE CLEARED"
-msgstr "INOD TÖMD"
+msgstr "INOD TÖMD"
 
 #: e2fsck/problem.c:90
 msgid "ABORTED"
@@ -736,11 +736,11 @@ msgstr "DELAD"
 
 #: e2fsck/problem.c:92
 msgid "CONTINUING"
-msgstr "FORTSÄTTER"
+msgstr "FORTSÄTTER"
 
 #: e2fsck/problem.c:93
 msgid "MULTIPLY-CLAIMED BLOCKS CLONED"
-msgstr "FLERFALDIG IANSPRÅKSTAGNA BLOCK KLONADE"
+msgstr "FLERFALDIG IANSPRÅKSTAGNA BLOCK KLONADE"
 
 #: e2fsck/problem.c:94
 msgid "FILE DELETED"
@@ -752,25 +752,25 @@ msgstr "UNDERTRYCKT"
 
 #: e2fsck/problem.c:96
 msgid "UNLINKED"
-msgstr "AVLÄNKAD"
+msgstr "AVLÄNKAD"
 
 #: e2fsck/problem.c:97
 msgid "HTREE INDEX CLEARED"
-msgstr "HTREE-INDEX TÖMT"
+msgstr "HTREE-INDEX TÖMT"
 
 #: e2fsck/problem.c:98
 msgid "WILL RECREATE"
-msgstr "KOMMER ÅTERSKAPA"
+msgstr "KOMMER ÅTERSKAPA"
 
 #. @-expanded: block bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:107
 msgid "@b @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "blockbitkarta för grupp %g är inte i gruppen. (block %b)\n"
+msgstr "blockbitkarta för grupp %g är inte i gruppen. (block %b)\n"
 
 #. @-expanded: inode bitmap for group %g is not in group.  (block %b)\n
 #: e2fsck/problem.c:111
 msgid "@i @B for @g %g is not in @g.  (@b %b)\n"
-msgstr "inodsbitkarta för grupp %g är inte i gruppen.  (block %b)\n"
+msgstr "inodsbitkarta för grupp %g är inte i gruppen.  (block %b)\n"
 
 #. @-expanded: inode table for group %g is not in group.  (block %b)\n
 #. @-expanded: WARNING: SEVERE DATA LOSS POSSIBLE.\n
@@ -779,8 +779,8 @@ msgid ""
 "@i table for @g %g is not in @g.  (@b %b)\n"
 "WARNING: SEVERE DATA LOSS POSSIBLE.\n"
 msgstr ""
-"inodtabell för grupp %g är inte i gruppen.  (block %b)\n"
-"VARNING: ALLVARLIG DATAFÖRLUST ÄR MÖJLIG.\n"
+"inodtabell för grupp %g är inte i gruppen.  (block %b)\n"
+"VARNING: ALLVARLIG DATAFÖRLUST ÄR MÖJLIG.\n"
 
 #. @-expanded: \n
 #. @-expanded: The superblock could not be read or does not describe a correct ext2\n
@@ -801,10 +801,10 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Superblocket kunde inte läsas eller beskriver inte ett korrekt\n"
-"ext2-filsystem.  Om enheten är giltig och den verkligen innehåller ett\n"
-"ext2-filsystem (och inte växlingsutrymme eller ufs eller något annat)\n"
-"är superblocket trasigt, och du kan försöka köra med ett alternativt\n"
+"Superblocket kunde inte läsas eller beskriver inte ett korrekt\n"
+"ext2-filsystem.  Om enheten är giltig och den verkligen innehåller ett\n"
+"ext2-filsystem (och inte växlingsutrymme eller ufs eller något annat)\n"
+"är superblocket trasigt, och du kan försöka köra med ett alternativt\n"
 "superblock:\n"
 "    e2fsck -b %S <enhet>\n"
 "\n"
@@ -818,9 +818,9 @@ msgid ""
 "The physical size of the @v is %c @bs\n"
 "Either the @S or the partition table is likely to be corrupt!\n"
 msgstr ""
-"Filsystemsstorleken (enligt superblocket) är %b block\n"
-"Den fysiska storleken på enheten är %c block\n"
-"Superblocket eller partitionstabellen är förmodligen trasig!\n"
+"Filsystemsstorleken (enligt superblocket) är %b block\n"
+"Den fysiska storleken på enheten är %c block\n"
+"Superblocket eller partitionstabellen är förmodligen trasig!\n"
 
 #. @-expanded: superblock block_size = %b, fragsize = %c.\n
 #. @-expanded: This version of e2fsck does not support fragment sizes different\n
@@ -832,7 +832,7 @@ msgid ""
 "from the @b size.\n"
 msgstr ""
 "Superblockets blockstorlek = %b, fragmentstorlek = %c.\n"
-"Denna version av e2fsck stödjer inte andra fragmentstorlekar än\n"
+"Denna version av e2fsck stödjer inte andra fragmentstorlekar än\n"
 "blockstorleken.\n"
 
 #. @-expanded: superblock blocks_per_group = %b, should have been %c\n
@@ -843,7 +843,7 @@ msgstr "Superblockets block per grupp = %b, skulle ha varit %c\n"
 #. @-expanded: superblock first_data_block = %b, should have been %c\n
 #: e2fsck/problem.c:150
 msgid "@S first_data_@b = %b, should have been %c\n"
-msgstr "Superblockets första datablock = %b, skulle ha varit %c\n"
+msgstr "Superblockets första datablock = %b, skulle ha varit %c\n"
 
 #. @-expanded: filesystem did not have a UUID; generating one.\n
 #. @-expanded: \n
@@ -863,9 +863,9 @@ msgid ""
 "the backup block group descriptors may be OK.\n"
 "\n"
 msgstr ""
-"Observera: om det är flera inod- eller blockbitkarteblock eller en del\n"
-"av inodstabellen som måste flyttas, kanske du vill köra e2fsck med\n"
-"flaggan \"-b %S\" först.  Problemet kan ligga bara i den primära\n"
+"Observera: om det är flera inod- eller blockbitkarteblock eller en del\n"
+"av inodstabellen som måste flyttas, kanske du vill köra e2fsck med\n"
+"flaggan \"-b %S\" först.  Problemet kan ligga bara i den primära\n"
 "blockgruppbeskrivaren, och reservblockgruppbeskrivaren kan vara OK.\n"
 "\n"
 
@@ -878,16 +878,16 @@ msgstr "Skada hittad i superblock.  (%s = %N).\n"
 #: e2fsck/problem.c:174
 #, c-format
 msgid "Error determining size of the physical @v: %m\n"
-msgstr "Fel vid bestämning av den fysiska enheten: %m\n"
+msgstr "Fel vid bestämning av den fysiska enheten: %m\n"
 
 #. @-expanded: inode count in superblock is %i, should be %j.\n
 #: e2fsck/problem.c:179
 msgid "@i count in @S is %i, @s %j.\n"
-msgstr "inodsantal i superblock är %i, skall vara %j.\n"
+msgstr "inodsantal i superblock är %i, skall vara %j.\n"
 
 #: e2fsck/problem.c:183
 msgid "The Hurd does not support the filetype feature.\n"
-msgstr "Hurd stödjer inte funktionen filtyp.\n"
+msgstr "Hurd stödjer inte funktionen filtyp.\n"
 
 #. @-expanded: superblock has an invalid journal (inode %i).\n
 #: e2fsck/problem.c:188
@@ -898,7 +898,7 @@ msgstr "Superblock har en ogiltig journal (inod %i).\n"
 #. @-expanded: External journal has multiple filesystem users (unsupported).\n
 #: e2fsck/problem.c:193
 msgid "External @j has multiple @f users (unsupported).\n"
-msgstr "Extern journal har flera filsystemsanvändare (stödjs ej).\n"
+msgstr "Extern journal har flera filsystemsanvändare (stödjs ej).\n"
 
 #. @-expanded: Can't find external journal\n
 #: e2fsck/problem.c:198
@@ -908,12 +908,12 @@ msgstr "Kan inte hitta extern journal\n"
 #. @-expanded: External journal has bad superblock\n
 #: e2fsck/problem.c:203
 msgid "External @j has bad @S\n"
-msgstr "Extern journal har dåligt superblock\n"
+msgstr "Extern journal har dåligt superblock\n"
 
 #. @-expanded: External journal does not support this filesystem\n
 #: e2fsck/problem.c:208
 msgid "External @j does not support this @f\n"
-msgstr "Extern journal stödjer inte detta filsystem\n"
+msgstr "Extern journal stödjer inte detta filsystem\n"
 
 #. @-expanded: filesystem journal superblock is unknown type %N (unsupported).\n
 #. @-expanded: It is likely that your copy of e2fsck is old and/or doesn't support this journal 
@@ -922,91 +922,86 @@ msgstr "Extern journal st
 #: e2fsck/problem.c:213
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
-"format.\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
-"Filsystemsjournalsuperblock är av okänd typ %N (ej stött).\n"
-"Det är troligt att ditt exemplar av e2fsck är gammalt och/eller inte\n"
-"stödjer detta journalformat.\n"
-"Det är också möjligt att journalsuperblocket är trasigt.\n"
+"Filsystemsjournalsuperblock är av okänd typ %N (ej stött).\n"
+"Det är troligt att ditt exemplar av e2fsck är gammalt och/eller inte\n"
+"stödjer detta journalformat.\n"
+"Det är också möjligt att journalsuperblocket är trasigt.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
 #: e2fsck/problem.c:221
 msgid "@j @S is corrupt.\n"
-msgstr "Journalsuperblock är trasigt.\n"
+msgstr "Journalsuperblock är trasigt.\n"
 
 #. @-expanded: superblock has_journal flag is clear, but a journal %s is present.\n
 #: e2fsck/problem.c:226
 #, c-format
 msgid "@S has_@j flag is clear, but a @j %s is present.\n"
-msgstr ""
-"Superblocksflagga har_journal är nollställd, men en journal %s finns.\n"
+msgstr "Superblocksflagga har_journal är nollställd, men en journal %s finns.\n"
 
 #. @-expanded: superblock needs_recovery flag is set, but no journal is present.\n
 #: e2fsck/problem.c:231
 msgid "@S needs_recovery flag is set, but no @j is present.\n"
-msgstr "Superblockflagga behöver_rättas är satt, men ingen journal finns.\n"
+msgstr "Superblockflagga behöver_rättas är satt, men ingen journal finns.\n"
 
 #. @-expanded: superblock needs_recovery flag is clear, but journal has data.\n
 #: e2fsck/problem.c:236
 msgid "@S needs_recovery flag is clear, but @j has data.\n"
-msgstr ""
-"Superblocksflagga behöver_rättas är nollställd, men journal har data.\n"
+msgstr "Superblocksflagga behöver_rättas är nollställd, men journal har data.\n"
 
 #. @-expanded: Clear journal
 #: e2fsck/problem.c:241
 msgid "Clear @j"
-msgstr "Töm journal"
+msgstr "Töm journal"
 
 #. @-expanded: filesystem has feature flag(s) set, but is a revision 0 filesystem.  
 #: e2fsck/problem.c:246 e2fsck/problem.c:695
 msgid "@f has feature flag(s) set, but is a revision 0 @f.  "
-msgstr ""
-"filsystemet har funktionsflaggor satta, men är ett revision 0-filsystem.  "
+msgstr "filsystemet har funktionsflaggor satta, men är ett revision 0-filsystem.  "
 
 #. @-expanded: %s orphaned inode %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n
 #: e2fsck/problem.c:251
 msgid "%s @o @i %i (uid=%Iu, gid=%Ig, mode=%Im, size=%Is)\n"
-msgstr ""
-"%s föräldralös inod %i (uid=%Iu, gid=%Ig, rättighet=%Im, storlek=%Is)\n"
+msgstr "%s föräldralös inod %i (uid=%Iu, gid=%Ig, rättighet=%Im, storlek=%Is)\n"
 
 #. @-expanded: illegal %B (%b) found in orphaned inode %i.\n
 #: e2fsck/problem.c:256
 msgid "@I %B (%b) found in @o @i %i.\n"
-msgstr "Ogiltigt %B (%b) hittat i föräldralös inod %i.\n"
+msgstr "Ogiltigt %B (%b) hittat i föräldralös inod %i.\n"
 
 #. @-expanded: Already cleared %B (%b) found in orphaned inode %i.\n
 #: e2fsck/problem.c:261
 msgid "Already cleared %B (%b) found in @o @i %i.\n"
-msgstr "Redan tömt %B (%b) hittat i föräldralös inod %i.\n"
+msgstr "Redan tömt %B (%b) hittat i föräldralös inod %i.\n"
 
 #. @-expanded: illegal orphaned inode %i in superblock.\n
 #: e2fsck/problem.c:266
 #, c-format
 msgid "@I @o @i %i in @S.\n"
-msgstr "Ogiltig föräldralös inod %i i superblock.\n"
+msgstr "Ogiltig föräldralös inod %i i superblock.\n"
 
 #. @-expanded: illegal inode %i in orphaned inode list.\n
 #: e2fsck/problem.c:271
 #, c-format
 msgid "@I @i %i in @o @i list.\n"
-msgstr "Ogiltig inod %i i föräldralös inodlista.\n"
+msgstr "Ogiltig inod %i i föräldralös inodlista.\n"
 
 #. @-expanded: journal superblock has an unknown read-only feature flag set.\n
 #: e2fsck/problem.c:276
 msgid "@j @S has an unknown read-only feature flag set.\n"
-msgstr "Journalsuperblock har okänd skrivskyddad funktionsflagga satt.\n"
+msgstr "Journalsuperblock har okänd skrivskyddad funktionsflagga satt.\n"
 
 #. @-expanded: journal superblock has an unknown incompatible feature flag set.\n
 #: e2fsck/problem.c:281
 msgid "@j @S has an unknown incompatible feature flag set.\n"
-msgstr "Journalsuperblock har okänd inkompatibel funktionsflagga satt.\n"
+msgstr "Journalsuperblock har okänd inkompatibel funktionsflagga satt.\n"
 
 #. @-expanded: journal version not supported by this e2fsck.\n
 #: e2fsck/problem.c:286
 msgid "@j version not supported by this e2fsck.\n"
-msgstr "Journalversion stöds inte av denna e2fsck.\n"
+msgstr "Journalversion stöds inte av denna e2fsck.\n"
 
 #. @-expanded: Moving journal from /%s to hidden inode.\n
 #. @-expanded: \n
@@ -1016,7 +1011,7 @@ msgid ""
 "Moving @j from /%s to hidden @i.\n"
 "\n"
 msgstr ""
-"Flyttar journal från /%s till dold inod.\n"
+"Flyttar journal från /%s till dold inod.\n"
 "\n"
 
 #. @-expanded: Error moving journal: %m\n
@@ -1039,19 +1034,19 @@ msgid ""
 "Clearing fields beyond the V1 @j @S...\n"
 "\n"
 msgstr ""
-"Hittade ogiltiga V2-journalsuperblockfält (från V1-journal).\n"
-"Tömmer fält efter V1-journalsuperblock ...\n"
+"Hittade ogiltiga V2-journalsuperblockfält (från V1-journal).\n"
+"Tömmer fält efter V1-journalsuperblock ...\n"
 "\n"
 
 #. @-expanded: Run journal anyway
 #: e2fsck/problem.c:307
 msgid "Run @j anyway"
-msgstr "Kör journal ändå"
+msgstr "Kör journal ändå"
 
 #. @-expanded: Recovery flag not set in backup superblock, so running journal anyway.\n
 #: e2fsck/problem.c:312
 msgid "Recovery flag not set in backup @S, so running @j anyway.\n"
-msgstr "Rättningsflagga inte satt i reservsuperblock, så kör journal ändå.\n"
+msgstr "Rättningsflagga inte satt i reservsuperblock, så kör journal ändå.\n"
 
 #. @-expanded: Backing up journal inode block information.\n
 #. @-expanded: \n
@@ -1060,7 +1055,7 @@ msgid ""
 "Backing up @j @i @b information.\n"
 "\n"
 msgstr ""
-"Säkerhetskopierar blockinformation för journalinod.\n"
+"Säkerhetskopierar blockinformation för journalinod.\n"
 "\n"
 
 #. @-expanded: filesystem does not have resize_inode enabled, but s_reserved_gdt_blocks\n
@@ -1071,18 +1066,17 @@ msgid ""
 "is %N; @s zero.  "
 msgstr ""
 "Filsystemet har inte resize_inode aktiverat, men r_reserved_gdt_blocks\n"
-"är %N; skulle varit noll.  "
+"är %N; skulle varit noll.  "
 
 #. @-expanded: Resize_inode not enabled, but the resize inode is non-zero.  
 #: e2fsck/problem.c:328
 msgid "Resize_@i not enabled, but the resize @i is non-zero.  "
-msgstr ""
-"Resize_inode är inte aktiverat, men storleksändringsinoden är inte noll.  "
+msgstr "Resize_inode är inte aktiverat, men storleksändringsinoden är inte noll.  "
 
 #. @-expanded: Resize inode not valid.  
 #: e2fsck/problem.c:333
 msgid "Resize @i not valid.  "
-msgstr "Storleksändringsinod är inte giltig.  "
+msgstr "Storleksändringsinod är inte giltig.  "
 
 #. @-expanded: superblock last mount time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
@@ -1092,7 +1086,7 @@ msgid ""
 "\tnow = %T) is in the future.\n"
 msgstr ""
 "Superblockets senaste monteringstid (%t,\n"
-"\tnu = %T) är i framtiden.\n"
+"\tnu = %T) är i framtiden.\n"
 
 #. @-expanded: superblock last write time (%t,\n
 #. @-expanded: \tnow = %T) is in the future.\n
@@ -1102,13 +1096,13 @@ msgid ""
 "\tnow = %T) is in the future.\n"
 msgstr ""
 "Superblockets senaste skrivningstid (%t,\n"
-"\tnu = %T) är i framtiden.\n"
+"\tnu = %T) är i framtiden.\n"
 
 #. @-expanded: superblock hint for external superblock should be %X.  
 #: e2fsck/problem.c:347
 #, c-format
 msgid "@S hint for external superblock @s %X.  "
-msgstr "Superblocktips för externt superblock borde vara %X."
+msgstr "Superblocktips för externt superblock borde vara %X."
 
 #. @-expanded: Adding dirhash hint to filesystem.\n
 #. @-expanded: \n
@@ -1117,25 +1111,24 @@ msgid ""
 "Adding dirhash hint to @f.\n"
 "\n"
 msgstr ""
-"Lägger till dirhash-tips till filsystem.\n"
+"Lägger till dirhash-tips till filsystem.\n"
 "\n"
 
 #. @-expanded: group descriptor %g checksum is %04x, should be %04y.  
 #: e2fsck/problem.c:357
 msgid "@g descriptor %g checksum is %04x, should be %04y.  "
-msgstr "kontrollsumma för gruppbeskrivare %g är %04x, skall vara %04y.  "
+msgstr "kontrollsumma för gruppbeskrivare %g är %04x, skall vara %04y.  "
 
 #. @-expanded: group descriptor %g marked uninitialized without feature set.\n
 #: e2fsck/problem.c:362
 #, c-format
 msgid "@g descriptor %g marked uninitialized without feature set.\n"
-msgstr ""
-"gruppbeskrivare %g är markerad oinitierad utan att egenskapen är satt.\n"
+msgstr "gruppbeskrivare %g är markerad oinitierad utan att egenskapen är satt.\n"
 
 #. @-expanded: group descriptor %g has invalid unused inodes count %b.  
 #: e2fsck/problem.c:367
 msgid "@g descriptor %g has invalid unused inodes count %b.  "
-msgstr "gruppbeskrivare %g har ogiltigt antal oanvända inoder %b.  "
+msgstr "gruppbeskrivare %g har ogiltigt antal oanvända inoder %b.  "
 
 #. @-expanded: Last group block bitmap uninitialized.  
 #: e2fsck/problem.c:372
@@ -1145,11 +1138,11 @@ msgstr "Sista gruppblockbitkarta oinitierad.  "
 #: e2fsck/problem.c:377
 #, c-format
 msgid "Journal transaction %i was corrupt, replay was aborted.\n"
-msgstr "Journaltransaktion %i var trasig, återuppspelningen avbröts.\n"
+msgstr "Journaltransaktion %i var trasig, återuppspelningen avbröts.\n"
 
 #: e2fsck/problem.c:381
 msgid "The test_fs flag is set (and ext4 is available).  "
-msgstr "Flaggan test_fs är satt (och ext4 är tillgänligt).  "
+msgstr "Flaggan test_fs är satt (och ext4 är tillgänligt).  "
 
 #. @-expanded: superblock last mount time is in the future.\n
 #. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
@@ -1157,11 +1150,10 @@ msgstr "Flaggan test_fs 
 #: e2fsck/problem.c:386
 msgid ""
 "@S last mount time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set)  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)  "
 msgstr ""
 "Superblockets senaste monteringstid ligger i framtiden.\n"
-"\t(med mindre än en dag, förmodligen för att hårdvaruklockan går fel)"
+"\t(med mindre än en dag, förmodligen för att hårdvaruklockan går fel)"
 
 #. @-expanded: superblock last write time is in the future.\n
 #. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
@@ -1169,33 +1161,31 @@ msgstr ""
 #: e2fsck/problem.c:392
 msgid ""
 "@S last write time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set).  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set).  "
 msgstr ""
 "Superblockets skrevs senast i framtiden.\n"
-"\t(med mindre än en dag, förmodligen för att hårdvaruklockan går fel)"
+"\t(med mindre än en dag, förmodligen för att hårdvaruklockan går fel)"
 
 #. @-expanded: One or more block group descriptor checksums are invalid.  
 #: e2fsck/problem.c:398
 msgid "One or more @b @g descriptor checksums are invalid.  "
-msgstr "Kontrollsumma för en eller flera blockgruppbeskrivare är ogiltig.  "
+msgstr "Kontrollsumma för en eller flera blockgruppbeskrivare är ogiltig.  "
 
 #. @-expanded: Setting free inodes count to %j (was %i)\n
 #: e2fsck/problem.c:403
 msgid "Setting free @is count to %j (was %i)\n"
-msgstr "Sätter antalet fria inoder %j (var %i)\n"
+msgstr "Sätter antalet fria inoder %j (var %i)\n"
 
 #. @-expanded: Setting free blocks count to %c (was %b)\n
 #: e2fsck/problem.c:408
 msgid "Setting free @bs count to %c (was %b)\n"
-msgstr "Sätter antalet fria block till %c (var %b)\n"
+msgstr "Sätter antalet fria block till %c (var %b)\n"
 
 #. @-expanded: Making quota inode %i (%Q) hidden.\n
 #: e2fsck/problem.c:413
-#, fuzzy
 msgid "Making @q @i %i (%Q) hidden.\n"
 msgstr ""
-"Gör kvotinoder dolda.\n"
+"Gör kvotinod %i (%Q) dold.\n"
 "\n"
 
 #. @-expanded: superblock has invalid MMP block.  
@@ -1226,17 +1216,17 @@ msgstr "Pass 1: Kontrollerar inoder, block och storlekar\n"
 #. @-expanded: root inode is not a directory.  
 #: e2fsck/problem.c:444
 msgid "@r is not a @d.  "
-msgstr "Rootinod är inte en katalog.  "
+msgstr "Rootinod är inte en katalog.  "
 
 #. @-expanded: root inode has dtime set (probably due to old mke2fs).  
 #: e2fsck/problem.c:449
 msgid "@r has dtime set (probably due to old mke2fs).  "
-msgstr "rotinod har dtid satt (förmodligen på grund av gammal mke2fs).  "
+msgstr "rotinod har dtid satt (förmodligen på grund av gammal mke2fs).  "
 
 #. @-expanded: Reserved inode %i (%Q) has invalid mode.  
 #: e2fsck/problem.c:454
 msgid "Reserved @i %i (%Q) has @n mode.  "
-msgstr "Reserverad inod %i %Q har ogiltiga rättigheter.  "
+msgstr "Reserverad inod %i %Q har ogiltiga rättigheter.  "
 
 #. @-expanded: deleted inode %i has zero dtime.  
 #: e2fsck/problem.c:459
@@ -1248,51 +1238,48 @@ msgstr "Raderad inod %i har dtid noll.  "
 #: e2fsck/problem.c:464
 #, c-format
 msgid "@i %i is in use, but has dtime set.  "
-msgstr "Inod %i används, men har dtid satt.  "
+msgstr "Inod %i används, men har dtid satt.  "
 
 #. @-expanded: inode %i is a zero-length directory.  
 #: e2fsck/problem.c:469
 #, c-format
 msgid "@i %i is a @z @d.  "
-msgstr "Inod %i är en nollängds katalog.  "
+msgstr "Inod %i är en nollängds katalog.  "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:474
 msgid "@g %g's @b @B at %b @C.\n"
-msgstr ""
-"Grupp %g:s blockbitkarta vid %b står i konflikt med annat filsystemblock.\n"
+msgstr "Grupp %g:s blockbitkarta vid %b står i konflikt med annat filsystemblock.\n"
 
 #. @-expanded: group %g's inode bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:479
 msgid "@g %g's @i @B at %b @C.\n"
-msgstr ""
-"Grupp %g:s inodbitkarta vid %b står i konflikt med annat filsystemblock.\n"
+msgstr "Grupp %g:s inodbitkarta vid %b står i konflikt med annat filsystemblock.\n"
 
 #. @-expanded: group %g's inode table at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:484
 msgid "@g %g's @i table at %b @C.\n"
-msgstr ""
-"Grupp %g:s inodtabell vid %b står i konflikt med annat filsystemblock.\n"
+msgstr "Grupp %g:s inodtabell vid %b står i konflikt med annat filsystemblock.\n"
 
 #. @-expanded: group %g's block bitmap (%b) is bad.  
 #: e2fsck/problem.c:489
 msgid "@g %g's @b @B (%b) is bad.  "
-msgstr "Grupp %g:s blockbitkarta (%b) år felaktig.  "
+msgstr "Grupp %g:s blockbitkarta (%b) år felaktig.  "
 
 #. @-expanded: group %g's inode bitmap (%b) is bad.  
 #: e2fsck/problem.c:494
 msgid "@g %g's @i @B (%b) is bad.  "
-msgstr "Grupp %g:s inodbitkarta (%b) är felaktig.  "
+msgstr "Grupp %g:s inodbitkarta (%b) är felaktig.  "
 
 #. @-expanded: inode %i, i_size is %Is, should be %N.  
 #: e2fsck/problem.c:499
 msgid "@i %i, i_size is %Is, @s %N.  "
-msgstr "Inod %i, i_storlek är %Is, skulle varit %N.  "
+msgstr "Inod %i, i_storlek är %Is, skulle varit %N.  "
 
 #. @-expanded: inode %i, i_blocks is %Ib, should be %N.  
 #: e2fsck/problem.c:504
 msgid "@i %i, i_@bs is %Ib, @s %N.  "
-msgstr "Inod %i, i_block är %Ib, skulle varit %N.  "
+msgstr "Inod %i, i_block är %Ib, skulle varit %N.  "
 
 #. @-expanded: illegal %B (%b) in inode %i.  
 #: e2fsck/problem.c:509
@@ -1302,7 +1289,7 @@ msgstr "Ogiltigt %B (%b) i inod %i.  "
 #. @-expanded: %B (%b) overlaps filesystem metadata in inode %i.  
 #: e2fsck/problem.c:514
 msgid "%B (%b) overlaps @f metadata in @i %i.  "
-msgstr "%B (%b) överlappar filsystemmetadata i inod %i.  "
+msgstr "%B (%b) överlappar filsystemmetadata i inod %i.  "
 
 #. @-expanded: inode %i has illegal block(s).  
 #: e2fsck/problem.c:519
@@ -1314,12 +1301,12 @@ msgstr "Inod %i har ogiltiga block.  "
 #: e2fsck/problem.c:524
 #, c-format
 msgid "Too many illegal @bs in @i %i.\n"
-msgstr "För många ogiltiga block i inod %i.\n"
+msgstr "För många ogiltiga block i inod %i.\n"
 
 #. @-expanded: illegal %B (%b) in bad block inode.  
 #: e2fsck/problem.c:529
 msgid "@I %B (%b) in bad @b @i.  "
-msgstr "Ogiltigt %B (%b) i inod för felaktiga block.  "
+msgstr "Ogiltigt %B (%b) i inod för felaktiga block.  "
 
 #. @-expanded: Bad block inode has illegal block(s).  
 #: e2fsck/problem.c:534
@@ -1329,13 +1316,12 @@ msgstr "Felaktig blockinod har ogiltiga block.  "
 #. @-expanded: Duplicate or bad block in use!\n
 #: e2fsck/problem.c:539
 msgid "Duplicate or bad @b in use!\n"
-msgstr "Duplicerat eller felaktigt block används!\n"
+msgstr "Duplicerat eller felaktigt block används!\n"
 
 #. @-expanded: Bad block %b used as bad block inode indirect block.  
 #: e2fsck/problem.c:544
 msgid "Bad @b %b used as bad @b @i indirect @b.  "
-msgstr ""
-"Felaktigt block %b använt som indirektblock för inod för dåliga block.  "
+msgstr "Felaktigt block %b använt som indirektblock för inod för dåliga block.  "
 
 #. @-expanded: \n
 #. @-expanded: The bad block inode has probably been corrupted.  You probably\n
@@ -1349,8 +1335,8 @@ msgid ""
 "in the @f.\n"
 msgstr ""
 "\n"
-"Inoden för dåliga block har antagligen blivit skadad.  Du bör\n"
-"antagligen sluta nu och köra e2fsck -c för att söka efter dåliga block\n"
+"Inoden för dåliga block har antagligen blivit skadad.  Du bör\n"
+"antagligen sluta nu och köra e2fsck -c för att söka efter dåliga block\n"
 "i filsystemet.\n"
 
 #. @-expanded: \n
@@ -1361,7 +1347,7 @@ msgid ""
 "If the @b is really bad, the @f can not be fixed.\n"
 msgstr ""
 "\n"
-"Om blocket verkligen är dåligt kan inte filsystemet lagas.\n"
+"Om blocket verkligen är dåligt kan inte filsystemet lagas.\n"
 
 #. @-expanded: You can remove this block from the bad block list and hope\n
 #. @-expanded: that the block is really OK.  But there are no guarantees.\n
@@ -1372,55 +1358,50 @@ msgid ""
 "that the @b is really OK.  But there are no guarantees.\n"
 "\n"
 msgstr ""
-"Du kan ta bort detta block från listan över dåliga block och hoppas\n"
-"att blocket verkligen är OK. men det finns inga garaniter.\n"
+"Du kan ta bort detta block från listan över dåliga block och hoppas\n"
+"att blocket verkligen är OK. men det finns inga garaniter.\n"
 "\n"
 
 #. @-expanded: The primary superblock (%b) is on the bad block list.\n
 #: e2fsck/problem.c:567
 msgid "The primary @S (%b) is on the bad @b list.\n"
-msgstr "Det primära superblocket (%b) är på listan över dåliga block.\n"
+msgstr "Det primära superblocket (%b) är på listan över dåliga block.\n"
 
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
 #: e2fsck/problem.c:572
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"Block %b i de primära gruppbeskrivarna är på listan över dåliga block\n"
+msgstr "Block %b i de primära gruppbeskrivarna är på listan över dåliga block\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
 #: e2fsck/problem.c:578
 msgid "Warning: Group %g's @S (%b) is bad.\n"
-msgstr "Varning: Grupp %g:s superblock (%b) är dåligt.\n"
+msgstr "Varning: Grupp %g:s superblock (%b) är dåligt.\n"
 
 #. @-expanded: Warning: Group %g's copy of the group descriptors has a bad block (%b).\n
 #: e2fsck/problem.c:583
 msgid "Warning: Group %g's copy of the @g descriptors has a bad @b (%b).\n"
-msgstr ""
-"Varning: Grupp %g:s kopia av gruppbeskrivarna har ett dåligt block (%b).\n"
+msgstr "Varning: Grupp %g:s kopia av gruppbeskrivarna har ett dåligt block (%b).\n"
 
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
 #: e2fsck/problem.c:589
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Programmeringsfel?  Block nr. %b tas i anspråk utan anledning i "
-"process_bad_block.\n"
+msgstr "Programmeringsfel?  Block nr. %b tas i anspråk utan anledning i process_bad_block.\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
 #: e2fsck/problem.c:595
 msgid "@A %N contiguous @b(s) in @b @g %g for %s: %m\n"
-msgstr ""
-"Fel vid allokering av %N konsekutiva block i blockgrupp %g för %s: %m\n"
+msgstr "Fel vid allokering av %N konsekutiva block i blockgrupp %g för %s: %m\n"
 
 #. @-expanded: error allocating block buffer for relocating %s\n
 #: e2fsck/problem.c:600
 #, c-format
 msgid "@A @b buffer for relocating %s\n"
-msgstr "Fil vid allokering av blockbuffert för relokering av %s\n"
+msgstr "Fil vid allokering av blockbuffert för relokering av %s\n"
 
 #. @-expanded: Relocating group %g's %s from %b to %c...\n
 #: e2fsck/problem.c:605
 msgid "Relocating @g %g's %s from %b to %c...\n"
-msgstr "Relokerar grupp %g:s %s från %b till %c ...\n"
+msgstr "Relokerar grupp %g:s %s från %b till %c ...\n"
 
 #. @-expanded: Relocating group %g's %s to %c...\n
 #: e2fsck/problem.c:610
@@ -1431,7 +1412,7 @@ msgstr "Relokerar grupp %g:s %s till %c ...\n"
 #. @-expanded: Warning: could not read block %b of %s: %m\n
 #: e2fsck/problem.c:615
 msgid "Warning: could not read @b %b of %s: %m\n"
-msgstr "Varning: kunde inte läsa block %b av %s: %m\n"
+msgstr "Varning: kunde inte läsa block %b av %s: %m\n"
 
 #. @-expanded: Warning: could not write block %b for %s: %m\n
 #: e2fsck/problem.c:620
@@ -1452,7 +1433,7 @@ msgstr "Fel vid allokering av blockbitkarta (%N): %m\n"
 #: e2fsck/problem.c:635
 #, c-format
 msgid "@A icount link information: %m\n"
-msgstr "Fel vid allokering av icount-länkinformation: %m\n"
+msgstr "Fel vid allokering av icount-länkinformation: %m\n"
 
 #. @-expanded: error allocating directory block array: %m\n
 #: e2fsck/problem.c:640
@@ -1464,31 +1445,29 @@ msgstr "Fel vid allokering av katalogblockvektor: %m\n"
 #: e2fsck/problem.c:645
 #, c-format
 msgid "Error while scanning @is (%i): %m\n"
-msgstr "Fel vid genomsökning av inoder (%i): %m\n"
+msgstr "Fel vid genomsökning av inoder (%i): %m\n"
 
 #. @-expanded: Error while iterating over blocks in inode %i: %m\n
 #: e2fsck/problem.c:650
 #, c-format
 msgid "Error while iterating over @bs in @i %i: %m\n"
-msgstr "Fel vid iterering över block i inod %i: %m\n"
+msgstr "Fel vid iterering över block i inod %i: %m\n"
 
 #. @-expanded: Error storing inode count information (inode=%i, count=%N): %m\n
 #: e2fsck/problem.c:655
 msgid "Error storing @i count information (@i=%i, count=%N): %m\n"
-msgstr "Fel vid lagring av inodsräknarinformation (inod=%i, antal=%N): %m\n"
+msgstr "Fel vid lagring av inodsräknarinformation (inod=%i, antal=%N): %m\n"
 
 #. @-expanded: Error storing directory block information (inode=%i, block=%b, num=%N): %m\n
 #: e2fsck/problem.c:660
 msgid "Error storing @d @b information (@i=%i, @b=%b, num=%N): %m\n"
-msgstr ""
-"Fel vid lagring av katalogblocksinformation (inod=%i, block=%b, antal=%N): "
-"%m\n"
+msgstr "Fel vid lagring av katalogblocksinformation (inod=%i, block=%b, antal=%N): %m\n"
 
 #. @-expanded: Error reading inode %i: %m\n
 #: e2fsck/problem.c:666
 #, c-format
 msgid "Error reading @i %i: %m\n"
-msgstr "Fel vid läsning av inod %i: %m\n"
+msgstr "Fel vid läsning av inod %i: %m\n"
 
 #. @-expanded: inode %i has imagic flag set.  
 #: e2fsck/problem.c:674
@@ -1504,15 +1483,14 @@ msgid ""
 "Special (@v/socket/fifo/symlink) file (@i %i) has immutable\n"
 "or append-only flag set.  "
 msgstr ""
-"Specialfil (enhet/uttag (socket)/fifo/symlänk) (inod %i) har flaggan\n"
-"oföränderlig eller endast tillägg satt."
+"Specialfil (enhet/uttag (socket)/fifo/symlänk) (inod %i) har flaggan\n"
+"oföränderlig eller endast tillägg satt."
 
 #. @-expanded: inode %i has compression flag set on filesystem without compression support.  
 #: e2fsck/problem.c:685
 #, c-format
 msgid "@i %i has @cion flag set on @f without @cion support.  "
-msgstr ""
-"Inod %i har kompressionsflagga satt på filsystem utan kompressionsstöd.  "
+msgstr "Inod %i har kompressionsflagga satt på filsystem utan kompressionsstöd.  "
 
 #. @-expanded: Special (device/socket/fifo) inode %i has non-zero size.  
 #: e2fsck/problem.c:690
@@ -1523,109 +1501,109 @@ msgstr "Specialinod (enhet/uttag (socket)/fifo) %i har nollskild storlek.  "
 #. @-expanded: journal inode is not in use, but contains data.  
 #: e2fsck/problem.c:700
 msgid "@j @i is not in use, but contains data.  "
-msgstr "Journalinod används, men innehåller data.  "
+msgstr "Journalinod används, men innehåller data.  "
 
 #. @-expanded: journal is not regular file.  
 #: e2fsck/problem.c:705
 msgid "@j is not regular file.  "
-msgstr "Journal är inte en vanlig fil.  "
+msgstr "Journal är inte en vanlig fil.  "
 
 #. @-expanded: inode %i was part of the orphaned inode list.  
 #: e2fsck/problem.c:710
 #, c-format
 msgid "@i %i was part of the @o @i list.  "
-msgstr "Inod %i var med i listan över föräldralösa inoder.  "
+msgstr "Inod %i var med i listan över föräldralösa inoder.  "
 
 #. @-expanded: inodes that were part of a corrupted orphan linked list found.  
 #: e2fsck/problem.c:716
 msgid "@is that were part of a corrupted orphan linked list found.  "
-msgstr "Inoder som var med i trasig lista över föräldralösa inoder hittad.  "
+msgstr "Inoder som var med i trasig lista över föräldralösa inoder hittad.  "
 
 #. @-expanded: error allocating refcount structure (%N): %m\n
 #: e2fsck/problem.c:721
 msgid "@A refcount structure (%N): %m\n"
-msgstr "Fel vid allokering av referensräknarstruktur (%N): %m\n"
+msgstr "Fel vid allokering av referensräknarstruktur (%N): %m\n"
 
 #. @-expanded: Error reading extended attribute block %b for inode %i.  
 #: e2fsck/problem.c:726
 msgid "Error reading @a @b %b for @i %i.  "
-msgstr "Fel vid läsning av utökade attribut-block %b för inod %i.  "
+msgstr "Fel vid läsning av utökade attribut-block %b för inod %i.  "
 
 #. @-expanded: inode %i has a bad extended attribute block %b.  
 #: e2fsck/problem.c:731
 msgid "@i %i has a bad @a @b %b.  "
-msgstr "Inod %i har ett felaktigt utökade attribut-block %b.  "
+msgstr "Inod %i har ett felaktigt utökade attribut-block %b.  "
 
 #. @-expanded: Error reading extended attribute block %b (%m).  
 #: e2fsck/problem.c:736
 msgid "Error reading @a @b %b (%m).  "
-msgstr "Fel vid läsning av utökade attribut-block %b (%m).  "
+msgstr "Fel vid läsning av utökade attribut-block %b (%m).  "
 
 #. @-expanded: extended attribute block %b has reference count %r, should be %N.  
 #: e2fsck/problem.c:741
 msgid "@a @b %b has reference count %r, @s %N.  "
-msgstr "Utökade attribut-block %b har referensräknare %r, skall vara %N.  "
+msgstr "Utökade attribut-block %b har referensräknare %r, skall vara %N.  "
 
 #. @-expanded: Error writing extended attribute block %b (%m).  
 #: e2fsck/problem.c:746
 msgid "Error writing @a @b %b (%m).  "
-msgstr "Fel vid skrivning av utökade attribut-block %b (%m).  "
+msgstr "Fel vid skrivning av utökade attribut-block %b (%m).  "
 
 #. @-expanded: extended attribute block %b has h_blocks > 1.  
 #: e2fsck/problem.c:751
 msgid "@a @b %b has h_@bs > 1.  "
-msgstr "Utökade attribut-block %b har h_blocks > 1.  "
+msgstr "Utökade attribut-block %b har h_blocks > 1.  "
 
 #. @-expanded: error allocating extended attribute block %b.  
 #: e2fsck/problem.c:756
 msgid "@A @a @b %b.  "
-msgstr "Fel vid allokering av block för utökade attribut %b.  "
+msgstr "Fel vid allokering av block för utökade attribut %b.  "
 
 #. @-expanded: extended attribute block %b is corrupt (allocation collision).  
 #: e2fsck/problem.c:761
 msgid "@a @b %b is corrupt (allocation collision).  "
-msgstr "Utökade attribut-block %b är trasigt (allokeringskollision).  "
+msgstr "Utökade attribut-block %b är trasigt (allokeringskollision).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid name).  
 #: e2fsck/problem.c:766
 msgid "@a @b %b is corrupt (@n name).  "
-msgstr "Utökade attribut-block %b är trasigt (ogiltigt namn).  "
+msgstr "Utökade attribut-block %b är trasigt (ogiltigt namn).  "
 
 #. @-expanded: extended attribute block %b is corrupt (invalid value).  
 #: e2fsck/problem.c:771
 msgid "@a @b %b is corrupt (@n value).  "
-msgstr "Utökade attribut-block %b är trasigt (ogiltigt värde).  "
+msgstr "Utökade attribut-block %b är trasigt (ogiltigt värde).  "
 
 #. @-expanded: inode %i is too big.  
 #: e2fsck/problem.c:776
 #, c-format
 msgid "@i %i is too big.  "
-msgstr "Inod %i är för stor.  "
+msgstr "Inod %i är för stor.  "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
 #: e2fsck/problem.c:780
 msgid "%B (%b) causes @d to be too big.  "
-msgstr "%B (%b) får katalog att bli för stor.  "
+msgstr "%B (%b) får katalog att bli för stor.  "
 
 #: e2fsck/problem.c:785
 msgid "%B (%b) causes file to be too big.  "
-msgstr "%B (%b) får fil att bli för stor.  "
+msgstr "%B (%b) får fil att bli för stor.  "
 
 #: e2fsck/problem.c:790
 msgid "%B (%b) causes symlink to be too big.  "
-msgstr "%B (%b) får symlänk att bli för stor.  "
+msgstr "%B (%b) får symlänk att bli för stor.  "
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
 #: e2fsck/problem.c:795
 #, c-format
 msgid "@i %i has INDEX_FL flag set on @f without htree support.\n"
-msgstr "Inod %i har flagga INDEX_FL satt på filsystem utan stöd för htree.\n"
+msgstr "Inod %i har flagga INDEX_FL satt på filsystem utan stöd för htree.\n"
 
 #. @-expanded: inode %i has INDEX_FL flag set but is not a directory.\n
 #: e2fsck/problem.c:800
 #, c-format
 msgid "@i %i has INDEX_FL flag set but is not a @d.\n"
-msgstr "Inod %i har flagga INDEX_FL satt men är inte en katalog.\n"
+msgstr "Inod %i har flagga INDEX_FL satt men är inte en katalog.\n"
 
 #. @-expanded: HTREE directory inode %i has an invalid root node.\n
 #: e2fsck/problem.c:805
@@ -1636,18 +1614,18 @@ msgstr "HTREE kataloginod %i har en ogiltig rotnod.\n"
 #. @-expanded: HTREE directory inode %i has an unsupported hash version (%N)\n
 #: e2fsck/problem.c:810
 msgid "@h %i has an unsupported hash version (%N)\n"
-msgstr "HTREE katalog-inod %i har en hashversion som inte stöds (%N)\n"
+msgstr "HTREE katalog-inod %i har en hashversion som inte stöds (%N)\n"
 
 #. @-expanded: HTREE directory inode %i uses an incompatible htree root node flag.\n
 #: e2fsck/problem.c:815
 #, c-format
 msgid "@h %i uses an incompatible htree root node flag.\n"
-msgstr "HTREE katalog-inod %i använder en inkompatibel htree rotnodsflagga.\n"
+msgstr "HTREE katalog-inod %i använder en inkompatibel htree rotnodsflagga.\n"
 
 #. @-expanded: HTREE directory inode %i has a tree depth (%N) which is too big\n
 #: e2fsck/problem.c:820
 msgid "@h %i has a tree depth (%N) which is too big\n"
-msgstr "HTREE katalog-inod %i har ett träddjup (%N) som är för stort\n"
+msgstr "HTREE katalog-inod %i har ett träddjup (%N) som är för stort\n"
 
 #. @-expanded: Bad block inode has an indirect block (%b) that conflicts with\n
 #. @-expanded: filesystem metadata.  
@@ -1656,57 +1634,55 @@ msgid ""
 "Bad @b @i has an indirect @b (%b) that conflicts with\n"
 "@f metadata.  "
 msgstr ""
-"Inoden för dåliga block har ett indirektblock (%b) som står i konflikt\n"
+"Inoden för dåliga block har ett indirektblock (%b) som står i konflikt\n"
 "med filsystemsmetadata.  "
 
 #. @-expanded: Resize inode (re)creation failed: %m.
 #: e2fsck/problem.c:831
 #, c-format
 msgid "Resize @i (re)creation failed: %m."
-msgstr "Misslyckades att återskapa storleksändringsinod: %m."
+msgstr "Misslyckades att återskapa storleksändringsinod: %m."
 
 #. @-expanded: inode %i has a extra size (%IS) which is invalid\n
 #: e2fsck/problem.c:836
 msgid "@i %i has a extra size (%IS) which is @n\n"
-msgstr "Inod %i har en extra storlek (%IS) som är ogiltig\n"
+msgstr "Inod %i har en extra storlek (%IS) som är ogiltig\n"
 
 #. @-expanded: extended attribute in inode %i has a namelen (%N) which is invalid\n
 #: e2fsck/problem.c:841
 msgid "@a in @i %i has a namelen (%N) which is @n\n"
-msgstr "Utökat attribut i inod %i har ett namelen (%N) som är ogiltig\n"
+msgstr "Utökat attribut i inod %i har ett namelen (%N) som är ogiltig\n"
 
 #. @-expanded: extended attribute in inode %i has a value offset (%N) which is invalid\n
 #: e2fsck/problem.c:846
 msgid "@a in @i %i has a value offset (%N) which is @n\n"
-msgstr "Utökat attribut i inod %i har en värdeposition (%N) som är ogiltig\n"
+msgstr "Utökat attribut i inod %i har en värdeposition (%N) som är ogiltig\n"
 
 #. @-expanded: extended attribute in inode %i has a value block (%N) which is invalid (must be 0)\n
 #: e2fsck/problem.c:851
 msgid "@a in @i %i has a value @b (%N) which is @n (must be 0)\n"
-msgstr ""
-"Utökat attribut i inod %i har ett värdeblock (%N) som är ogiltigt (måste "
-"vara 0)\n"
+msgstr "Utökat attribut i inod %i har ett värdeblock (%N) som är ogiltigt (måste vara 0)\n"
 
 #. @-expanded: extended attribute in inode %i has a value size (%N) which is invalid\n
 #: e2fsck/problem.c:856
 msgid "@a in @i %i has a value size (%N) which is @n\n"
-msgstr "Utökat attribut i inod %i har ett värdestorlek (%N) som är ogiltig\n"
+msgstr "Utökat attribut i inod %i har ett värdestorlek (%N) som är ogiltig\n"
 
 #. @-expanded: extended attribute in inode %i has a hash (%N) which is invalid\n
 #: e2fsck/problem.c:861
 msgid "@a in @i %i has a hash (%N) which is @n\n"
-msgstr "Utökat attribut i inod %i har hash (%N) som är ogiltig\n"
+msgstr "Utökat attribut i inod %i har hash (%N) som är ogiltig\n"
 
 #. @-expanded: inode %i is a %It but it looks like it is really a directory.\n
 #: e2fsck/problem.c:866
 msgid "@i %i is a %It but it looks like it is really a directory.\n"
-msgstr "inod %i är en %It men det ser ut som det egentligen är en katalog.\n"
+msgstr "inod %i är en %It men det ser ut som det egentligen är en katalog.\n"
 
 #. @-expanded: Error while reading over extent tree in inode %i: %m\n
 #: e2fsck/problem.c:871
 #, c-format
 msgid "Error while reading over @x tree in @i %i: %m\n"
-msgstr "Fel vid läsning över utsträckningsträd i inod %i: %m\n"
+msgstr "Fel vid läsning över utsträckningsträd i inod %i: %m\n"
 
 #. @-expanded: Failed to iterate extents in inode %i\n
 #. @-expanded: \t(op %s, blk %b, lblk %c): %m\n
@@ -1715,7 +1691,7 @@ msgid ""
 "Failed to iterate extents in @i %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
 msgstr ""
-"Misslyckades att iterera över utsträckningar i inod %i\n"
+"Misslyckades att iterera över utsträckningar i inod %i\n"
 "\t(op %s, blk %b, lblk %c): %m\n"
 
 #. @-expanded: inode %i has an invalid extent\n
@@ -1725,8 +1701,8 @@ msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, @n physical @b %b, len %N)\n"
 msgstr ""
-"inod %i har en ogiltig utsträckning\n"
-"\t(logiskt block %c, ogiltigt fysiskt block %b, längd %N)\n"
+"inod %i har en ogiltig utsträckning\n"
+"\t(logiskt block %c, ogiltigt fysiskt block %b, längd %N)\n"
 
 #. @-expanded: inode %i has an invalid extent\n
 #. @-expanded: \t(logical block %c, physical block %b, invalid len %N)\n
@@ -1735,35 +1711,31 @@ msgid ""
 "@i %i has an @n extent\n"
 "\t(logical @b %c, physical @b %b, @n len %N)\n"
 msgstr ""
-"inod %i har en ogiltig utsträckning\n"
-"\t(logiskt block %c, fysiskt block %b, ogiltig längd %N)\n"
+"inod %i har en ogiltig utsträckning\n"
+"\t(logiskt block %c, fysiskt block %b, ogiltig längd %N)\n"
 
 #. @-expanded: inode %i has EXTENTS_FL flag set on filesystem without extents support.\n
 #: e2fsck/problem.c:892
 #, c-format
 msgid "@i %i has EXTENTS_FL flag set on @f without extents support.\n"
-msgstr ""
-"Inod %i har flaggan EXTENTS_FL satt på filsystemet utan stöd för "
-"utsträckningar.\n"
+msgstr "Inod %i har flaggan EXTENTS_FL satt på filsystemet utan stöd för utsträckningar.\n"
 
 #. @-expanded: inode %i is in extent format, but superblock is missing EXTENTS feature\n
 #: e2fsck/problem.c:897
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"inod %i är i utsträckningsformat, men superblocket saknar egenskapen "
-"EXTENTS\n"
+msgstr "inod %i är i utsträckningsformat, men superblocket saknar egenskapen EXTENTS\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
 #: e2fsck/problem.c:902
 #, c-format
 msgid "@i %i missing EXTENT_FL, but is in extents format\n"
-msgstr "inod %i saknar EXTENT_FL, men är i utsträckningsformat\n"
+msgstr "inod %i saknar EXTENT_FL, men är i utsträckningsformat\n"
 
 #: e2fsck/problem.c:907
 #, c-format
 msgid "Fast symlink %i has EXTENT_FL set.  "
-msgstr "Snabb symlänk %i har EXTENT_FL satt.  "
+msgstr "Snabb symlänk %i har EXTENT_FL satt.  "
 
 #. @-expanded: inode %i has out of order extents\n
 #. @-expanded: \t(invalid logical block %c, physical block %b, len %N)\n
@@ -1772,39 +1744,39 @@ msgid ""
 "@i %i has out of order extents\n"
 "\t(@n logical @b %c, physical @b %b, len %N)\n"
 msgstr ""
-"inod %i har utsträckningar i oordning\n"
-"\t(ogiltigt logiskt block %c, fysiskt block %b, längd %N)\n"
+"inod %i har utsträckningar i oordning\n"
+"\t(ogiltigt logiskt block %c, fysiskt block %b, längd %N)\n"
 
 #. @-expanded: inode %i has an invalid extent node (blk %b, lblk %c)\n
 #: e2fsck/problem.c:916
 msgid "@i %i has an invalid extent node (blk %b, lblk %c)\n"
-msgstr "inod %i har en ogiltig utsträckningsnod (blk %b, lblk %c)\n"
+msgstr "inod %i har en ogiltig utsträckningsnod (blk %b, lblk %c)\n"
 
 #. @-expanded: Error converting subcluster block bitmap: %m\n
 #: e2fsck/problem.c:921
 #, c-format
 msgid "Error converting subcluster @b @B: %m\n"
-msgstr "Fel vid konvertering av blockbitkarta över subkluster: %m\n"
+msgstr "Fel vid konvertering av blockbitkarta över subkluster: %m\n"
 
 #. @-expanded: quota inode is not regular file.  
 #: e2fsck/problem.c:926
 msgid "@q @i is not regular file.  "
-msgstr "Kvotainoden är inte en vanlig fil.  "
+msgstr "Kvotainoden är inte en vanlig fil.  "
 
 #. @-expanded: quota inode is not in use, but contains data.  
 #: e2fsck/problem.c:931
 msgid "@q @i is not in use, but contains data.  "
-msgstr "Kvotinoden används inte, men innehåller data.  "
+msgstr "Kvotinoden används inte, men innehåller data.  "
 
 #. @-expanded: quota inode is visible to the user.  
 #: e2fsck/problem.c:936
 msgid "@q @i is visible to the user.  "
-msgstr "Kvotinoden är synlig för användaren.  "
+msgstr "Kvotinoden är synlig för användaren.  "
 
 #. @-expanded: The bad block inode looks invalid.  
 #: e2fsck/problem.c:941
 msgid "The bad @b @i looks @n.  "
-msgstr "Inoden för dåliga block verkar felaktig."
+msgstr "Inoden för dåliga block verkar felaktig."
 
 #. @-expanded: inode %i has zero length extent\n
 #. @-expanded: \t(invalid logical block %c, physical block %b)\n
@@ -1813,7 +1785,7 @@ msgid ""
 "@i %i has zero length extent\n"
 "\t(@n logical @b %c, physical @b %b)\n"
 msgstr ""
-"inod %i har en utsträckning med noll längd\n"
+"inod %i har en utsträckning med noll längd\n"
 "\t(ogiltigt logiskt block %c, fysiskt block %b)\n"
 
 #. @-expanded: \n
@@ -1826,20 +1798,19 @@ msgid ""
 "Pass 1B: Rescanning for @m @bs\n"
 msgstr ""
 "\n"
-"Kör ytterliggare pass för att lösa upp block som används av mer än en "
-"inod ...\n"
-"Pass 1B: Söker igen efter block som används flera gånger\n"
+"Kör ytterliggare pass för att lösa upp block som används av mer än en inod ...\n"
+"Pass 1B: Söker igen efter block som används flera gånger\n"
 
 #. @-expanded: multiply-claimed block(s) in inode %i:
 #: e2fsck/problem.c:959
 #, c-format
 msgid "@m @b(s) in @i %i:"
-msgstr "Flerfaldigt ianspråkstagna block i inod %i:"
+msgstr "Flerfaldigt ianspråkstagna block i inod %i:"
 
 #: e2fsck/problem.c:974
 #, c-format
 msgid "Error while scanning inodes (%i): %m\n"
-msgstr "Fel vid genomsökning av inoder (%i): %m\n"
+msgstr "Fel vid genomsökning av inoder (%i): %m\n"
 
 #. @-expanded: error allocating inode bitmap (inode_dup_map): %m\n
 #: e2fsck/problem.c:979
@@ -1851,25 +1822,22 @@ msgstr "Fel vid allokering av inodbitkarta (inode_dup_map): %m\n"
 #: e2fsck/problem.c:984
 #, c-format
 msgid "Error while iterating over @bs in @i %i (%s): %m\n"
-msgstr "Fel vid iterering över block i inod %i (%s): %m\n"
+msgstr "Fel vid iterering över block i inod %i (%s): %m\n"
 
 #. @-expanded: Error adjusting refcount for extended attribute block %b (inode %i): %m\n
 #: e2fsck/problem.c:989 e2fsck/problem.c:1304
 msgid "Error adjusting refcount for @a @b %b (@i %i): %m\n"
-msgstr ""
-"Fel vid justering av referensräknare för externa attribut-block %b (inod "
-"%i): %m\n"
+msgstr "Fel vid justering av referensräknare för externa attribut-block %b (inod %i): %m\n"
 
 #. @-expanded: Pass 1C: Scanning directories for inodes with multiply-claimed blocks\n
 #: e2fsck/problem.c:994
 msgid "Pass 1C: Scanning directories for @is with @m @bs\n"
-msgstr ""
-"Pass 1C: Söker kataloger efter inoder med flerfaldigt ianspråkstagna block\n"
+msgstr "Pass 1C: Söker kataloger efter inoder med flerfaldigt ianspråkstagna block\n"
 
 #. @-expanded: Pass 1D: Reconciling multiply-claimed blocks\n
 #: e2fsck/problem.c:1000
 msgid "Pass 1D: Reconciling @m @bs\n"
-msgstr "Pass 1D: Förlikar flerfaldigt ianspråkstagna block\n"
+msgstr "Pass 1D: Förlikar flerfaldigt ianspråkstagna block\n"
 
 #. @-expanded: File %Q (inode #%i, mod time %IM) \n
 #. @-expanded:   has %r multiply-claimed block(s), shared with %N file(s):\n
@@ -1879,7 +1847,7 @@ msgid ""
 "  has %r @m @b(s), shared with %N file(s):\n"
 msgstr ""
 "Fil %Q (inod nr. %i, modifieringstid %IM) \n"
-"  har %r flerfaldigt ianspråkstagna block, delade med %N filer:\n"
+"  har %r flerfaldigt ianspråkstagna block, delade med %N filer:\n"
 
 #. @-expanded: \t%Q (inode #%i, mod time %IM)\n
 #: e2fsck/problem.c:1011
@@ -1898,7 +1866,7 @@ msgid ""
 "(There are %N @is containing @m @bs.)\n"
 "\n"
 msgstr ""
-"(Det finns %N inoder som innehåller flerfaldigt ianspråkstagna block.)\n"
+"(Det finns %N inoder som innehåller flerfaldigt ianspråkstagna block.)\n"
 "\n"
 
 #. @-expanded: multiply-claimed blocks already reassigned or cloned.\n
@@ -1908,7 +1876,7 @@ msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
 msgstr ""
-"Flerfaldig ianspråkstagna block redan överlåtna eller klonade.\n"
+"Flerfaldig ianspråkstagna block redan överlåtna eller klonade.\n"
 "\n"
 
 #: e2fsck/problem.c:1039
@@ -1925,7 +1893,7 @@ msgstr "Pass 2: Kontrollerar katalogstruktur\n"
 #: e2fsck/problem.c:1050
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
-msgstr "Ogiltigt inodsnummer för \".\" i kataloginod %i.\n"
+msgstr "Ogiltigt inodsnummer för \".\" i kataloginod %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
 #: e2fsck/problem.c:1055
@@ -1935,28 +1903,27 @@ msgstr "Post \"%Dn\" i %p (%i) har ogiltigt inodsnummer: %Di.\n"
 #. @-expanded: entry '%Dn' in %p (%i) has deleted/unused inode %Di.  
 #: e2fsck/problem.c:1060
 msgid "@E has @D/unused @i %Di.  "
-msgstr "Post \"%Dn\" i %p (%i) har raderad/oanvänd inod %Di.  "
+msgstr "Post \"%Dn\" i %p (%i) har raderad/oanvänd inod %Di.  "
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
 #: e2fsck/problem.c:1065
 msgid "@E @L to '.'  "
-msgstr "Post \"%Dn\" i %p (%i) är en länk till \".\"  "
+msgstr "Post \"%Dn\" i %p (%i) är en länk till \".\"  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
 #: e2fsck/problem.c:1070
 msgid "@E points to @i (%Di) located in a bad @b.\n"
-msgstr ""
-"Post \"%Dn\" i %p (%i) pekar på inod (%Di) som finns i ett trasigt block.\n"
+msgstr "Post \"%Dn\" i %p (%i) pekar på inod (%Di) som finns i ett trasigt block.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to directory %P (%Di).\n
 #: e2fsck/problem.c:1075
 msgid "@E @L to @d %P (%Di).\n"
-msgstr "Post \"%Dn\" i %p (%i) är en länk till katalog %P (%Di).\n"
+msgstr "Post \"%Dn\" i %p (%i) är en länk till katalog %P (%Di).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is a link to the root inode.\n
 #: e2fsck/problem.c:1080
 msgid "@E @L to the @r.\n"
-msgstr "Post \"%Dn\" i %p (%i) är en länk till rotinoden.\n"
+msgstr "Post \"%Dn\" i %p (%i) är en länk till rotinoden.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has illegal characters in its name.\n
 #: e2fsck/problem.c:1085
@@ -1978,8 +1945,7 @@ msgstr "\"..\" saknas i kataloginod %i.\n"
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
 #: e2fsck/problem.c:1100
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr ""
-"Första post \"%Dn\" (inod=%Di) i kataloginod %i (%p) skulle varit \".\"\n"
+msgstr "Första post \"%Dn\" (inod=%Di) i kataloginod %i (%p) skulle varit \".\"\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
 #: e2fsck/problem.c:1105
@@ -1989,32 +1955,32 @@ msgstr "Andra post \"%Dn\" (inod=%Di) i kataloginod %i skulle varit \"..\"\n"
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
 #: e2fsck/problem.c:1110
 msgid "i_faddr @F %IF, @s zero.\n"
-msgstr "i_faddr för inod %i (%Q) är %IF, skulle varit noll.\n"
+msgstr "i_faddr för inod %i (%Q) är %IF, skulle varit noll.\n"
 
 #. @-expanded: i_file_acl for inode %i (%Q) is %If, should be zero.\n
 #: e2fsck/problem.c:1115
 msgid "i_file_acl @F %If, @s zero.\n"
-msgstr "i_file_acl för inod %i (%Q) är %If, skulle varit noll.\n"
+msgstr "i_file_acl för inod %i (%Q) är %If, skulle varit noll.\n"
 
 #. @-expanded: i_dir_acl for inode %i (%Q) is %Id, should be zero.\n
 #: e2fsck/problem.c:1120
 msgid "i_dir_acl @F %Id, @s zero.\n"
-msgstr "i_dir_acl för inod %i (%Q) är %Id, skulle varit noll.\n"
+msgstr "i_dir_acl för inod %i (%Q) är %Id, skulle varit noll.\n"
 
 #. @-expanded: i_frag for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1125
 msgid "i_frag @F %N, @s zero.\n"
-msgstr "i_frag för inod %i (%Q) är %N, skulle varit noll.\n"
+msgstr "i_frag för inod %i (%Q) är %N, skulle varit noll.\n"
 
 #. @-expanded: i_fsize for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1130
 msgid "i_fsize @F %N, @s zero.\n"
-msgstr "i_fsize för inod %i (%Q) är %N, skulle varit noll.\n"
+msgstr "i_fsize för inod %i (%Q) är %N, skulle varit noll.\n"
 
 #. @-expanded: inode %i (%Q) has invalid mode (%Im).\n
 #: e2fsck/problem.c:1135
 msgid "@i %i (%Q) has @n mode (%Im).\n"
-msgstr "Inod %i (%Q) har ogiltiga rättigheter (%Im).\n"
+msgstr "Inod %i (%Q) har ogiltiga rättigheter (%Im).\n"
 
 #. @-expanded: directory inode %i, %B, offset %N: directory corrupted\n
 #: e2fsck/problem.c:1140
@@ -2024,7 +1990,7 @@ msgstr "Kataloginod %i, %B, position %N: katalogen trasig\n"
 #. @-expanded: directory inode %i, %B, offset %N: filename too long\n
 #: e2fsck/problem.c:1145
 msgid "@d @i %i, %B, offset %N: filename too long\n"
-msgstr "Kataloginod %i, %B, position %N: för långt filnamn\n"
+msgstr "Kataloginod %i, %B, position %N: för långt filnamn\n"
 
 #. @-expanded: directory inode %i has an unallocated %B.  
 #: e2fsck/problem.c:1150
@@ -2035,38 +2001,38 @@ msgstr "Kataloginod %i har ett oallokerat %B.  "
 #: e2fsck/problem.c:1155
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "\".\"-katalogpost i kataloginod %i är inte nollterminerad\n"
+msgstr "\".\"-katalogpost i kataloginod %i är inte nollterminerad\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
 #: e2fsck/problem.c:1160
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr "\"..\"-katalogpost i kataloginod %i är inte nollterminerad\n"
+msgstr "\"..\"-katalogpost i kataloginod %i är inte nollterminerad\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
 #: e2fsck/problem.c:1165
 msgid "@i %i (%Q) is an @I character @v.\n"
-msgstr "Inod %i (%Q) är en ogiltig teckenenhet.\n"
+msgstr "Inod %i (%Q) är en ogiltig teckenenhet.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal block device.\n
 #: e2fsck/problem.c:1170
 msgid "@i %i (%Q) is an @I @b @v.\n"
-msgstr "Inod %i (TQ är en ogiltig blockenhet.\n"
+msgstr "Inod %i (TQ är en ogiltig blockenhet.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
 #: e2fsck/problem.c:1175
 msgid "@E is duplicate '.' @e.\n"
-msgstr "Post \"%Dn\" i %p (%i) är duplicerad \".\"-post.\n"
+msgstr "Post \"%Dn\" i %p (%i) är duplicerad \".\"-post.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
 #: e2fsck/problem.c:1180
 msgid "@E is duplicate '..' @e.\n"
-msgstr "Post \"%Dn\" i %p (%i) är duplicerad \"..\"-post.\n"
+msgstr "Post \"%Dn\" i %p (%i) är duplicerad \"..\"-post.\n"
 
 #: e2fsck/problem.c:1185 e2fsck/problem.c:1485
 #, c-format
 msgid "Internal error: couldn't find dir_info for %i.\n"
-msgstr "Internt fel: kunde inte hitta dir_info för %i.\n"
+msgstr "Internt fel: kunde inte hitta dir_info för %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has rec_len of %Dr, should be %N.\n
 #: e2fsck/problem.c:1190
@@ -2085,12 +2051,12 @@ msgstr "Fel vid allokering av icount-struktur: %m\n"
 #: e2fsck/problem.c:1200
 #, c-format
 msgid "Error iterating over @d @bs: %m\n"
-msgstr "Fel vid iterering över katalogblock: %m\n"
+msgstr "Fel vid iterering över katalogblock: %m\n"
 
 #. @-expanded: Error reading directory block %b (inode %i): %m\n
 #: e2fsck/problem.c:1205
 msgid "Error reading @d @b %b (@i %i): %m\n"
-msgstr "Fel vid läsning av katalogblock %b (inod %i): %m\n"
+msgstr "Fel vid läsning av katalogblock %b (inod %i): %m\n"
 
 #. @-expanded: Error writing directory block %b (inode %i): %m\n
 #: e2fsck/problem.c:1210
@@ -2101,7 +2067,7 @@ msgstr "Fel vid skrivning av katalogblock %b (inod %i): %m\n"
 #: e2fsck/problem.c:1215
 #, c-format
 msgid "@A new @d @b for @i %i (%s): %m\n"
-msgstr "Fel vid allokering av nytt katalogblock för inod %i (%s): %m\n"
+msgstr "Fel vid allokering av nytt katalogblock för inod %i (%s): %m\n"
 
 #. @-expanded: Error deallocating inode %i: %m\n
 #: e2fsck/problem.c:1220
@@ -2113,28 +2079,27 @@ msgstr "Fel vid deallokering av inod %i: %m\n"
 #: e2fsck/problem.c:1225
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
-msgstr "Katalogpost för \".\" i %p (%i) är stor.\n"
+msgstr "Katalogpost för \".\" i %p (%i) är stor.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
 #: e2fsck/problem.c:1230
 msgid "@i %i (%Q) is an @I FIFO.\n"
-msgstr "Inod %i (%Q) är en ogiltig FIFO.\n"
+msgstr "Inod %i (%Q) är en ogiltig FIFO.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal socket.\n
 #: e2fsck/problem.c:1235
 msgid "@i %i (%Q) is an @I socket.\n"
-msgstr "Inod %i (%Q) är ett ogiltigt uttag (socket).\n"
+msgstr "Inod %i (%Q) är ett ogiltigt uttag (socket).\n"
 
 #. @-expanded: Setting filetype for entry '%Dn' in %p (%i) to %N.\n
 #: e2fsck/problem.c:1240
 msgid "Setting filetype for @E to %N.\n"
-msgstr "Sätter filtyp för post \"%Dn\" i %p (%i) till %N.\n"
+msgstr "Sätter filtyp för post \"%Dn\" i %p (%i) till %N.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has an incorrect filetype (was %Dt, should be %N).\n
 #: e2fsck/problem.c:1245
 msgid "@E has an incorrect filetype (was %Dt, @s %N).\n"
-msgstr ""
-"Post \"%Dn\" i %p (%i) har felaktig filtyp (var %Dt, skulle varit %N).\n"
+msgstr "Post \"%Dn\" i %p (%i) har felaktig filtyp (var %Dt, skulle varit %N).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has filetype set.\n
 #: e2fsck/problem.c:1250
@@ -2144,24 +2109,22 @@ msgstr "Post \"%Dn\" i %p (%i) har filtyp satt.\n"
 #. @-expanded: entry '%Dn' in %p (%i) has a zero-length name.\n
 #: e2fsck/problem.c:1255
 msgid "@E has a @z name.\n"
-msgstr "Post \"%Dn\" i %p (%i) har nollängdsnamn.\n"
+msgstr "Post \"%Dn\" i %p (%i) har nollängdsnamn.\n"
 
 #. @-expanded: Symlink %Q (inode #%i) is invalid.\n
 #: e2fsck/problem.c:1260
 msgid "Symlink %Q (@i #%i) is @n.\n"
-msgstr "Symlänk %Q (inod nr. %i) är ogiltig.\n"
+msgstr "Symlänk %Q (inod nr. %i) är ogiltig.\n"
 
 #. @-expanded: extended attribute block for inode %i (%Q) is invalid (%If).\n
 #: e2fsck/problem.c:1265
 msgid "@a @b @F @n (%If).\n"
-msgstr "Utökat attribut-block för inod %i (%Q) är ogiltigt (%If).\n"
+msgstr "Utökat attribut-block för inod %i (%Q) är ogiltigt (%If).\n"
 
 #. @-expanded: filesystem contains large files, but lacks LARGE_FILE flag in superblock.\n
 #: e2fsck/problem.c:1270
 msgid "@f contains large files, but lacks LARGE_FILE flag in @S.\n"
-msgstr ""
-"Filsystem innehåller stora filer, men saknar flaggan LARGE_FILE i "
-"superblock.\n"
+msgstr "Filsystem innehåller stora filer, men saknar flaggan LARGE_FILE i superblock.\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B not referenced\n
 #: e2fsck/problem.c:1275
@@ -2171,7 +2134,7 @@ msgstr "Problem i HTREE-kataloginod %d: %B inte refererad\n"
 #. @-expanded: problem in HTREE directory inode %d: %B referenced twice\n
 #: e2fsck/problem.c:1280
 msgid "@p @h %d: %B referenced twice\n"
-msgstr "Problem i HTREE-kataloginod %d: %B refererat två gånger\n"
+msgstr "Problem i HTREE-kataloginod %d: %B refererat två gånger\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has bad min hash\n
 #: e2fsck/problem.c:1285
@@ -2202,7 +2165,7 @@ msgstr "Problem i HTREE-kataloginod %d: ogiltig rotnod.\n"
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid limit (%N)\n
 #: e2fsck/problem.c:1314
 msgid "@p @h %d: %B has @n limit (%N)\n"
-msgstr "Problem i HTREE-kataloginod %d: %B har ogiltig gräns (%N)\n"
+msgstr "Problem i HTREE-kataloginod %d: %B har ogiltig gräns (%N)\n"
 
 #. @-expanded: problem in HTREE directory inode %d: %B has invalid count (%N)\n
 #: e2fsck/problem.c:1319
@@ -2247,42 +2210,38 @@ msgid ""
 "\n"
 msgstr ""
 "Duplicerad post \"%Dn\" hittad.\n"
-"\tMarkerar %p (%i) för ombyggnad.\n"
+"\tMarkerar %p (%i) för ombyggnad.\n"
 "\n"
 
 #. @-expanded: i_blocks_hi for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1349
 msgid "i_blocks_hi @F %N, @s zero.\n"
-msgstr "i_blocks_hi för inod %i (%Q) är %N, skulle varit noll.\n"
+msgstr "i_blocks_hi för inod %i (%Q) är %N, skulle varit noll.\n"
 
 #. @-expanded: Unexpected block in HTREE directory inode %d (%q).\n
 #: e2fsck/problem.c:1354
 msgid "Unexpected @b in @h %d (%q).\n"
-msgstr "Oväntat block i HTREE-katalog %d (%q).\n"
+msgstr "Oväntat block i HTREE-katalog %d (%q).\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di in group %g where _INODE_UNINIT is set.\n
 #: e2fsck/problem.c:1358
 msgid "@E references @i %Di in @g %g where _INODE_UNINIT is set.\n"
-msgstr ""
-"Post \"%Dn\" i %p (%i) refererar inod %Di i grupp %g där _INODE_UNINIT är "
-"satt.\n"
+msgstr "Post \"%Dn\" i %p (%i) refererar inod %Di i grupp %g där _INODE_UNINIT är satt.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
 #: e2fsck/problem.c:1363
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr ""
-"Post \"%Dn\" i %p (%i) refererar inod %Di funnen i oanvänt inodsområde i "
-"grupp %g.\n"
+msgstr "Post \"%Dn\" i %p (%i) refererar inod %Di funnen i oanvänt inodsområde i grupp %g.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1368
 msgid "i_file_acl_hi @F %N, @s zero.\n"
-msgstr "i_file_acl_hi för inod %i (%Q) är %N, skulle varit noll.\n"
+msgstr "i_file_acl_hi för inod %i (%Q) är %N, skulle varit noll.\n"
 
 #. @-expanded: Pass 3: Checking directory connectivity\n
 #: e2fsck/problem.c:1375
 msgid "Pass 3: Checking @d connectivity\n"
-msgstr "Pass 3: Kontrollerar katalogförbindelser\n"
+msgstr "Pass 3: Kontrollerar katalogförbindelser\n"
 
 #. @-expanded: root inode not allocated.  
 #: e2fsck/problem.c:1380
@@ -2298,7 +2257,7 @@ msgstr "Ingen plats i lost+found-katalog.  "
 #: e2fsck/problem.c:1390
 #, c-format
 msgid "Unconnected @d @i %i (%p)\n"
-msgstr "Oförbunden kataloginod %i (%p)\n"
+msgstr "Oförbunden kataloginod %i (%p)\n"
 
 #. @-expanded: /lost+found not found.  
 #: e2fsck/problem.c:1395
@@ -2308,12 +2267,12 @@ msgstr "/lost+found inte funnen.  "
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
 #: e2fsck/problem.c:1400
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
-msgstr "\"..\" i %Q (%i) är %P (%j), skulle varit %q (%d).\n"
+msgstr "\"..\" i %Q (%i) är %P (%j), skulle varit %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
 #: e2fsck/problem.c:1405
 msgid "Bad or non-existent /@l.  Cannot reconnect.\n"
-msgstr "Felaktig eller ej existerande /lost+found.  Kan inte återansluta.\n"
+msgstr "Felaktig eller ej existerande /lost+found.  Kan inte återansluta.\n"
 
 #. @-expanded: Could not expand /lost+found: %m\n
 #: e2fsck/problem.c:1410
@@ -2324,44 +2283,43 @@ msgstr "Kunde inte expandera /lost+found: %m\n"
 #: e2fsck/problem.c:1415
 #, c-format
 msgid "Could not reconnect %i: %m\n"
-msgstr "Kunde inte återförbinda %i: %m\n"
+msgstr "Kunde inte återförbinda %i: %m\n"
 
 #. @-expanded: Error while trying to find /lost+found: %m\n
 #: e2fsck/problem.c:1420
 #, c-format
 msgid "Error while trying to find /@l: %m\n"
-msgstr "Fel vid försök att hitta /lost+found: %m\n"
+msgstr "Fel vid försök att hitta /lost+found: %m\n"
 
 #. @-expanded: ext2fs_new_block: %m while trying to create /lost+found directory\n
 #: e2fsck/problem.c:1425
 #, c-format
 msgid "ext2fs_new_@b: %m while trying to create /@l @d\n"
-msgstr "ext2fs_new_block: %m ved försök att skapa /lost+found-katalog\n"
+msgstr "ext2fs_new_block: %m ved försök att skapa /lost+found-katalog\n"
 
 #. @-expanded: ext2fs_new_inode: %m while trying to create /lost+found directory\n
 #: e2fsck/problem.c:1430
 #, c-format
 msgid "ext2fs_new_@i: %m while trying to create /@l @d\n"
-msgstr "ext2fs_new_inode: %m vid försök att skapa /lost+found-katalog\n"
+msgstr "ext2fs_new_inode: %m vid försök att skapa /lost+found-katalog\n"
 
 #. @-expanded: ext2fs_new_dir_block: %m while creating new directory block\n
 #: e2fsck/problem.c:1435
 #, c-format
 msgid "ext2fs_new_dir_@b: %m while creating new @d @b\n"
-msgstr "ext2fs_new_dir_block: %m när nytt katalogblock skapades\n"
+msgstr "ext2fs_new_dir_block: %m när nytt katalogblock skapades\n"
 
 #. @-expanded: ext2fs_write_dir_block: %m while writing the directory block for /lost+found\n
 #: e2fsck/problem.c:1440
 #, c-format
 msgid "ext2fs_write_dir_@b: %m while writing the @d @b for /@l\n"
-msgstr ""
-"ext2fs_write_dir_block: %m vid skrivning av katalogblocket för /lost+found\n"
+msgstr "ext2fs_write_dir_block: %m vid skrivning av katalogblocket för /lost+found\n"
 
 #. @-expanded: Error while adjusting inode count on inode %i\n
 #: e2fsck/problem.c:1445
 #, c-format
 msgid "Error while adjusting @i count on @i %i\n"
-msgstr "Fel vid justering av inodräknare på inod %i\n"
+msgstr "Fel vid justering av inodräknare på inod %i\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: %m\n
 #. @-expanded: \n
@@ -2371,7 +2329,7 @@ msgid ""
 "Couldn't fix parent of @i %i: %m\n"
 "\n"
 msgstr ""
-"Kunde inte rätta förälder till inod %i: %m\n"
+"Kunde inte rätta förälder till inod %i: %m\n"
 "\n"
 
 #. @-expanded: Couldn't fix parent of inode %i: Couldn't find parent directory entry\n
@@ -2382,8 +2340,7 @@ msgid ""
 "Couldn't fix parent of @i %i: Couldn't find parent @d @e\n"
 "\n"
 msgstr ""
-"Kunde inte rätta förälder till inod %i: Kunde inte hitta "
-"förälderkatalogpost\n"
+"Kunde inte rätta förälder till inod %i: Kunde inte hitta förälderkatalogpost\n"
 "\n"
 
 #. @-expanded: Error creating root directory (%s): %m\n
@@ -2401,18 +2358,18 @@ msgstr "Fel vid skapande av /lost+found-katalog (%s): %m\n"
 #. @-expanded: root inode is not a directory; aborting.\n
 #: e2fsck/problem.c:1475
 msgid "@r is not a @d; aborting.\n"
-msgstr "Rotinod är inte en katalog; avbryter.\n"
+msgstr "Rotinod är inte en katalog; avbryter.\n"
 
 #. @-expanded: Cannot proceed without a root inode.\n
 #: e2fsck/problem.c:1480
 msgid "Cannot proceed without a @r.\n"
-msgstr "Kan inte fortsätta utan en rotinod.\n"
+msgstr "Kan inte fortsätta utan en rotinod.\n"
 
 #. @-expanded: /lost+found is not a directory (ino=%i)\n
 #: e2fsck/problem.c:1490
 #, c-format
 msgid "/@l is not a @d (ino=%i)\n"
-msgstr "/lost+found är inte en katalog (ino=%i)\n"
+msgstr "/lost+found är inte en katalog (ino=%i)\n"
 
 #: e2fsck/problem.c:1497
 msgid "Pass 3A: Optimizing directories\n"
@@ -2433,24 +2390,24 @@ msgstr "Optimerar kataloger: "
 
 #: e2fsck/problem.c:1529
 msgid "Pass 4: Checking reference counts\n"
-msgstr "Pass 4: Kontrollerar referensräknare\n"
+msgstr "Pass 4: Kontrollerar referensräknare\n"
 
 #. @-expanded: unattached zero-length inode %i.  
 #: e2fsck/problem.c:1534
 #, c-format
 msgid "@u @z @i %i.  "
-msgstr "Lös nollängdsinod %i.  "
+msgstr "Lös nollängdsinod %i.  "
 
 #. @-expanded: unattached inode %i\n
 #: e2fsck/problem.c:1539
 #, c-format
 msgid "@u @i %i\n"
-msgstr "lös inod %i\n"
+msgstr "lös inod %i\n"
 
 #. @-expanded: inode %i ref count is %Il, should be %N.  
 #: e2fsck/problem.c:1544
 msgid "@i %i ref count is %Il, @s %N.  "
-msgstr "Inod %i referensräknare är %Il, skulle varit %N.  "
+msgstr "Inod %i referensräknare är %Il, skulle varit %N.  "
 
 #. @-expanded: WARNING: PROGRAMMING BUG IN E2FSCK!\n
 #. @-expanded: \tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n
@@ -2462,9 +2419,8 @@ msgid ""
 "@i_link_info[%i] is %N, @i.i_links_count is %Il.  They @s the same!\n"
 msgstr ""
 "VARNING: PROGRAMMERINGSFEL I E2FSCK!\n"
-"    ELLER NÅGON KLANTSKALLE (DU) KONTROLLERAR ETT MONTERAT (AKTIVT) "
-"FILSYSTEM.\n"
-"inod_link_info[%i] är %N, inod.i_links_count är %Il.  De skulle vara samma!\n"
+"    ELLER NÅGON KLANTSKALLE (DU) KONTROLLERAR ETT MONTERAT (AKTIVT) FILSYSTEM.\n"
+"inod_link_info[%i] är %N, inod.i_links_count är %Il.  De skulle vara samma!\n"
 
 #. @-expanded: Pass 5: Checking group summary information\n
 #: e2fsck/problem.c:1558
@@ -2474,12 +2430,12 @@ msgstr "Pass 5: Kontrollerar gruppsammanfattningsinformation\n"
 #. @-expanded: Padding at end of inode bitmap is not set. 
 #: e2fsck/problem.c:1563
 msgid "Padding at end of @i @B is not set. "
-msgstr "Utfyllnad vid slutet av inodsbitkarta är inte satt. "
+msgstr "Utfyllnad vid slutet av inodsbitkarta är inte satt. "
 
 #. @-expanded: Padding at end of block bitmap is not set. 
 #: e2fsck/problem.c:1568
 msgid "Padding at end of @b @B is not set. "
-msgstr "Utfyllnad vid slutet av blockbitkarta är inte satt. "
+msgstr "Utfyllnad vid slutet av blockbitkarta är inte satt. "
 
 #. @-expanded: block bitmap differences: 
 #: e2fsck/problem.c:1573
@@ -2494,74 +2450,72 @@ msgstr "Inodsbitkarteskillnader: "
 #. @-expanded: Free inodes count wrong for group #%g (%i, counted=%j).\n
 #: e2fsck/problem.c:1613
 msgid "Free @is count wrong for @g #%g (%i, counted=%j).\n"
-msgstr "Antal fria inoder är fel för grupp nr. %g (%i, räknade=%j).\n"
+msgstr "Antal fria inoder är fel för grupp nr. %g (%i, räknade=%j).\n"
 
 #. @-expanded: Directories count wrong for group #%g (%i, counted=%j).\n
 #: e2fsck/problem.c:1618
 msgid "Directories count wrong for @g #%g (%i, counted=%j).\n"
-msgstr "Katalogantal fel för grupp nr. %g (%i, räknade=%j).\n"
+msgstr "Katalogantal fel för grupp nr. %g (%i, räknade=%j).\n"
 
 #. @-expanded: Free inodes count wrong (%i, counted=%j).\n
 #: e2fsck/problem.c:1623
 msgid "Free @is count wrong (%i, counted=%j).\n"
-msgstr "Antal fria inoder är fel (%i, räknade=%j).\n"
+msgstr "Antal fria inoder är fel (%i, räknade=%j).\n"
 
 #. @-expanded: Free blocks count wrong for group #%g (%b, counted=%c).\n
 #: e2fsck/problem.c:1628
 msgid "Free @bs count wrong for @g #%g (%b, counted=%c).\n"
-msgstr "Antal fria block är fel för grupp nr. %g (%b, räknade=%c).\n"
+msgstr "Antal fria block är fel för grupp nr. %g (%b, räknade=%c).\n"
 
 #. @-expanded: Free blocks count wrong (%b, counted=%c).\n
 #: e2fsck/problem.c:1633
 msgid "Free @bs count wrong (%b, counted=%c).\n"
-msgstr "Antal fria block är fel (%b, räknade=%c).\n"
+msgstr "Antal fria block är fel (%b, räknade=%c).\n"
 
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 #: e2fsck/problem.c:1638
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
 msgstr ""
-"PROGRAMMERINGSFEL: filsystem (nr. %N) bitkartas ändpunkter (%b, %c) stämmer\n"
-"inte med beräknade bitkarteändpunkter (%i, %j)\n"
+"PROGRAMMERINGSFEL: filsystem (nr. %N) bitkartas ändpunkter (%b, %c) stämmer\n"
+"inte med beräknade bitkarteändpunkter (%i, %j)\n"
 
 #: e2fsck/problem.c:1644
 msgid "Internal error: fudging end of bitmap (%N)\n"
-msgstr "Internt fel: fuskar till slut på bitkarta (%N)\n"
+msgstr "Internt fel: fuskar till slut på bitkarta (%N)\n"
 
 #. @-expanded: Error copying in replacement inode bitmap: %m\n
 #: e2fsck/problem.c:1649
 #, c-format
 msgid "Error copying in replacement @i @B: %m\n"
-msgstr "Fel vid kopiering av ersättningsinodskarta: %m\n"
+msgstr "Fel vid kopiering av ersättningsinodskarta: %m\n"
 
 #. @-expanded: Error copying in replacement block bitmap: %m\n
 #: e2fsck/problem.c:1654
 #, c-format
 msgid "Error copying in replacement @b @B: %m\n"
-msgstr "Fel vid inkopiering av ersättningsbitkarta: %m\n"
+msgstr "Fel vid inkopiering av ersättningsbitkarta: %m\n"
 
 #. @-expanded: group %g block(s) in use but group is marked BLOCK_UNINIT\n
 #: e2fsck/problem.c:1679
 #, c-format
 msgid "@g %g @b(s) in use but @g is marked BLOCK_UNINIT\n"
-msgstr "block i grupp %g används men gruppen är markerad BLOCK_UNINIT\n"
+msgstr "block i grupp %g används men gruppen är markerad BLOCK_UNINIT\n"
 
 #. @-expanded: group %g inode(s) in use but group is marked INODE_UNINIT\n
 #: e2fsck/problem.c:1684
 #, c-format
 msgid "@g %g @i(s) in use but @g is marked INODE_UNINIT\n"
-msgstr "inoder i grupp %g används men gruppen är markerad INODE_UNINIT\n"
+msgstr "inoder i grupp %g används men gruppen är markerad INODE_UNINIT\n"
 
 #. @-expanded: Recreate journal
 #: e2fsck/problem.c:1691
 msgid "Recreate @j"
-msgstr "Återskapa journal"
+msgstr "Återskapa journal"
 
 #: e2fsck/problem.c:1696
 msgid "Update quota info for quota type %N"
-msgstr ""
+msgstr "Uppdatera kvotinformation för kvottyp %N"
 
 #: e2fsck/problem.c:1815
 #, c-format
@@ -2575,30 +2529,30 @@ msgstr "IGNORERAT"
 #: e2fsck/scantest.c:79
 #, c-format
 msgid "Memory used: %d, elapsed time: %6.3f/%6.3f/%6.3f\n"
-msgstr "Använt minne: %d, förlupen tid: %6.3f/%6.3f/%6.3f\n"
+msgstr "Använt minne: %d, förlupen tid: %6.3f/%6.3f/%6.3f\n"
 
 #: e2fsck/scantest.c:98
 #, c-format
 msgid "size of inode=%d\n"
-msgstr "storlek på inod=%d\n"
+msgstr "storlek på inod=%d\n"
 
 #: e2fsck/scantest.c:119
 msgid "while starting inode scan"
-msgstr "vid start av inodsgenomsökning"
+msgstr "vid start av inodsgenomsökning"
 
 #: e2fsck/scantest.c:130
 msgid "while doing inode scan"
-msgstr "vid inodsgenomsökning"
+msgstr "vid inodsgenomsökning"
 
 #: e2fsck/super.c:188
 #, c-format
 msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr "vid anrop av ext2fs_block_iterate för inod %d"
+msgstr "vid anrop av ext2fs_block_iterate för inod %d"
 
 #: e2fsck/super.c:211
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "vid anrop av ext2fs_adjust_ea_refcount2 för inod %d"
+msgstr "vid anrop av ext2fs_adjust_ea_refcount2 för inod %d"
 
 #: e2fsck/super.c:272
 msgid "Truncating"
@@ -2606,7 +2560,7 @@ msgstr "Kapar"
 
 #: e2fsck/super.c:273
 msgid "Clearing"
-msgstr "Tömmer"
+msgstr "Tömmer"
 
 #: e2fsck/unix.c:74
 #, c-format
@@ -2616,10 +2570,10 @@ msgid ""
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Användning: %s [-panyrcdfvtDFV] [-b superblock] [-B blockstorlek]\n"
+"Användning: %s [-panyrcdfvtDFV] [-b superblock] [-B blockstorlek]\n"
 "\t\t[-I inodbuffertblock] [-P processinodsstorlek]\n"
-"\t\t[-l|-L dåliga_block_fil] [-C fd] [-j extern_journal]\n"
-"\t\t[-E utökade-flaggor] enhet\n"
+"\t\t[-l|-L dåliga_block_fil] [-C fd] [-j extern_journal]\n"
+"\t\t[-E utökade-flaggor] enhet\n"
 
 #: e2fsck/unix.c:80
 #, c-format
@@ -2629,18 +2583,16 @@ msgid ""
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock "
-"list\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
-"Nödhjälp:\n"
-" -p                   Repearera automatiskt (inga frågor)\n"
-" -n                   Gör inga förändringar av filsystemet\n"
-" -y                   Anta \"ja\" som svar på alla frågor\n"
-" -c                   Leta efter dåliga block och lägg till dem i listan\n"
-" -f                   Framtvinga kontroll även om filsystemet är markerat "
-"rent\n"
+"Nödhjälp:\n"
+" -p                   Repearera automatiskt (inga frågor)\n"
+" -n                   Gör inga förändringar av filsystemet\n"
+" -y                   Anta \"ja\" som svar på alla frågor\n"
+" -c                   Leta efter dåliga block och lägg till dem i listan\n"
+" -f                   Framtvinga kontroll även om filsystemet är markerat rent\n"
 
 #: e2fsck/unix.c:86
 #, c-format
@@ -2652,180 +2604,180 @@ msgid ""
 " -l bad_blocks_file   Add to badblocks list\n"
 " -L bad_blocks_file   Set badblocks list\n"
 msgstr ""
-" -v                   Var utförlig\n"
-" -b superblock        Använd alternativt superblock\n"
-" -B blockstorlek      Framtvinga blockstorlek vid sökande efter superblock\n"
-" -j extern_journal    Bestäm plats för den externa journalen\n"
-" -l dåliga_block_fil  Lägg till till listan över dåliga block\n"
-" -L dåliga_block_fil  Ange lista över dåliga block\n"
+" -v                   Var utförlig\n"
+" -b superblock        Använd alternativt superblock\n"
+" -B blockstorlek      Framtvinga blockstorlek vid sökande efter superblock\n"
+" -j extern_journal    Bestäm plats för den externa journalen\n"
+" -l dåliga_block_fil  Lägg till till listan över dåliga block\n"
+" -L dåliga_block_fil  Ange lista över dåliga block\n"
 
-#: e2fsck/unix.c:130
+#: e2fsck/unix.c:131
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
-msgstr "%s: %u/%u filer (%0d.%d%% ej sammanhängande), %llu/%llu block\n"
+msgstr "%s: %u/%u filer (%0d.%d%% ej sammanhängande), %llu/%llu block\n"
 
-#: e2fsck/unix.c:137
+#: e2fsck/unix.c:157
 #, c-format
 msgid ""
 "\n"
-"%8u inode used (%2.2f%%)\n"
+"%12u inode used (%2.2f%%, out of %u)\n"
 msgid_plural ""
 "\n"
-"%8u inodes used (%2.2f%%)\n"
+"%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
 "\n"
-"%8u inod använd (%2.2f %%)\n"
+"%12u inod använd (%2.2f %%, av %u)\n"
 msgstr[1] ""
 "\n"
-"%8u inoder använda (%2.2f %%)\n"
+"%12u inoder använda (%2.2f %%, av %u)\n"
 
-#: e2fsck/unix.c:141
+#: e2fsck/unix.c:161
 #, c-format
-msgid "%8u non-contiguous file (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous files (%0d.%d%%)\n"
-msgstr[0] "%8u ej konsekutiv fil (%0d.%d %%)\n"
-msgstr[1] "%8u ej konsekutiva filer (%0d.%d %%)\n"
+msgid "%12u non-contiguous file (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
+msgstr[0] "%12u ej konsekutiv fil (%0d.%d %%)\n"
+msgstr[1] "%12u ej konsekutiva filer (%0d.%d %%)\n"
 
-#: e2fsck/unix.c:146
+#: e2fsck/unix.c:166
 #, c-format
-msgid "%8u non-contiguous directory (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous directories (%0d.%d%%)\n"
-msgstr[0] "%8u ej konsekutiv katalog (%0d.%d %%)\n"
-msgstr[1] "%8u ej konsekutiva kataloger (%0d.%d %%)\n"
+msgid "%12u non-contiguous directory (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
+msgstr[0] "%12u ej konsekutiv katalog (%0d.%d %%)\n"
+msgstr[1] "%12u ej konsekutiva kataloger (%0d.%d %%)\n"
 
-#: e2fsck/unix.c:151
+#: e2fsck/unix.c:171
 #, c-format
-msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr "         antal inoder med ind/dind/tind-block: %u/%u/%u\n"
+msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "             antal inoder med ind/dind/tind-block: %u/%u/%u\n"
 
-#: e2fsck/unix.c:159
-msgid "         Extent depth histogram: "
-msgstr "         Histogram över utsträckningars djup: "
+#: e2fsck/unix.c:179
+msgid "             Extent depth histogram: "
+msgstr "             Histogram över utsträckningars djup: "
 
-#: e2fsck/unix.c:168
+#: e2fsck/unix.c:188
 #, c-format
-msgid "%8llu block used (%2.2f%%)\n"
-msgid_plural "%8llu blocks used (%2.2f%%)\n"
-msgstr[0] "%8llu använt block (%2.2f %%)\n"
-msgstr[1] "%8llu använda block (%2.2f %%)\n"
+msgid "%12llu block used (%2.2f%%, out of %llu)\n"
+msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
+msgstr[0] "%12llu använt block (%2.2f %%, av %llu)\n"
+msgstr[1] "%12llu använda block (%2.2f %%, av %llu)\n"
 
-#: e2fsck/unix.c:171
+#: e2fsck/unix.c:192
 #, c-format
-msgid "%8u bad block\n"
-msgid_plural "%8u bad blocks\n"
-msgstr[0] "%8u dåligt block\n"
-msgstr[1] "%8u dåliga block\n"
+msgid "%12u bad block\n"
+msgid_plural "%12u bad blocks\n"
+msgstr[0] "%12u dåligt block\n"
+msgstr[1] "%12u dåliga block\n"
 
-#: e2fsck/unix.c:173
+#: e2fsck/unix.c:194
 #, c-format
-msgid "%8u large file\n"
-msgid_plural "%8u large files\n"
-msgstr[0] "%8u stor fil\n"
-msgstr[1] "%8u stora filer\n"
+msgid "%12u large file\n"
+msgid_plural "%12u large files\n"
+msgstr[0] "%12u stor fil\n"
+msgstr[1] "%12u stora filer\n"
 
-#: e2fsck/unix.c:175
+#: e2fsck/unix.c:196
 #, c-format
 msgid ""
 "\n"
-"%8u regular file\n"
+"%12u regular file\n"
 msgid_plural ""
 "\n"
-"%8u regular files\n"
+"%12u regular files\n"
 msgstr[0] ""
 "\n"
-"%8u normal fil\n"
+"%12u normal fil\n"
 msgstr[1] ""
 "\n"
-"%8u normala filer\n"
+"%12u normala filer\n"
 
-#: e2fsck/unix.c:177
+#: e2fsck/unix.c:198
 #, c-format
-msgid "%8u directory\n"
-msgid_plural "%8u directories\n"
-msgstr[0] "%8u katalog\n"
-msgstr[1] "%8u kataloger\n"
+msgid "%12u directory\n"
+msgid_plural "%12u directories\n"
+msgstr[0] "%12u katalog\n"
+msgstr[1] "%12u kataloger\n"
 
-#: e2fsck/unix.c:179
+#: e2fsck/unix.c:200
 #, c-format
-msgid "%8u character device file\n"
-msgid_plural "%8u character device files\n"
-msgstr[0] "%8u teckenenhetsfil\n"
-msgstr[1] "%8u teckenenhetsfiler\n"
+msgid "%12u character device file\n"
+msgid_plural "%12u character device files\n"
+msgstr[0] "%12u teckenenhetsfil\n"
+msgstr[1] "%12u teckenenhetsfiler\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:203
 #, c-format
-msgid "%8u block device file\n"
-msgid_plural "%8u block device files\n"
-msgstr[0] "%8u blockenhetsfil\n"
-msgstr[1] "%8u blockenhetsfiler\n"
+msgid "%12u block device file\n"
+msgid_plural "%12u block device files\n"
+msgstr[0] "%12u blockenhetsfil\n"
+msgstr[1] "%12u blockenhetsfiler\n"
 
-#: e2fsck/unix.c:184
+#: e2fsck/unix.c:205
 #, c-format
-msgid "%8u fifo\n"
-msgid_plural "%8u fifos\n"
-msgstr[0] "%8u fifo\n"
-msgstr[1] "%8u fifon\n"
+msgid "%12u fifo\n"
+msgid_plural "%12u fifos\n"
+msgstr[0] "%12u fifo\n"
+msgstr[1] "%12u fifon\n"
 
-#: e2fsck/unix.c:186
+#: e2fsck/unix.c:207
 #, c-format
-msgid "%8u link\n"
-msgid_plural "%8u links\n"
-msgstr[0] "%8u länk\n"
-msgstr[1] "%8u länkar\n"
+msgid "%12u link\n"
+msgid_plural "%12u links\n"
+msgstr[0] "%12u länk\n"
+msgstr[1] "%12u länkar\n"
 
-#: e2fsck/unix.c:189
+#: e2fsck/unix.c:210
 #, c-format
-msgid "%8u symbolic link"
-msgid_plural "%8u symbolic links"
-msgstr[0] "%8u symbolisk länk"
-msgstr[1] "%8u symboliska länkar"
+msgid "%12u symbolic link"
+msgid_plural "%12u symbolic links"
+msgstr[0] "%12u symbolisk länk"
+msgstr[1] "%12u symboliska länkar"
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:212
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
-msgstr[0] " (%u snabb symbolisk länk)\n"
-msgstr[1] " (%u snbba symboliska länkar)\n"
+msgstr[0] " (%u snabb symbolisk länk)\n"
+msgstr[1] " (%u snbba symboliska länkar)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:216
 #, c-format
-msgid "%8u socket\n"
-msgid_plural "%8u sockets\n"
-msgstr[0] "%8u uttag (socket)\n"
-msgstr[1] "%8u uttag (sockets)\n"
+msgid "%12u socket\n"
+msgid_plural "%12u sockets\n"
+msgstr[0] "%12u uttag (socket)\n"
+msgstr[1] "%12u uttag (sockets)\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:220
 #, c-format
-msgid "%8u file\n"
-msgid_plural "%8u files\n"
-msgstr[0] "%8u fil\n"
-msgstr[1] "%8u filer\n"
+msgid "%12u file\n"
+msgid_plural "%12u files\n"
+msgstr[0] "%12u fil\n"
+msgstr[1] "%12u filer\n"
 
-#: e2fsck/unix.c:212 misc/badblocks.c:983 misc/tune2fs.c:1979 misc/util.c:147
+#: e2fsck/unix.c:234 misc/badblocks.c:983 misc/tune2fs.c:1970 misc/util.c:147
 #: resize/main.c:247
 #, c-format
 msgid "while determining whether %s is mounted."
-msgstr "när det avgjordes om %s är monterat."
+msgstr "när det avgjordes om %s är monterat."
 
-#: e2fsck/unix.c:230
-#, fuzzy, c-format
+#: e2fsck/unix.c:254
+#, c-format
 msgid "Warning!  %s is %s.\n"
-msgstr "Varning!  %s är monterat.\n"
+msgstr "Varning!  %s är %s.\n"
 
-#: e2fsck/unix.c:237
+#: e2fsck/unix.c:261
 #, c-format
 msgid "%s is %s.\n"
-msgstr ""
+msgstr "%s är %s.\n"
 
-#: e2fsck/unix.c:240
+#: e2fsck/unix.c:264
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
 msgstr ""
-"Kan inte fortsätta, avbryter.\n"
+"Kan inte fortsätta, avbryter.\n"
 "\n"
 
-#: e2fsck/unix.c:242
+#: e2fsck/unix.c:266
 msgid ""
 "\n"
 "\n"
@@ -2835,83 +2787,83 @@ msgid ""
 msgstr ""
 "\n"
 "\n"
-"VARNING!!!  Filsystemet är monterat.  Om du fortsätter ***KOMMER***\n"
-"du att orsaka ***ALLVARLIG*** skada på filsystemet.\n"
+"VARNING!!!  Filsystemet är monterat.  Om du fortsätter ***KOMMER***\n"
+"du att orsaka ***ALLVARLIG*** skada på filsystemet.\n"
 "\n"
 
-#: e2fsck/unix.c:247
+#: e2fsck/unix.c:271
 msgid "Do you really want to continue"
-msgstr "Vill du verkligen fortsätta"
+msgstr "Vill du verkligen fortsätta"
 
-#: e2fsck/unix.c:249
+#: e2fsck/unix.c:273
 #, c-format
 msgid "check aborted.\n"
 msgstr "kontroll avbruten.\n"
 
-#: e2fsck/unix.c:339
+#: e2fsck/unix.c:363
 msgid " contains a file system with errors"
-msgstr " innehåller ett filsystem med fel"
+msgstr " innehåller ett filsystem med fel"
 
-#: e2fsck/unix.c:341
+#: e2fsck/unix.c:365
 msgid " was not cleanly unmounted"
-msgstr " var inte fläckfritt avmonterat"
+msgstr " var inte fläckfritt avmonterat"
 
-#: e2fsck/unix.c:343
+#: e2fsck/unix.c:367
 msgid " primary superblock features different from backup"
-msgstr " det primära superblockets egenskaper skiljer från reservens"
+msgstr " det primära superblockets egenskaper skiljer från reservens"
 
-#: e2fsck/unix.c:347
+#: e2fsck/unix.c:371
 #, c-format
 msgid " has been mounted %u times without being checked"
-msgstr " har monterats %u gånger utan att kontrolleras"
+msgstr " har monterats %u gånger utan att kontrolleras"
 
-#: e2fsck/unix.c:354
+#: e2fsck/unix.c:378
 msgid " has filesystem last checked time in the future"
-msgstr " har tidpunkten för senaste filsystemskontroll i framtiden"
+msgstr " har tidpunkten för senaste filsystemskontroll i framtiden"
 
-#: e2fsck/unix.c:360
+#: e2fsck/unix.c:384
 #, c-format
 msgid " has gone %u days without being checked"
-msgstr " har inte kontrollerats på %u dagar"
+msgstr " har inte kontrollerats på %u dagar"
 
-#: e2fsck/unix.c:369
+#: e2fsck/unix.c:393
 msgid ", check forced.\n"
 msgstr ", kontroll framtvingad.\n"
 
-#: e2fsck/unix.c:402
+#: e2fsck/unix.c:426
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: rent, %u/%u filer, %llu/%llu block"
 
-#: e2fsck/unix.c:421
+#: e2fsck/unix.c:445
 msgid " (check deferred; on battery)"
-msgstr " (kontroll senarelagd; på batteri)"
+msgstr " (kontroll senarelagd; på batteri)"
 
-#: e2fsck/unix.c:424
+#: e2fsck/unix.c:448
 msgid " (check after next mount)"
-msgstr " (kontrollera efter nästa montering)"
+msgstr " (kontrollera efter nästa montering)"
 
-#: e2fsck/unix.c:426
+#: e2fsck/unix.c:450
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kontrollera om %ld monteringar)"
 
-#: e2fsck/unix.c:576
+#: e2fsck/unix.c:600
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
-msgstr "FEL: Kunde inte öppna /dev/null (%s)\n"
+msgstr "FEL: Kunde inte öppna /dev/null (%s)\n"
 
-#: e2fsck/unix.c:645
+#: e2fsck/unix.c:669
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Ogiltig EA-version.\n"
 
-#: e2fsck/unix.c:672
+#: e2fsck/unix.c:696
 #, c-format
 msgid "Unknown extended option: %s\n"
-msgstr "Okänd utökad flagga: %s\n"
+msgstr "Okänd utökad flagga: %s\n"
 
-#: e2fsck/unix.c:697
+#: e2fsck/unix.c:721
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2920,57 +2872,57 @@ msgstr ""
 "Syntaxfel i e2fsck:s konfigurationsfil (%s, rad nr %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:766
+#: e2fsck/unix.c:790
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Fel vid validering av filidentifierare %d: %s\n"
 
-#: e2fsck/unix.c:770
+#: e2fsck/unix.c:794
 msgid "Invalid completion information file descriptor"
-msgstr "Ogiltig filidentifierare för förloppsinformation"
+msgstr "Ogiltig filidentifierare för förloppsinformation"
 
-#: e2fsck/unix.c:785
+#: e2fsck/unix.c:809
 msgid "Only one of the options -p/-a, -n or -y may be specified."
 msgstr "Endast en av flaggorna -p/-a, -n eller -y kan anges."
 
-#: e2fsck/unix.c:806
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
-msgstr "Flaggan -t stödjs inte i denna version av e2fsck.\n"
+msgstr "Flaggan -t stödjs inte i denna version av e2fsck.\n"
 
-#: e2fsck/unix.c:837 e2fsck/unix.c:909 misc/tune2fs.c:811 misc/tune2fs.c:1100
-#: misc/tune2fs.c:1118
+#: e2fsck/unix.c:861 e2fsck/unix.c:933 misc/tune2fs.c:802 misc/tune2fs.c:1091
+#: misc/tune2fs.c:1109
 #, c-format
 msgid "Unable to resolve '%s'"
 msgstr "Kan inte hitta \"%s\""
 
-#: e2fsck/unix.c:888
+#: e2fsck/unix.c:912
 msgid "The -n and -D options are incompatible."
-msgstr "Flaggorna -n och -D är inkompatibla."
+msgstr "Flaggorna -n och -D är inkompatibla."
 
-#: e2fsck/unix.c:893
+#: e2fsck/unix.c:917
 msgid "The -n and -c options are incompatible."
-msgstr "Flaggorna -n och -c är inkompatibla."
+msgstr "Flaggorna -n och -c är inkompatibla."
 
-#: e2fsck/unix.c:898
+#: e2fsck/unix.c:922
 msgid "The -n and -l/-L options are incompatible."
-msgstr "Flaggorna -n och -l/-L är inkompatibla."
+msgstr "Flaggorna -n och -l/-L är inkompatibla."
 
-#: e2fsck/unix.c:943
+#: e2fsck/unix.c:976
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
-msgstr "Flaggorna -c och -l/-L kan inte båda användas på samma gång.\n"
+msgstr "Flaggorna -c och -l/-L kan inte båda användas på samma gång.\n"
 
-#: e2fsck/unix.c:991
+#: e2fsck/unix.c:1024
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
-"E2FSCK_JBD_DEBUG \"%s\" är inte ett heltal\n"
+"E2FSCK_JBD_DEBUG \"%s\" är inte ett heltal\n"
 "\n"
 
-#: e2fsck/unix.c:1000
+#: e2fsck/unix.c:1033
 #, c-format
 msgid ""
 "\n"
@@ -2981,197 +2933,189 @@ msgstr ""
 "Ogiltigt ickenumerikst argument till -%c (\"%s\")\n"
 "\n"
 
-#: e2fsck/unix.c:1089
+#: e2fsck/unix.c:1122
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"MMP-intervall är %u sekunder och den totala väntetiden är %u sekunder.  Var "
-"god dröj ...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "MMP-intervall är %u sekunder och den totala väntetiden är %u sekunder.  Var god dröj ...\n"
 
-#: e2fsck/unix.c:1106 e2fsck/unix.c:1111
+#: e2fsck/unix.c:1139 e2fsck/unix.c:1144
 msgid "while checking MMP block"
-msgstr "vid uppsättning av MMP-block"
+msgstr "vid uppsättning av MMP-block"
 
-#: e2fsck/unix.c:1113 misc/tune2fs.c:1912
+#: e2fsck/unix.c:1146 misc/tune2fs.c:1903
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
 msgstr ""
-"Om du är säker på att filsystemet inte används på någon nod, kör:\n"
+"Om du är säker på att filsystemet inte används på någon nod, kör:\n"
 "\"tune2fs-f-E clear_mmp {enhet}\"\n"
 
-#: e2fsck/unix.c:1163
+#: e2fsck/unix.c:1196
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Fel: ext2fs-bibliotekversion inaktuell!\n"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1204
 msgid "while trying to initialize program"
-msgstr "vid försök att initiera program"
+msgstr "vid försök att initiera program"
 
-#: e2fsck/unix.c:1194
+#: e2fsck/unix.c:1227
 #, c-format
 msgid "\tUsing %s, %s\n"
-msgstr "\tAnvänder %s, %s\n"
+msgstr "\tAnvänder %s, %s\n"
 
-#: e2fsck/unix.c:1206
+#: e2fsck/unix.c:1239
 msgid "need terminal for interactive repairs"
-msgstr "behöver terminal för interaktiva reparationer"
+msgstr "behöver terminal för interaktiva reparationer"
 
-#: e2fsck/unix.c:1256
+#: e2fsck/unix.c:1292
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
-msgstr "%s: %s försöker med reservblock ...\n"
+msgstr "%s: %s försöker med reservblock ...\n"
 
-#: e2fsck/unix.c:1258
+#: e2fsck/unix.c:1294
 msgid "Superblock invalid,"
-msgstr "Superblocket är ogiltigt,"
+msgstr "Superblocket är ogiltigt,"
 
-#: e2fsck/unix.c:1259
+#: e2fsck/unix.c:1295
 msgid "Group descriptors look bad..."
 msgstr "Gruppbeskrivarna ser trasiga ut ..."
 
-#: e2fsck/unix.c:1269
+#: e2fsck/unix.c:1305
 #, c-format
 msgid "%s: %s while using the backup blocks"
-msgstr "%s: %s när reservblocken användes"
+msgstr "%s: %s när reservblocken användes"
 
-#: e2fsck/unix.c:1273
+#: e2fsck/unix.c:1309
 #, c-format
 msgid "%s: going back to original superblock\n"
-msgstr "%s: går tillbaka till orginalsuperblock\n"
+msgstr "%s: går tillbaka till orginalsuperblock\n"
 
-#: e2fsck/unix.c:1301
+#: e2fsck/unix.c:1337
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
 "\n"
 msgstr ""
-"Filsystemsrevisionen är uppenbarligen för hög för denna version av e2fsck.\n"
-"(Eller så är filsystemets superblock trasigt)\n"
+"Filsystemsrevisionen är uppenbarligen för hög för denna version av e2fsck.\n"
+"(Eller så är filsystemets superblock trasigt)\n"
 "\n"
 
-#: e2fsck/unix.c:1307
+#: e2fsck/unix.c:1343
 msgid "Could this be a zero-length partition?\n"
-msgstr "Kan detta vara en nollängdspartition?\n"
+msgstr "Kan detta vara en nollängdspartition?\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1346
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
-msgstr "Du måste ha %s-åtkomst till filsystemet eller vara root\n"
+msgstr "Du måste ha %s-åtkomst till filsystemet eller vara root\n"
 
-#: e2fsck/unix.c:1315
+#: e2fsck/unix.c:1351
 msgid "Possibly non-existent or swap device?\n"
-msgstr "Kanske inte existerar eller växlingsenhet?\n"
+msgstr "Kanske inte existerar eller växlingsenhet?\n"
 
-#: e2fsck/unix.c:1318
+#: e2fsck/unix.c:1354
 msgid "Filesystem mounted or opened exclusively by another program?\n"
-msgstr "Filsystemet monterat eller öppnat exklusivt av ett annat program?\n"
+msgstr "Filsystemet monterat eller öppnat exklusivt av ett annat program?\n"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1357
 msgid "Possibly non-existent device?\n"
 msgstr "Kanske en enhet som inte existerar?\n"
 
-#: e2fsck/unix.c:1324
+#: e2fsck/unix.c:1360
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
-"Skrivskyddad disk; använd flaggan -n för att göra en läsningskontroll\n"
+"Skrivskyddad disk; använd flaggan -n för att göra en läsningskontroll\n"
 "av enheten.\n"
 
-#: e2fsck/unix.c:1389
+#: e2fsck/unix.c:1425
 msgid "Get a newer version of e2fsck!"
-msgstr "Hämta en nyare version av e2fsck!"
+msgstr "Hämta en nyare version av e2fsck!"
 
-#: e2fsck/unix.c:1437
+#: e2fsck/unix.c:1469
 #, c-format
 msgid "while checking ext3 journal for %s"
-msgstr "vid kontroll av ext3-journal för %s"
+msgstr "vid kontroll av ext3-journal för %s"
 
-#: e2fsck/unix.c:1448
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
-msgstr ""
-"Varning: hoppar över journalåterhämtning eftersom en läsningskontroll av "
-"filsystem görs.\n"
+#: e2fsck/unix.c:1480
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Varning: hoppar över journalåterhämtning eftersom en läsningskontroll av filsystem görs.\n"
 
-#: e2fsck/unix.c:1461
+#: e2fsck/unix.c:1493
 #, c-format
 msgid "unable to set superblock flags on %s\n"
-msgstr "kan inte sätta superblocksflaggor på %s\n"
+msgstr "kan inte sätta superblocksflaggor på %s\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1499
 #, c-format
 msgid "while recovering ext3 journal of %s"
-msgstr "vid återhämtning av ext3-journal för %s"
+msgstr "vid återhämtning av ext3-journal för %s"
 
-#: e2fsck/unix.c:1492
+#: e2fsck/unix.c:1523
 #, c-format
 msgid "%s has unsupported feature(s):"
-msgstr "%s har funktioner som inte stöds:"
+msgstr "%s har funktioner som inte stöds:"
 
-#: e2fsck/unix.c:1507
+#: e2fsck/unix.c:1538
 #, c-format
 msgid "%s: warning: compression support is experimental.\n"
-msgstr "%s: varning: komprimeringsstöd är experimentellt.\n"
+msgstr "%s: varning: komprimeringsstöd är experimentellt.\n"
 
-#: e2fsck/unix.c:1513
+#: e2fsck/unix.c:1544
 #, c-format
 msgid ""
 "%s: e2fsck not compiled with HTREE support,\n"
 "\tbut filesystem %s has HTREE directories.\n"
 msgstr ""
-"%s: e2fsck är inte kompilerat med HTREE-stöd,\n"
+"%s: e2fsck är inte kompilerat med HTREE-stöd,\n"
 "\tmen filsystem %s har HTREE-kataloger.\n"
 
-#: e2fsck/unix.c:1565
+#: e2fsck/unix.c:1596
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
-msgstr "%s: %s vid läsning av inod för dåliga block\n"
+msgstr "%s: %s vid läsning av inod för dåliga block\n"
 
-#: e2fsck/unix.c:1568
+#: e2fsck/unix.c:1599
 msgid "This doesn't bode well, but we'll try to go on...\n"
-msgstr "Detta bådar inte gott, men vi skall försöka att fortsätta ...\n"
+msgstr "Detta bådar inte gott, men vi skall försöka att fortsätta ...\n"
 
-#: e2fsck/unix.c:1609
+#: e2fsck/unix.c:1640
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Skapar journal (%d block): "
 
-#: e2fsck/unix.c:1619
+#: e2fsck/unix.c:1650
 msgid " Done.\n"
 msgstr " Klar.\n"
 
-#: e2fsck/unix.c:1620
+#: e2fsck/unix.c:1651
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
 msgstr ""
 "\n"
-"*** journalen har återskapats - filsystemet är nu ext3 igen ***\n"
+"*** journalen har återskapats - filsystemet är nu ext3 igen ***\n"
 
-#: e2fsck/unix.c:1643
+#: e2fsck/unix.c:1674
 msgid "Restarting e2fsck from the beginning...\n"
-msgstr "Startar om e2fsck från början ...\n"
+msgstr "Startar om e2fsck från början ...\n"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1678
 msgid "while resetting context"
-msgstr "vid återställning av omgivning"
+msgstr "vid återställning av omgivning"
 
-#: e2fsck/unix.c:1654
+#: e2fsck/unix.c:1685
 #, c-format
 msgid "%s: e2fsck canceled.\n"
-msgstr "%s: e2fsck inställd.\n"
+msgstr "%s: e2fsck inställd.\n"
 
-#: e2fsck/unix.c:1659
+#: e2fsck/unix.c:1690
 msgid "aborted"
 msgstr "avbruten"
 
-#: e2fsck/unix.c:1671 e2fsck/util.c:67
+#: e2fsck/unix.c:1702 e2fsck/util.c:67
 #, c-format
 msgid ""
 "\n"
@@ -3180,12 +3124,12 @@ msgstr ""
 "\n"
 "%s: ***** FILSYSTEMET MODIFIERADES *****\n"
 
-#: e2fsck/unix.c:1675
+#: e2fsck/unix.c:1706
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ***** STARTA OM LINUX *****\n"
 
-#: e2fsck/unix.c:1683 e2fsck/util.c:73
+#: e2fsck/unix.c:1714 e2fsck/util.c:73
 #, c-format
 msgid ""
 "\n"
@@ -3196,9 +3140,9 @@ msgstr ""
 "%s: ********** VARNING: Filsystemet har fortfarande fel **********\n"
 "\n"
 
-#: e2fsck/unix.c:1723
+#: e2fsck/unix.c:1754
 msgid "while setting block group checksum info"
-msgstr "när kontrollsummeinformation för blockgrupp sattes"
+msgstr "när kontrollsummeinformation för blockgrupp sattes"
 
 #: e2fsck/util.c:189 misc/util.c:70
 msgid "yY"
@@ -3222,7 +3166,7 @@ msgstr " (j/n)"
 
 #: e2fsck/util.c:222
 msgid "cancelled!\n"
-msgstr "inställd!\n"
+msgstr "inställd!\n"
 
 #: e2fsck/util.c:237
 msgid "yes\n"
@@ -3261,16 +3205,16 @@ msgstr "nej"
 #: e2fsck/util.c:272
 #, c-format
 msgid "e2fsck_read_bitmaps: illegal bitmap block(s) for %s"
-msgstr "e2fsck_read_bitmaps: ogiltiga bitkarteblock för %s"
+msgstr "e2fsck_read_bitmaps: ogiltiga bitkarteblock för %s"
 
 #: e2fsck/util.c:277
 msgid "reading inode and block bitmaps"
-msgstr "läser inod- och blockbitkartor"
+msgstr "läser inod- och blockbitkartor"
 
 #: e2fsck/util.c:285
 #, c-format
 msgid "while retrying to read bitmaps for %s"
-msgstr "vid upprepat försök att läsa bitkarta för %s"
+msgstr "vid upprepat försök att läsa bitkarta för %s"
 
 #: e2fsck/util.c:297
 msgid "writing block and inode bitmaps"
@@ -3279,7 +3223,7 @@ msgstr "skiver block- och inodsbitkartor"
 #: e2fsck/util.c:302
 #, c-format
 msgid "while rewriting block and inode bitmaps for %s"
-msgstr "vid omskrivning av block- och inodsbitkartor för %s"
+msgstr "vid omskrivning av block- och inodsbitkartor för %s"
 
 #: e2fsck/util.c:314
 #, c-format
@@ -3291,18 +3235,18 @@ msgid ""
 msgstr ""
 "\n"
 "\n"
-"%s: OVÄNTAD INKONSEKVENS; KÖR fsck MANUELLT.\n"
+"%s: OVÄNTAD INKONSEKVENS; KÖR fsck MANUELLT.\n"
 "\t(d.v.s., utan flaggorna -a eller -p)\n"
 
 #: e2fsck/util.c:395
 #, c-format
 msgid "Memory used: %luk/%luk (%luk/%luk), "
-msgstr "Använt minne: %lu k/%lu k (%lu k/%lu k), "
+msgstr "Använt minne: %lu k/%lu k (%lu k/%lu k), "
 
 #: e2fsck/util.c:399
 #, c-format
 msgid "Memory used: %lu, "
-msgstr "Använt minne: %lu, "
+msgstr "Använt minne: %lu, "
 
 #: e2fsck/util.c:406
 #, c-format
@@ -3312,27 +3256,25 @@ msgstr "tid: %5.2f/%5.2f/%5.2f\n"
 #: e2fsck/util.c:411
 #, c-format
 msgid "elapsed time: %6.3f\n"
-msgstr "förfluten tid: %6.3f\n"
+msgstr "förfluten tid: %6.3f\n"
 
 #: e2fsck/util.c:446 e2fsck/util.c:460
 #, c-format
 msgid "while reading inode %lu in %s"
-msgstr "när inod %lu i %s lästes"
+msgstr "när inod %lu i %s lästes"
 
 #: e2fsck/util.c:474 e2fsck/util.c:487
 #, c-format
 msgid "while writing inode %lu in %s"
-msgstr "när inod %lu i %s skrevs"
+msgstr "när inod %lu i %s skrevs"
 
 #: e2fsck/util.c:636
 msgid "while allocating zeroizing buffer"
-msgstr "vid allokering av nollställningsbuffert"
+msgstr "vid allokering av nollställningsbuffert"
 
 #: e2fsck/util.c:788
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr "OVÄNTAD INKONSISTENS: filsystemet modifieras medan fsck körs.\n"
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "OVÄNTAD INKONSISTENS: filsystemet modifieras medan fsck körs.\n"
 
 #: misc/badblocks.c:69
 msgid "done                                                 \n"
@@ -3342,16 +3284,15 @@ msgstr "klar                                                 \n"
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
-"max_bad_blocks]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
 "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
 "       device [last_block [first_block]]\n"
 msgstr ""
-"Användning: %s [-b blockstorlek] [-i infil] [-o utfile] [-svwnf]\n"
-"            [-c block_åt_gången] [-d fördröjningsfaktor mellan läsningar]\n"
-"            [-e max_dåliga_block] [-p antal_pass]\n"
-"            [-t testmönster [-t testmönster [...]]]\n"
-"            enhet [sista_block [första_block]]\n"
+"Användning: %s [-b blockstorlek] [-i infil] [-o utfile] [-svwnf]\n"
+"            [-c block_åt_gången] [-d fördröjningsfaktor mellan läsningar]\n"
+"            [-e max_dåliga_block] [-p antal_pass]\n"
+"            [-t testmönster [-t testmönster [...]]]\n"
+"            enhet [sista_block [första_block]]\n"
 
 #: misc/badblocks.c:104
 #, c-format
@@ -3359,30 +3300,30 @@ msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
-"%s: Flaggorna -n och -w är ömsesidigt uteslutande.\n"
+"%s: Flaggorna -n och -w är ömsesidigt uteslutande.\n"
 "\n"
 
 #: misc/badblocks.c:219
 #, c-format
 msgid "%6.2f%% done, %s elapsed. (%d/%d/%d errors)"
-msgstr "%6.2f %% klar, %s har gått. (%d/%d/%d fel)"
+msgstr "%6.2f %% klar, %s har gått. (%d/%d/%d fel)"
 
 #: misc/badblocks.c:322
 msgid "Testing with random pattern: "
-msgstr "Testar med slumpmönster: "
+msgstr "Testar med slumpmönster: "
 
 #: misc/badblocks.c:340
 msgid "Testing with pattern 0x"
-msgstr "Testar med mönster 0x"
+msgstr "Testar med mönster 0x"
 
 #: misc/badblocks.c:372 misc/badblocks.c:445
 msgid "during seek"
-msgstr "vid sökning"
+msgstr "vid sökning"
 
 #: misc/badblocks.c:383
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
-msgstr "Underligt värde (%ld) i do_read\n"
+msgstr "Underligt värde (%ld) i do_read\n"
 
 #: misc/badblocks.c:469
 msgid "during ext2fs_sync_device"
@@ -3390,7 +3331,7 @@ msgstr "vid ext2fs_sync_device"
 
 #: misc/badblocks.c:489 misc/badblocks.c:749
 msgid "while beginning bad block list iteration"
-msgstr "vid början av iteration över lista av dåliga block"
+msgstr "vid början av iteration över lista av dåliga block"
 
 #: misc/badblocks.c:503 misc/badblocks.c:602 misc/badblocks.c:759
 msgid "while allocating buffers"
@@ -3403,37 +3344,37 @@ msgstr "Kontrollerar block %lu till %lu\n"
 
 #: misc/badblocks.c:512
 msgid "Checking for bad blocks in read-only mode\n"
-msgstr "Letar efter dåliga block i skrivskyddat läge\n"
+msgstr "Letar efter dåliga block i skrivskyddat läge\n"
 
 #: misc/badblocks.c:521
 msgid "Checking for bad blocks (read-only test): "
-msgstr "Letar efter dåliga block (skrivskyddad test): "
+msgstr "Letar efter dåliga block (skrivskyddad test): "
 
 #: misc/badblocks.c:528 misc/badblocks.c:634 misc/badblocks.c:676
 #: misc/badblocks.c:822
 msgid "Too many bad blocks, aborting test\n"
-msgstr "För många dåliga block, avbryter testet\n"
+msgstr "För många dåliga block, avbryter testet\n"
 
 #: misc/badblocks.c:609
 msgid "Checking for bad blocks in read-write mode\n"
-msgstr "Letar efter dåliga block i läs-skriv-läge\n"
+msgstr "Letar efter dåliga block i läs-skriv-läge\n"
 
 #: misc/badblocks.c:611 misc/badblocks.c:772
 #, c-format
 msgid "From block %lu to %lu\n"
-msgstr "Från block %lu till %lu\n"
+msgstr "Från block %lu till %lu\n"
 
 #: misc/badblocks.c:666
 msgid "Reading and comparing: "
-msgstr "Läser och jämför: "
+msgstr "Läser och jämför: "
 
 #: misc/badblocks.c:771
 msgid "Checking for bad blocks in non-destructive read-write mode\n"
-msgstr "Letar efter dåliga block i ickeförstörande läs-skriv-läge\n"
+msgstr "Letar efter dåliga block i ickeförstörande läs-skriv-läge\n"
 
 #: misc/badblocks.c:777
 msgid "Checking for bad blocks (non-destructive read-write test)\n"
-msgstr "Letar efter dåliga block (ickeförstörande läs-skriv-test)\n"
+msgstr "Letar efter dåliga block (ickeförstörande läs-skriv-test)\n"
 
 #: misc/badblocks.c:784
 msgid ""
@@ -3441,7 +3382,7 @@ msgid ""
 "Interrupt caught, cleaning up\n"
 msgstr ""
 "\n"
-"Avbrott fångat, rensar upp\n"
+"Avbrott fångat, rensar upp\n"
 
 #: misc/badblocks.c:867
 #, c-format
@@ -3451,24 +3392,24 @@ msgstr "vid testdataskrivning, block %lu"
 #: misc/badblocks.c:988 misc/util.c:152
 #, c-format
 msgid "%s is mounted; "
-msgstr "%s är monterat, "
+msgstr "%s är monterat, "
 
 #: misc/badblocks.c:990
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr "badblocks framtvingat ändå.  Hoppas /etc/mtab är felaktig.\n"
+msgstr "badblocks framtvingat ändå.  Hoppas /etc/mtab är felaktig.\n"
 
 #: misc/badblocks.c:995
 msgid "it's not safe to run badblocks!\n"
-msgstr "det är inte säkert att köra badblocks!\n"
+msgstr "det är inte säkert att köra badblocks!\n"
 
 #: misc/badblocks.c:1000 misc/util.c:163
 #, c-format
 msgid "%s is apparently in use by the system; "
-msgstr "%s används uppenbarligen av systemet; "
+msgstr "%s används uppenbarligen av systemet; "
 
 #: misc/badblocks.c:1003
 msgid "badblocks forced anyway.\n"
-msgstr "badblocks framtvingat ändå.\n"
+msgstr "badblocks framtvingat ändå.\n"
 
 #: misc/badblocks.c:1023
 #, c-format
@@ -3478,27 +3419,27 @@ msgstr "ogiltig %s - %s"
 #: misc/badblocks.c:1133
 #, c-format
 msgid "can't allocate memory for test_pattern - %s"
-msgstr "kunde inte allokera minne för testmönster - %s"
+msgstr "kunde inte allokera minne för testmönster - %s"
 
 #: misc/badblocks.c:1163
 msgid "Maximum of one test_pattern may be specified in read-only mode"
-msgstr "Högst ett testmönster får anges i skrivskyddat läge"
+msgstr "Högst ett testmönster får anges i skrivskyddat läge"
 
 #: misc/badblocks.c:1169
 msgid "Random test_pattern is not allowed in read-only mode"
-msgstr "Slumpvis testmönster är inte tillåtet i skrivskyddat läge"
+msgstr "Slumpvis testmönster är inte tillåtet i skrivskyddat läge"
 
 #: misc/badblocks.c:1183
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size manually\n"
 msgstr ""
-"Kunde inte avgöra enhetsstorlek; du måste ange\n"
+"Kunde inte avgöra enhetsstorlek; du måste ange\n"
 "storleken manuellt\n"
 
 #: misc/badblocks.c:1189
 msgid "while trying to determine device size"
-msgstr "vid försök att avgöra enhetsstorlek"
+msgstr "vid försök att avgöra enhetsstorlek"
 
 #: misc/badblocks.c:1194
 msgid "last block"
@@ -3506,89 +3447,88 @@ msgstr "sista block"
 
 #: misc/badblocks.c:1200
 msgid "first block"
-msgstr "första block"
+msgstr "första block"
 
 #: misc/badblocks.c:1203
 #, c-format
 msgid "invalid starting block (%lu): must be less than %lu"
-msgstr "felaktigt startblock (%lu): måste vara mindre än %lu"
+msgstr "felaktigt startblock (%lu): måste vara mindre än %lu"
 
 #: misc/badblocks.c:1259
 msgid "while creating in-memory bad blocks list"
-msgstr "när lista över dåliga block i minnet skapades"
+msgstr "när lista över dåliga block i minnet skapades"
 
 #: misc/badblocks.c:1274
 msgid "while adding to in-memory bad block list"
-msgstr "när tillägg gjordes till lista i minnet över dåliga block gjordes"
+msgstr "när tillägg gjordes till lista i minnet över dåliga block gjordes"
 
 #: misc/badblocks.c:1298
 #, c-format
 msgid "Pass completed, %u bad blocks found. (%d/%d/%d errors)\n"
-msgstr "Pass avslutat, %u dåliga block hittade. (%d/%d/%d fel)\n"
+msgstr "Pass avslutat, %u dåliga block hittade. (%d/%d/%d fel)\n"
 
 #: misc/chattr.c:86
 #, c-format
-msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
-msgstr "Användning: %s [-RVf] [-+=AacDdeijsSu] [-v version] filer...\n"
+msgid "Usage: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] files...\n"
+msgstr "Användning: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] filer…\n"
 
-#: misc/chattr.c:154
+#: misc/chattr.c:155
 #, c-format
 msgid "bad version - %s\n"
 msgstr "felaktig version - %s\n"
 
-#: misc/chattr.c:201 misc/lsattr.c:116
+#: misc/chattr.c:202 misc/lsattr.c:116
 #, c-format
 msgid "while trying to stat %s"
-msgstr "vid försök att ta status på %s"
+msgstr "vid försök att ta status på %s"
 
-#: misc/chattr.c:208
+#: misc/chattr.c:209
 #, c-format
 msgid "while reading flags on %s"
-msgstr "vid läsning av flaggor på %s"
+msgstr "vid läsning av flaggor på %s"
 
-#: misc/chattr.c:217 misc/chattr.c:236
+#: misc/chattr.c:218 misc/chattr.c:237
 #, c-format
 msgid "Clearing extent flag not supported on %s"
-msgstr "Att nollställa utsträckningsflaggan stöds inte på %s"
+msgstr "Att nollställa utsträckningsflaggan stöds inte på %s"
 
-#: misc/chattr.c:222 misc/chattr.c:241
+#: misc/chattr.c:223 misc/chattr.c:242
 #, c-format
 msgid "Flags of %s set as "
-msgstr "Flaggor på %s satta som "
+msgstr "Flaggor på %s satta som "
 
-#: misc/chattr.c:250
+#: misc/chattr.c:251
 #, c-format
 msgid "while setting flags on %s"
-msgstr "vid sättning av flaggor på %s"
+msgstr "vid sättning av flaggor på %s"
 
-#: misc/chattr.c:258
+#: misc/chattr.c:259
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Version av %s satt som %lu\n"
 
-#: misc/chattr.c:262
+#: misc/chattr.c:263
 #, c-format
 msgid "while setting version on %s"
-msgstr "vid sättning av version på %s"
+msgstr "vid sättning av version på %s"
 
-#: misc/chattr.c:282
+#: misc/chattr.c:283
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
-msgstr "Kunde inte allokera sökvägsvariabel i chattr_dir_proc"
+msgstr "Kunde inte allokera sökvägsvariabel i chattr_dir_proc"
 
-#: misc/chattr.c:322
+#: misc/chattr.c:323
 msgid "= is incompatible with - and +\n"
-msgstr "= är inkompatibelt med - och +\n"
+msgstr "= är inkompatibelt med - och +\n"
 
-#: misc/chattr.c:330
+#: misc/chattr.c:331
 msgid "Must use '-v', =, - or +\n"
-msgstr "Måste använda \"-v\", =, - eller +\n"
+msgstr "Måste använda \"-v\", =, - eller +\n"
 
 #: misc/dumpe2fs.c:55
 #, c-format
 msgid "Usage: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr ""
-"Användning: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] enhet\n"
+msgstr "Användning: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] enhet\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -3611,12 +3551,12 @@ msgstr "  Kontrollsumma 0x%04x"
 #: misc/dumpe2fs.c:206
 #, c-format
 msgid " (EXPECTED 0x%04x)"
-msgstr " (0x%04x FÖRVÄNTADES)"
+msgstr " (0x%04x FÖRVÄNTADES)"
 
 #: misc/dumpe2fs.c:207
 #, c-format
 msgid ", unused inodes %u\n"
-msgstr ", oanvända inoder %u\n"
+msgstr ", oanvända inoder %u\n"
 
 #: misc/dumpe2fs.c:212
 #, c-format
@@ -3625,7 +3565,7 @@ msgstr "  %ssuperblock vid "
 
 #: misc/dumpe2fs.c:213
 msgid "Primary"
-msgstr "Primärt "
+msgstr "Primärt "
 
 #: misc/dumpe2fs.c:213
 msgid "Backup"
@@ -3678,7 +3618,7 @@ msgstr ""
 #: misc/dumpe2fs.c:255
 #, c-format
 msgid ", %u unused inodes\n"
-msgstr ", %u oanvända inoder\n"
+msgstr ", %u oanvända inoder\n"
 
 #: misc/dumpe2fs.c:258
 msgid "  Free blocks: "
@@ -3690,24 +3630,24 @@ msgstr "  Fria inoder: "
 
 #: misc/dumpe2fs.c:300
 msgid "while printing bad block list"
-msgstr "vid utskrift av lista över dåliga block"
+msgstr "vid utskrift av lista över dåliga block"
 
 #: misc/dumpe2fs.c:306
 #, c-format
 msgid "Bad blocks: %u"
-msgstr "Dåliga block: %u"
+msgstr "Dåliga block: %u"
 
 #: misc/dumpe2fs.c:333 misc/tune2fs.c:302
 msgid "while reading journal inode"
-msgstr "vid läsning av journalinod"
+msgstr "vid läsning av journalinod"
 
 #: misc/dumpe2fs.c:339
 msgid "while opening journal inode"
-msgstr "när journalinoden öppnades"
+msgstr "när journalinoden öppnades"
 
 #: misc/dumpe2fs.c:345
 msgid "while reading journal super block"
-msgstr "när journalsuperblocket lästes"
+msgstr "när journalsuperblocket lästes"
 
 #: misc/dumpe2fs.c:355
 #, c-format
@@ -3725,18 +3665,18 @@ msgid ""
 "Journal sequence:         0x%08x\n"
 "Journal start:            %u\n"
 msgstr ""
-"Journallängd:             %u\n"
+"Journallängd:             %u\n"
 "Journalsekvens:           0x%08x\n"
 "Journalstart:             %u\n"
 
 #: misc/dumpe2fs.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "Journal errno:            %d\n"
-msgstr "Journalanvändare:         %s\n"
+msgstr "Journalfelnummer:         %d\n"
 
 #: misc/dumpe2fs.c:401 misc/tune2fs.c:218
 msgid "while reading journal superblock"
-msgstr "vid läsning av journalsuperblock"
+msgstr "vid läsning av journalsuperblock"
 
 #: misc/dumpe2fs.c:409
 msgid "Couldn't find journal superblock magic numbers"
@@ -3755,21 +3695,21 @@ msgid ""
 msgstr ""
 "\n"
 "Journalblockstorlek:      %u\n"
-"Journallängd:             %u\n"
-"Journalens första block:  %u\n"
+"Journallängd:             %u\n"
+"Journalens första block:  %u\n"
 "Journalsekvens:           0x%08x\n"
 "Journalstart:             %u\n"
-"Journalens användarantal: %u\n"
+"Journalens användarantal: %u\n"
 
 #: misc/dumpe2fs.c:426
 #, c-format
 msgid "Journal users:            %s\n"
-msgstr "Journalanvändare:         %s\n"
+msgstr "Journalanvändare:         %s\n"
 
-#: misc/dumpe2fs.c:442 misc/mke2fs.c:662 misc/tune2fs.c:1137
+#: misc/dumpe2fs.c:442 misc/mke2fs.c:665 misc/tune2fs.c:1128
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
-msgstr "Kunde inte allokera minne för att tolka flaggor!\n"
+msgstr "Kunde inte allokera minne för att tolka flaggor!\n"
 
 #: misc/dumpe2fs.c:468
 #, c-format
@@ -3795,22 +3735,21 @@ msgid ""
 "\tblocksize=<blocksize>\n"
 msgstr ""
 "\n"
-"Felaktiga utökade flaggor angivna: %s\n"
+"Felaktiga utökade flaggor angivna: %s\n"
 "\n"
-"Utökade flaggor separeras med komman, och kan ta ett argument som avdelas "
-"med\n"
+"Utökade flaggor separeras med komman, och kan ta ett argument som avdelas med\n"
 "\tett likhetstecken (\"=\").\n"
 "\n"
-"Giltiga utökade flaggor är:\n"
+"Giltiga utökade flaggor är:\n"
 "\tsuperblock=<superblocknummer>\n"
 "\tblocksize=<blockstorlek>\n"
 
-#: misc/dumpe2fs.c:554 misc/mke2fs.c:1525
+#: misc/dumpe2fs.c:554 misc/mke2fs.c:1528
 #, c-format
 msgid "\tUsing %s\n"
-msgstr "\tAnvänder %s\n"
+msgstr "\tAnvänder %s\n"
 
-#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1923
+#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1914
 #: resize/main.c:305
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
@@ -3823,17 +3762,17 @@ msgid ""
 "%s: %s: error reading bitmaps: %s\n"
 msgstr ""
 "\n"
-"%s: %s: fel vid läsning av bitkartor: %s\n"
+"%s: %s: fel vid läsning av bitkartor: %s\n"
 
 #: misc/e2image.c:87
 #, c-format
 msgid "Usage: %s [-rsIQ] device image_file\n"
-msgstr "Användning: %s [-rsIQ] enhet avbildsfil\n"
+msgstr "Användning: %s [-rsIQ] enhet avbildsfil\n"
 
 #: misc/e2image.c:135
 #, c-format
 msgid "Error: header size is bigger than wrt_size\n"
-msgstr "Fel: huvudstorlek är större än wrt_size\n"
+msgstr "Fel: huvudstorlek är större än wrt_size\n"
 
 #: misc/e2image.c:141
 msgid "Couldn't allocate header buffer\n"
@@ -3858,56 +3797,56 @@ msgstr "vid skrivning av inodbitkarta"
 #: misc/e2image.c:1341
 #, c-format
 msgid "while trying to convert qcow2 image (%s) into raw image (%s)"
-msgstr "vid försök att konvertera en qcow2-bild (%s) till en rå bild (%s)"
+msgstr "vid försök att konvertera en qcow2-bild (%s) till en rå bild (%s)"
 
 #: misc/e2label.c:58
 #, c-format
 msgid "e2label: cannot open %s\n"
-msgstr "e2label: kan inte öppna %s\n"
+msgstr "e2label: kan inte öppna %s\n"
 
 #: misc/e2label.c:63
 #, c-format
 msgid "e2label: cannot seek to superblock\n"
-msgstr "e2label: kan inte söka till superblock\n"
+msgstr "e2label: kan inte söka till superblock\n"
 
 #: misc/e2label.c:68
 #, c-format
 msgid "e2label: error reading superblock\n"
-msgstr "e2label: fel vid läsning av superblock\n"
+msgstr "e2label: fel vid läsning av superblock\n"
 
 #: misc/e2label.c:72
 #, c-format
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: inte ett ext2-filsystem\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2074
+#: misc/e2label.c:97 misc/tune2fs.c:2065
 #, c-format
 msgid "Warning: label too long, truncating.\n"
-msgstr "Varning: etikett för lång, avkortar.\n"
+msgstr "Varning: etikett för lång, avkortar.\n"
 
 #: misc/e2label.c:100
 #, c-format
 msgid "e2label: cannot seek to superblock again\n"
-msgstr "e2label: kan inte söka till superblock igen\n"
+msgstr "e2label: kan inte söka till superblock igen\n"
 
 #: misc/e2label.c:105
 #, c-format
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: fel vid skrivning av superblock\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:803
+#: misc/e2label.c:117 misc/tune2fs.c:794
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
-msgstr "Användning: e2label enhet [ny-etikett]\n"
+msgstr "Användning: e2label enhet [ny-etikett]\n"
 
 #: misc/e2undo.c:36
 #, c-format
 msgid "Usage: %s <transaction file> <filesystem>\n"
-msgstr "Användning: %s <transaktionsfil> <filsystem>\n"
+msgstr "Användning: %s <transaktionsfil> <filsystem>\n"
 
 #: misc/e2undo.c:52
 msgid "Failed to read the file system data \n"
-msgstr "Misslyckades att läsa filsystemdata \n"
+msgstr "Misslyckades att läsa filsystemdata \n"
 
 #: misc/e2undo.c:62 misc/e2undo.c:83 misc/e2undo.c:108 misc/e2undo.c:206
 #, c-format
@@ -3917,11 +3856,11 @@ msgstr "Misslyckades med tdb_fetch %s\n"
 #: misc/e2undo.c:70
 #, c-format
 msgid "The file system Mount time didn't match %u\n"
-msgstr "Filsystemets monterings tid stämmer inte med %u\n"
+msgstr "Filsystemets monterings tid stämmer inte med %u\n"
 
 #: misc/e2undo.c:89
 msgid "The file system UUID didn't match \n"
-msgstr "Filsystemets UUID stämmer inte med \n"
+msgstr "Filsystemets UUID stämmer inte med \n"
 
 #: misc/e2undo.c:163
 #, c-format
@@ -3931,21 +3870,21 @@ msgstr "tdb_open misslyckades %s\n"
 #: misc/e2undo.c:169
 #, c-format
 msgid "Error while determining whether %s is mounted.\n"
-msgstr "Fel när det avgjordes om %s är monterat.\n"
+msgstr "Fel när det avgjordes om %s är monterat.\n"
 
 #: misc/e2undo.c:175
 msgid "e2undo should only be run on unmounted file system\n"
-msgstr "e2undo skall endast köras på omonterade filsystem\n"
+msgstr "e2undo skall endast köras på omonterade filsystem\n"
 
 #: misc/e2undo.c:184
 #, c-format
 msgid "Failed to open %s\n"
-msgstr "Det gick inte att öppna öppna %s\n"
+msgstr "Det gick inte att öppna öppna %s\n"
 
 #: misc/e2undo.c:210
 #, c-format
 msgid "Replayed transaction of size %zd at location %llu\n"
-msgstr "Återuppspelning av transaktion med storlek %zd på plats %llu\n"
+msgstr "Återuppspelning av transaktion med storlek %zd på plats %llu\n"
 
 #: misc/e2undo.c:216
 #, c-format
@@ -3955,12 +3894,12 @@ msgstr "Misslyckades skriva %s\n"
 #: misc/fsck.c:343
 #, c-format
 msgid "WARNING: couldn't open %s: %s\n"
-msgstr "VARNING: kunde inte öppna %s: %s\n"
+msgstr "VARNING: kunde inte öppna %s: %s\n"
 
 #: misc/fsck.c:353
 #, c-format
 msgid "WARNING: bad format on line %d of %s\n"
-msgstr "VARNING: fel format på rad %d av %s\n"
+msgstr "VARNING: fel format på rad %d av %s\n"
 
 #: misc/fsck.c:370
 msgid ""
@@ -3969,9 +3908,9 @@ msgid ""
 "\tshould fix your /etc/fstab file as soon as you can.\n"
 "\n"
 msgstr ""
-"VARNING: Din /etc/fstab innehåller inte fsck-passnr-fältet.\n"
-"\tJag fixar mig förbi detta åt dig, men du\n"
-"\tbör rätta din /etc/fstab-fil så snart du kan.\n"
+"VARNING: Din /etc/fstab innehåller inte fsck-passnr-fältet.\n"
+"\tJag fixar mig förbi detta åt dig, men du\n"
+"\tbör rätta din /etc/fstab-fil så snart du kan.\n"
 "\n"
 
 #: misc/fsck.c:478
@@ -3987,12 +3926,12 @@ msgstr "%s: wait: Inga fler barnprocesser?!?\n"
 #: misc/fsck.c:616
 #, c-format
 msgid "Warning... %s for device %s exited with signal %d.\n"
-msgstr "Varning... %s för enhet %s avslutade med signal %d.\n"
+msgstr "Varning... %s för enhet %s avslutade med signal %d.\n"
 
 #: misc/fsck.c:622
 #, c-format
 msgid "%s %s: status is %x, should never happen.\n"
-msgstr "%s %s: status är %x, skulle aldrig inträffa.\n"
+msgstr "%s %s: status är %x, skulle aldrig inträffa.\n"
 
 #: misc/fsck.c:661
 #, c-format
@@ -4002,28 +3941,24 @@ msgstr "Avslutade med %s (slutstatus %d)\n"
 #: misc/fsck.c:721
 #, c-format
 msgid "%s: Error %d while executing fsck.%s for %s\n"
-msgstr "%s: Fel %d när fsck.%s kördes för %s\n"
+msgstr "%s: Fel %d när fsck.%s kördes för %s\n"
 
 #: misc/fsck.c:742
 msgid ""
 "Either all or none of the filesystem types passed to -t must be prefixed\n"
 "with 'no' or '!'.\n"
 msgstr ""
-"Antingen alla eller inga av filsystemstyperna som ges till -t måste ha\n"
+"Antingen alla eller inga av filsystemstyperna som ges till -t måste ha\n"
 "prefix \"no\" eller \"!\".\n"
 
 #: misc/fsck.c:761
 msgid "Couldn't allocate memory for filesystem types\n"
-msgstr "Kunde inte allokera minne för filsystemtyper\n"
+msgstr "Kunde inte allokera minne för filsystemtyper\n"
 
 #: misc/fsck.c:884
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
-"%s: hoppar över felaktig rad i /etc/fstab: bind-montering med fsck-"
-"passnummer som inte är noll\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: hoppar över felaktig rad i /etc/fstab: bind-montering med fsck-passnummer som inte är noll\n"
 
 #: misc/fsck.c:911
 #, c-format
@@ -4037,41 +3972,38 @@ msgstr "Kontrollerar alla filsystem.\n"
 #: misc/fsck.c:1058
 #, c-format
 msgid "--waiting-- (pass %d)\n"
-msgstr "--väntar-- (pass %d)\n"
+msgstr "--väntar-- (pass %d)\n"
 
 #: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
-msgstr ""
-"Användning: fsck [-AMNPRTV] [ -C [ fh ] ] [-t fstyp] [fs-flaggor] "
-"[filsys ...]\n"
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgstr "Användning: fsck [-AMNPRTV] [ -C [ fh ] ] [-t fstyp] [fs-flaggor] [filsys ...]\n"
 
 #: misc/fsck.c:1120
 #, c-format
 msgid "%s: too many devices\n"
-msgstr "%s: för många enheter\n"
+msgstr "%s: för många enheter\n"
 
 #: misc/fsck.c:1153 misc/fsck.c:1239
 #, c-format
 msgid "%s: too many arguments\n"
-msgstr "%s: för många argument\n"
+msgstr "%s: för många argument\n"
 
 #: misc/lsattr.c:74
 #, c-format
 msgid "Usage: %s [-RVadlv] [files...]\n"
-msgstr "Användning: %s [-RVadlv] [filer...]\n"
+msgstr "Användning: %s [-RVadlv] [filer...]\n"
 
 #: misc/lsattr.c:84
 #, c-format
 msgid "While reading flags on %s"
-msgstr "Vid läsning av flaggor på %s"
+msgstr "Vid läsning av flaggor på %s"
 
 #: misc/lsattr.c:91
 #, c-format
 msgid "While reading version on %s"
-msgstr "Vid läsning av version på %s"
+msgstr "Vid läsning av version på %s"
 
-#: misc/mke2fs.c:114
+#: misc/mke2fs.c:115
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4080,264 +4012,262 @@ msgid ""
 "\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-"
-"count]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]\n"
 msgstr ""
-"Användning: %s [-c|-l filnamn] [-b blockstorlek] [-C klusterstorlek]\n"
+"Användning: %s [-c|-l filnamn] [-b blockstorlek] [-C klusterstorlek]\n"
 "\t[-i byte-per-inod] [-I inodstorlek] [-J journalflaggor]\n"
 "\t[-G flexgruppstorlek] [-N antal-inoder]\n"
 "\t[-m reservade-block-procent] [-o skapar-os]\n"
 "\t[-g block-per-grupp] [-L volymetikett] [-M senast-monterad-katalog]\n"
-"\t[-O funktion[,...]] [-r fs-revision] [-E utökad-flagga[,...]]\n"
-"\t[-t fs-typ] [-T användningstyp] [-U UUID] [-jnqvDFKSV] enhet [blockantal]\n"
+"\t[-O funktion[,...]] [-r fs-revision] [-E utökad-flagga[,...]]\n"
+"\t[-t fs-typ] [-T användningstyp] [-U UUID] [-jnqvDFKSV] enhet [blockantal]\n"
 
-#: misc/mke2fs.c:217
+#: misc/mke2fs.c:218
 #, c-format
 msgid "Running command: %s\n"
-msgstr "Kör kommando: %s\n"
+msgstr "Kör kommando: %s\n"
 
-#: misc/mke2fs.c:221
+#: misc/mke2fs.c:222
 #, c-format
 msgid "while trying to run '%s'"
-msgstr "vid försök att köra \"%s\""
+msgstr "vid försök att köra \"%s\""
 
-#: misc/mke2fs.c:228
+#: misc/mke2fs.c:229
 msgid "while processing list of bad blocks from program"
-msgstr "vid bearbetning av lista över dåliga block från program"
+msgstr "vid bearbetning av lista över dåliga block från program"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:256
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
-msgstr "Block %d i primär superblock-/gruppbeskrivare är felaktigt.\n"
+msgstr "Block %d i primär superblock-/gruppbeskrivare är felaktigt.\n"
 
-#: misc/mke2fs.c:257
+#: misc/mke2fs.c:258
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
-msgstr "Block %u till %u måste vara bra för att bygga ett filsystem.\n"
+msgstr "Block %u till %u måste vara bra för att bygga ett filsystem.\n"
 
-#: misc/mke2fs.c:260
+#: misc/mke2fs.c:261
 msgid "Aborting....\n"
 msgstr "Avbryter...\n"
 
-#: misc/mke2fs.c:280
+#: misc/mke2fs.c:281
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
 "\tbad blocks.\n"
 "\n"
 msgstr ""
-"Varning: reservsuperblock-/-gruppbeskrivare vid block %u innehåller\n"
-"\tdåliga block.\n"
+"Varning: reservsuperblock-/-gruppbeskrivare vid block %u innehåller\n"
+"\tdåliga block.\n"
 "\n"
 
-#: misc/mke2fs.c:299
+#: misc/mke2fs.c:300
 msgid "while marking bad blocks as used"
-msgstr "vid markering av dåliga block som använda"
+msgstr "vid markering av dåliga block som använda"
 
-#: misc/mke2fs.c:316
+#: misc/mke2fs.c:317
 msgid "Writing inode tables: "
 msgstr "Skriver inodstabeller: "
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:339
 #, c-format
 msgid ""
 "\n"
 "Could not write %d blocks in inode table starting at %llu: %s\n"
 msgstr ""
 "\n"
-"Kunde inte skriva %d block i inodstabell som börjar vid %llu: %s\n"
+"Kunde inte skriva %d block i inodstabell som börjar vid %llu: %s\n"
 
-#: misc/mke2fs.c:351 misc/mke2fs.c:2175 misc/mke2fs.c:2429
+#: misc/mke2fs.c:353 misc/mke2fs.c:2181 misc/mke2fs.c:2435
 #, c-format
 msgid "done                            \n"
 msgstr "klar                            \n"
 
-#: misc/mke2fs.c:362
+#: misc/mke2fs.c:364
 msgid "while creating root dir"
 msgstr "vid skapande av rotkatalog"
 
-#: misc/mke2fs.c:369
+#: misc/mke2fs.c:371
 msgid "while reading root inode"
-msgstr "vid läsning av rotinod"
+msgstr "vid läsning av rotinod"
 
-#: misc/mke2fs.c:383
+#: misc/mke2fs.c:385
 msgid "while setting root inode ownership"
-msgstr "vid inställning av rotinodens ägarskap"
+msgstr "vid inställning av rotinodens ägarskap"
 
-#: misc/mke2fs.c:401
+#: misc/mke2fs.c:403
 msgid "while creating /lost+found"
 msgstr "vid skapande av /lost+found"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:410
 msgid "while looking up /lost+found"
-msgstr "vid sökning efter /lost+found"
+msgstr "vid sökning efter /lost+found"
 
-#: misc/mke2fs.c:421
+#: misc/mke2fs.c:423
 msgid "while expanding /lost+found"
 msgstr "vid utvidgning av /lost+found"
 
-#: misc/mke2fs.c:436
+#: misc/mke2fs.c:438
 msgid "while setting bad block inode"
-msgstr "vid inställning av inod för dåliga block"
+msgstr "vid inställning av inod för dåliga block"
 
-#: misc/mke2fs.c:463
+#: misc/mke2fs.c:465
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
-msgstr "Slut på mine vid radering av sektorer %d-%d\n"
+msgstr "Slut på mine vid radering av sektorer %d-%d\n"
 
-#: misc/mke2fs.c:473
+#: misc/mke2fs.c:475
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
-msgstr "Varning: kune inte läsa block 0: %s\n"
+msgstr "Varning: kune inte läsa block 0: %s\n"
 
-#: misc/mke2fs.c:489
+#: misc/mke2fs.c:491
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Varning: kunde inte radera sektor %d: %s\n"
 
-#: misc/mke2fs.c:505
+#: misc/mke2fs.c:507
 msgid "while initializing journal superblock"
 msgstr "vid initiering av journalsuperblock"
 
-#: misc/mke2fs.c:513
+#: misc/mke2fs.c:515
 msgid "Zeroing journal device: "
-msgstr "Nollställer journalenhet: "
+msgstr "Nollställer journalenhet: "
 
-#: misc/mke2fs.c:525
+#: misc/mke2fs.c:527
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
-msgstr "vid nollställning av journalenhet (block %llu, antal %d)"
+msgstr "vid nollställning av journalenhet (block %llu, antal %d)"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:546
 msgid "while writing journal superblock"
 msgstr "vid skrivning av journalsuperblock"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:561
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
 "\n"
 msgstr ""
-"varning: %llu block oanvända.\n"
+"varning: %llu block oanvända.\n"
 "\n"
 
-#: misc/mke2fs.c:563
+#: misc/mke2fs.c:566
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Filsystemsetikett=%s\n"
 
-#: misc/mke2fs.c:566
+#: misc/mke2fs.c:569
 #, c-format
 msgid "OS type: %s\n"
 msgstr "OS-typ: %s\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:571
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Blockstorlek=%u (log=%u)\n"
 
-#: misc/mke2fs.c:572
+#: misc/mke2fs.c:575
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Klusterstorlek=%u (log=%u)\n"
 
-#: misc/mke2fs.c:576
+#: misc/mke2fs.c:579
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Fragmentstorlek=%u (log=%u)\n"
 
-#: misc/mke2fs.c:578
+#: misc/mke2fs.c:581
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Kliv=%u block, remsvidd=%u block\n"
 
-#: misc/mke2fs.c:580
+#: misc/mke2fs.c:583
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u inoder, %llu block\n"
 
-#: misc/mke2fs.c:582
+#: misc/mke2fs.c:585
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
-msgstr "%llu block (%2.2f%%) reserverade för superanvändaren\n"
+msgstr "%llu block (%2.2f%%) reserverade för superanvändaren\n"
 
-#: misc/mke2fs.c:585
+#: misc/mke2fs.c:588
 #, c-format
 msgid "First data block=%u\n"
-msgstr "Första datablock=%u\n"
+msgstr "Första datablock=%u\n"
 
-#: misc/mke2fs.c:587
+#: misc/mke2fs.c:590
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Maximalt antal filsystemsblock=%lu\n"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:594
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u blockgrupper\n"
 
-#: misc/mke2fs.c:593
+#: misc/mke2fs.c:596
 #, c-format
 msgid "%u block group\n"
 msgstr "%u blockgrupp\n"
 
-#: misc/mke2fs.c:596
+#: misc/mke2fs.c:599
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u block per grupp, %u kluster per grupp\n"
 
-#: misc/mke2fs.c:599
+#: misc/mke2fs.c:602
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u block per grupp, %u fragment per grupp\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:604
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u inoder per grupp\n"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:611
 #, c-format
 msgid "Superblock backups stored on blocks: "
-msgstr "Superblockkopior lagrade på block: "
+msgstr "Superblockkopior lagrade på block: "
 
-#: misc/mke2fs.c:687 misc/tune2fs.c:1165
+#: misc/mke2fs.c:690 misc/tune2fs.c:1156
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "Ogiltigt mmp_update_interval: %s\n"
 
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:704
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Ogiltig stride-parameter: %s\n"
 
-#: misc/mke2fs.c:716
+#: misc/mke2fs.c:719
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Ogiltig remsbreddsparameter: %s\n"
 
-#: misc/mke2fs.c:739
+#: misc/mke2fs.c:742
 #, c-format
 msgid "Invalid resize parameter: %s\n"
-msgstr "Ogiltig storleksändringsparameter: %s\n"
+msgstr "Ogiltig storleksändringsparameter: %s\n"
 
-#: misc/mke2fs.c:746
+#: misc/mke2fs.c:749
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"Storleksändringens maximum måste vara större än filsystemets storlek.\n"
+msgstr "Storleksändringens maximum måste vara större än filsystemets storlek.\n"
 
-#: misc/mke2fs.c:770
+#: misc/mke2fs.c:773
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
-msgstr "Storleksändring under drift stöds inte med revision 0-filsystem\n"
+msgstr "Storleksändring under drift stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:811
 #, c-format
 msgid "Invalid quotatype parameter: %s\n"
 msgstr "Ogiltig quotatype-parameter: %s\n"
 
-#: misc/mke2fs.c:819
+#: misc/mke2fs.c:822
 #, c-format
 msgid ""
 "\n"
@@ -4361,23 +4291,22 @@ msgstr ""
 "\n"
 "Felaktiga flaggor angivna: %s\n"
 "\n"
-"Utökade flaggor separeras med komman, och kan ta ett argument som avdelas "
-"med\n"
+"Utökade flaggor separeras med komman, och kan ta ett argument som avdelas med\n"
 "\tett likhetstecken (\"=\").\n"
 "\n"
-"Giltiga utökade flaggor är:\n"
+"Giltiga utökade flaggor är:\n"
 "\tstride=<RAID-datastycken per disk i block>\n"
-"\tstripe-width=<RAID-kliv · datadiskar i block>\n"
-"\tresize=<maximal storleksändringsstorlek i block>\n"
-"\tlazy_itable_init=<0 för att avaktivera, 1 för att aktivera>\n"
-"\tlazy_journal_init=<0 för att avaktivera, 1 för att aktivera>\n"
+"\tstripe-width=<RAID-kliv Â· datadiskar i block>\n"
+"\tresize=<maximal storleksändringsstorlek i block>\n"
+"\tlazy_itable_init=<0 för att avaktivera, 1 för att aktivera>\n"
+"\tlazy_journal_init=<0 för att avaktivera, 1 för att aktivera>\n"
 "\ttest_fs\n"
 "        discard\n"
 "        nodiscard\n"
 "        quotatype=<usr ELLER grp>\n"
 "\n"
 
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:842
 #, c-format
 msgid ""
 "\n"
@@ -4385,10 +4314,10 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Varning: RAID-remsbredd %u är inte en jämn multipel av klivet %u.\n"
+"Varning: RAID-remsbredd %u är inte en jämn multipel av klivet %u.\n"
 "\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:881
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -4397,17 +4326,17 @@ msgstr ""
 "Syntaxfel i mke2fs konfigurationsfil (%s, rad nr %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:891 misc/tune2fs.c:393
+#: misc/mke2fs.c:894 misc/tune2fs.c:393
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Ogiltig filsystemsflagga satt: %s\n"
 
-#: misc/mke2fs.c:903 misc/tune2fs.c:345
+#: misc/mke2fs.c:906 misc/tune2fs.c:345
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Ogiltig monteringsflagga satt: %s\n"
 
-#: misc/mke2fs.c:1043
+#: misc/mke2fs.c:1046
 #, c-format
 msgid ""
 "\n"
@@ -4416,21 +4345,21 @@ msgstr ""
 "\n"
 "Din mke2fs.conf-fil definierar inte filsystemstypen %s.\n"
 
-#: misc/mke2fs.c:1047
+#: misc/mke2fs.c:1050
 #, c-format
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
-"Du behöver förmodligen installera en uppdaterad mke2fs.conf-fil.\n"
+"Du behöver förmodligen installera en uppdaterad mke2fs.conf-fil.\n"
 "\n"
 
-#: misc/mke2fs.c:1051
+#: misc/mke2fs.c:1054
 #, c-format
 msgid "Aborting...\n"
 msgstr "Avbryter...\n"
 
-#: misc/mke2fs.c:1091
+#: misc/mke2fs.c:1094
 #, c-format
 msgid ""
 "\n"
@@ -4438,135 +4367,131 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Varning: fs_type %s är inte definierad i mke2fs.conf\n"
+"Varning: fs_type %s är inte definierad i mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1249
+#: misc/mke2fs.c:1252
 #, c-format
 msgid "Couldn't allocate memory for new PATH.\n"
-msgstr "Kunde inte allokera minne för ny SÖKVÄG.\n"
+msgstr "Kunde inte allokera minne för ny SÖKVÄG.\n"
 
-#: misc/mke2fs.c:1290
+#: misc/mke2fs.c:1293
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Kunde inte initiera profilen (fel: %ld).\n"
 
-#: misc/mke2fs.c:1330
+#: misc/mke2fs.c:1333
 #, c-format
 msgid "invalid block size - %s"
 msgstr "felaktig blockstorlek - %s"
 
-#: misc/mke2fs.c:1334
+#: misc/mke2fs.c:1337
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
-msgstr "Varning: blockstorlek %d är inte användbar på de flesta system.\n"
+msgstr "Varning: blockstorlek %d är inte användbar på de flesta system.\n"
 
-#: misc/mke2fs.c:1350
+#: misc/mke2fs.c:1353
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "felaktig klusterstorlek - %s"
 
-#: misc/mke2fs.c:1362
+#: misc/mke2fs.c:1365
 msgid "Illegal number for blocks per group"
-msgstr "Ogiltigt antal för block per grupp"
+msgstr "Ogiltigt antal för block per grupp"
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1370
 msgid "blocks per group must be multiple of 8"
-msgstr "block per grupp måste vara en multipel av 8"
+msgstr "block per grupp måste vara en multipel av 8"
 
-#: misc/mke2fs.c:1375
+#: misc/mke2fs.c:1378
 msgid "Illegal number for flex_bg size"
-msgstr "Felaktigt tal för flex_bg-storlek"
+msgstr "Felaktigt tal för flex_bg-storlek"
 
-#: misc/mke2fs.c:1381
+#: misc/mke2fs.c:1384
 msgid "flex_bg size must be a power of 2"
-msgstr "storlek på flex_bg måste vara en multipel av 2"
+msgstr "storlek på flex_bg måste vara en multipel av 2"
 
-#: misc/mke2fs.c:1391
+#: misc/mke2fs.c:1394
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
-msgstr "ogiltig inodsförhållande %s (min %d/max %d)"
+msgstr "ogiltig inodsförhållande %s (min %d/max %d)"
 
-#: misc/mke2fs.c:1401
+#: misc/mke2fs.c:1404
 #, c-format
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Varning: flaggan -K undanbedes och skall inte användas mera.  Använd den "
-"utökade flaggan \"-E nodiscard\" istället!\n"
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Varning: flaggan -K undanbedes och skall inte användas mera.  Använd den utökade flaggan \"-E nodiscard\" istället!\n"
 
-#: misc/mke2fs.c:1415
+#: misc/mke2fs.c:1418
 msgid "in malloc for bad_blocks_filename"
-msgstr "i malloc för bad_blocks_filename"
+msgstr "i malloc för bad_blocks_filename"
 
-#: misc/mke2fs.c:1425
+#: misc/mke2fs.c:1428
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "ogiltig procentandel reserverade block - %s"
 
-#: misc/mke2fs.c:1443
+#: misc/mke2fs.c:1446
 #, c-format
 msgid "bad revision level - %s"
-msgstr "felaktigt versionsnivå - %s"
+msgstr "felaktigt versionsnivå - %s"
 
-#: misc/mke2fs.c:1455
+#: misc/mke2fs.c:1458
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "ogiltig inodsstorlek - %s"
 
-#: misc/mke2fs.c:1475
+#: misc/mke2fs.c:1478
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "felaktigt antal inoder - %s"
 
-#: misc/mke2fs.c:1492
+#: misc/mke2fs.c:1495
 msgid "The -t option may only be used once"
-msgstr "Flaggan -t får endast anges en gång"
+msgstr "Flaggan -t får endast anges en gång"
 
-#: misc/mke2fs.c:1500
+#: misc/mke2fs.c:1503
 msgid "The -T option may only be used once"
-msgstr "Flaggan -T får endast anges en gång"
+msgstr "Flaggan -T får endast anges en gång"
 
-#: misc/mke2fs.c:1550 misc/mke2fs.c:2508
+#: misc/mke2fs.c:1553 misc/mke2fs.c:2514
 #, c-format
 msgid "while trying to open journal device %s\n"
-msgstr "vid försök att öppna journalenhet %s\n"
+msgstr "vid försök att öppna journalenhet %s\n"
 
-#: misc/mke2fs.c:1556
+#: misc/mke2fs.c:1559
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
-msgstr "Journalenhetens blockstorlek (%d) mindre än minsta blockstorlek %d\n"
+msgstr "Journalenhetens blockstorlek (%d) mindre än minsta blockstorlek %d\n"
 
-#: misc/mke2fs.c:1562
+#: misc/mke2fs.c:1565
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
-msgstr "Använder journalenhetens blockstorlek: %d\n"
+msgstr "Använder journalenhetens blockstorlek: %d\n"
 
-#: misc/mke2fs.c:1573
+#: misc/mke2fs.c:1576
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
-msgstr "felaktiga block \"%s\" på enhet \"%s\""
+msgstr "felaktiga block \"%s\" på enhet \"%s\""
 
-# "Ett" för att detta sätts in i annan sträng där det föregås av "a".
-# Även "journal" kan sättas in på samma plats.  Felrapporterat.
-#: misc/mke2fs.c:1583
+# "Ett" för att detta sätts in i annan sträng där det föregås av "a".
+# Även "journal" kan sättas in på samma plats.  Felrapporterat.
+#: misc/mke2fs.c:1586
 msgid "filesystem"
 msgstr "ett filsystem"
 
-#: misc/mke2fs.c:1596 resize/main.c:374
+#: misc/mke2fs.c:1599 resize/main.c:355
 msgid "while trying to determine filesystem size"
-msgstr "vid försök att avgöra filsystemstorlek"
+msgstr "vid försök att avgöra filsystemstorlek"
 
-#: misc/mke2fs.c:1602
+#: misc/mke2fs.c:1605
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
 msgstr ""
-"Kunde inte avgöra enhetsstorlek; du måste ange\n"
-"storleken på filsystemet\n"
+"Kunde inte avgöra enhetsstorlek; du måste ange\n"
+"storleken på filsystemet\n"
 
-#: misc/mke2fs.c:1609
+#: misc/mke2fs.c:1612
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4574,200 +4499,188 @@ msgid ""
 "\tto re-read your partition table.\n"
 msgstr ""
 "Enhetsstorlek rapporterades som noll.  Ogiltig partition angiven, eller\n"
-"\tpartitionstabellen var inte omläst efter att ha kört fsck, på grund\n"
-"\tav en modifierad partition används och är i bruk.  Du kan behöva\n"
-"\tstarta om för att läsa om din partitionstabell.\n"
+"\tpartitionstabellen var inte omläst efter att ha kört fsck, på grund\n"
+"\tav en modifierad partition används och är i bruk.  Du kan behöva\n"
+"\tstarta om för att läsa om din partitionstabell.\n"
 
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1629
 msgid "Filesystem larger than apparent device size."
-msgstr "Filsystem större än synbar enhetsstorlek."
+msgstr "Filsystem större än synbar enhetsstorlek."
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1649
 #, c-format
 msgid "Failed to parse fs types list\n"
 msgstr "Misslyckades tolka fs-typlista\n"
 
-#: misc/mke2fs.c:1700
+#: misc/mke2fs.c:1703
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
 "\tin 32 bits using a blocksize of %d.\n"
 msgstr ""
-"%s: Storleken på enhet (0x%llx block) %s är för stor för att uttryckas\n"
-"\tmed 32 bitar med användning av en blockstorlek på %d.\n"
+"%s: Storleken på enhet (0x%llx block) %s är för stor för att uttryckas\n"
+"\tmed 32 bitar med användning av en blockstorlek på %d.\n"
 
-#: misc/mke2fs.c:1716
+#: misc/mke2fs.c:1719
 msgid "fs_types for mke2fs.conf resolution: "
-msgstr "upplösning av fs_types för mke2fs.conf: "
+msgstr "upplösning av fs_types för mke2fs.conf: "
 
-#: misc/mke2fs.c:1723
+#: misc/mke2fs.c:1726
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
-msgstr "Filsystemsfunktioner som inte stöds med revision 0-filsystem\n"
+msgstr "Filsystemsfunktioner som inte stöds med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:1730
+#: misc/mke2fs.c:1733
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
-msgstr "Glesa superblock stöds inte med revision 0-filsystem\n"
+msgstr "Glesa superblock stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:1742
+#: misc/mke2fs.c:1745
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
-msgstr "Journaler stöds inte med revision 0-filsystem\n"
+msgstr "Journaler stöds inte med revision 0-filsystem\n"
 
-#: misc/mke2fs.c:1756
+#: misc/mke2fs.c:1759
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "ogiltig procentandel reserverade block - %lf"
 
-#: misc/mke2fs.c:1772
+#: misc/mke2fs.c:1775
 #, c-format
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
-"Egenskaperna resize_inode och meta_bg är inte kompatibla\n"
-"De kan inte båda aktiveras samtidigt.\n"
+"Egenskaperna resize_inode och meta_bg är inte kompatibla\n"
+"De kan inte båda aktiveras samtidigt.\n"
 
-#: misc/mke2fs.c:1789
+#: misc/mke2fs.c:1792
 msgid "while trying to determine hardware sector size"
-msgstr "vid försök att avgöra hårdvarusektorstorlek"
+msgstr "vid försök att avgöra hårdvarusektorstorlek"
 
-#: misc/mke2fs.c:1795
+#: misc/mke2fs.c:1798
 msgid "while trying to determine physical sector size"
-msgstr "vid försök att avgöra fysisk sektorstorlek"
+msgstr "vid försök att avgöra fysisk sektorstorlek"
 
-#: misc/mke2fs.c:1828
+#: misc/mke2fs.c:1831
 msgid "while setting blocksize; too small for device\n"
-msgstr "när blockstorlek sattes; för liten för enheten\n"
+msgstr "när blockstorlek sattes; för liten för enheten\n"
 
-#: misc/mke2fs.c:1833
+#: misc/mke2fs.c:1836
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Varning: angiven blockstorlek %d är mindre än enhetens fysiska sektorstorlek "
-"%d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Varning: angiven blockstorlek %d är mindre än enhetens fysiska sektorstorlek %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1867
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
-msgstr "varning: Kan inte ta reda på enhetens geometri för %s\n"
+msgstr "varning: Kan inte ta reda på enhetens geometri för %s\n"
 
-#: misc/mke2fs.c:1867
+#: misc/mke2fs.c:1870
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
-msgstr "%s justering är förskjuten med %lu byte.\n"
+msgstr "%s justering är förskjuten med %lu byte.\n"
 
-#: misc/mke2fs.c:1869
+#: misc/mke2fs.c:1872
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
-msgstr ""
-"Detta kan medföra väldigt dåliga prestanda, (om)partitionering föreslås.\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Detta kan medföra väldigt dåliga prestanda, (om)partitionering föreslås.\n"
 
-#: misc/mke2fs.c:1880
+#: misc/mke2fs.c:1883
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
-msgstr "%d-byteblock för stort för systemet (max %d)"
+msgstr "%d-byteblock för stort för systemet (max %d)"
 
-#: misc/mke2fs.c:1884
+#: misc/mke2fs.c:1887
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
-msgstr ""
-"Varning: %d-byteblock för stort för systemet (max %d), tvingas fortsätta\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgstr "Varning: %d-byteblock för stort för systemet (max %d), tvingas fortsätta\n"
 
-#: misc/mke2fs.c:1920
+#: misc/mke2fs.c:1925
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
-msgstr ""
-"reserverade block för storleksändring under drift stöds inte på icke-glesa "
-"filsystem"
+msgstr "reserverade block för storleksändring under drift stöds inte på icke-glesa filsystem"
 
-#: misc/mke2fs.c:1929
+#: misc/mke2fs.c:1934
 msgid "blocks per group count out of range"
-msgstr "antal block per grupp utanför giltigt intervall"
+msgstr "antal block per grupp utanför giltigt intervall"
 
-#: misc/mke2fs.c:1944
+#: misc/mke2fs.c:1949
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
-msgstr ""
-"Funktionen flex_gb är inte aktiverad, så fleg_bg-storleg kan inte anges"
+msgstr "Funktionen flex_gb är inte aktiverad, så fleg_bg-storleg kan inte anges"
 
-#: misc/mke2fs.c:1956
+#: misc/mke2fs.c:1961
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "ogiltig inodstorlek %d (min %d/max %d)"
 
-#: misc/mke2fs.c:1974
+#: misc/mke2fs.c:1979
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
-msgstr "för många inoder (%llu), öka inodsförhållandet?"
+msgstr "för många inoder (%llu), öka inodsförhållandet?"
 
-#: misc/mke2fs.c:1981
+#: misc/mke2fs.c:1986
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
-msgstr "för många inoder (%llu), ange < 2³² inoder"
+msgstr "för mÃ¥nga inoder (%llu), ange < 2³² inoder"
 
-#: misc/mke2fs.c:1995
+#: misc/mke2fs.c:2000
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
 "\tfilesystem with %llu blocks, specify higher inode_ratio (-i)\n"
 "\tor lower inode count (-N).\n"
 msgstr ""
-"inodsstorlek (%u) · inodantal (%u) för stort för ett\n"
-"\tfilsystem med %llu block, ange högre inodsförhållande (-i)\n"
-"\teller lägre inodantal (-N).\n"
+"inodsstorlek (%u) · inodantal (%u) för stort för ett\n"
+"\tfilsystem med %llu block, ange högre inodsförhållande (-i)\n"
+"\teller lägre inodantal (-N).\n"
 
-#: misc/mke2fs.c:2114
+#: misc/mke2fs.c:2119
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
 "    e2undo %s %s\n"
 "\n"
 msgstr ""
-"Skriver över existerande filsystem, detta kan göras ogjort med kommandot:\n"
+"Skriver över existerande filsystem, detta kan göras ogjort med kommandot:\n"
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/mke2fs.c:2128
+#: misc/mke2fs.c:2133
 msgid "while trying to setup undo file\n"
-msgstr "vid försök att skapa en gör-ogjort-fil\n"
+msgstr "vid försök att skapa en gör-ogjort-fil\n"
 
-#: misc/mke2fs.c:2154
+#: misc/mke2fs.c:2159
 msgid "Discarding device blocks: "
 msgstr "Utrangerar enhetsblock: "
 
-#: misc/mke2fs.c:2170
+#: misc/mke2fs.c:2176
 msgid "failed - "
 msgstr "misslyckades - "
 
-#: misc/mke2fs.c:2277
+#: misc/mke2fs.c:2283
 msgid "while setting up superblock"
-msgstr "vid uppsättning av superblock"
+msgstr "vid uppsättning av superblock"
 
-#: misc/mke2fs.c:2286
+#: misc/mke2fs.c:2292
 #, c-format
 msgid "Discard succeeded and will return 0s  - skipping inode table wipe\n"
-msgstr ""
-"Utrangering lyckades och kommer returnera 0s  - hoppar över rensning av "
-"inodstabell\n"
+msgstr "Utrangering lyckades och kommer returnera 0s  - hoppar över rensning av inodstabell\n"
 
-#: misc/mke2fs.c:2369
+#: misc/mke2fs.c:2375
 #, c-format
 msgid "unknown os - %s"
-msgstr "okänt os - %s"
+msgstr "okänt os - %s"
 
-#: misc/mke2fs.c:2421
+#: misc/mke2fs.c:2427
 #, c-format
 msgid "Allocating group tables: "
 msgstr "Allokerar grupptabeller: "
 
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2431
 msgid "while trying to allocate filesystem tables"
-msgstr "vid försök att allokera filsystemstabeller"
+msgstr "vid försök att allokera filsystemstabeller"
 
-#: misc/mke2fs.c:2434
+#: misc/mke2fs.c:2440
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -4775,80 +4688,78 @@ msgstr ""
 "\n"
 "\tvid konvertering av underklustrets bitkarta"
 
-#: misc/mke2fs.c:2477
+#: misc/mke2fs.c:2483
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
-msgstr "vid nollställning av block %llu vid slutet av filsystemet"
+msgstr "vid nollställning av block %llu vid slutet av filsystemet"
 
-#: misc/mke2fs.c:2490
+#: misc/mke2fs.c:2496
 msgid "while reserving blocks for online resize"
-msgstr "vid reservation av block för storleksändring under drift"
+msgstr "vid reservation av block för storleksändring under drift"
 
-# "En" för att detta sätts in i annan sträng där det föregås av "a".
-# Även "filsystem" kan sättas in på samma plats.  Felrapporterat.
-#: misc/mke2fs.c:2501 misc/tune2fs.c:640
+# "En" för att detta sätts in i annan sträng där det föregås av "a".
+# Även "filsystem" kan sättas in på samma plats.  Felrapporterat.
+#: misc/mke2fs.c:2507 misc/tune2fs.c:640
 msgid "journal"
 msgstr "en journal"
 
-#: misc/mke2fs.c:2513
+#: misc/mke2fs.c:2519
 #, c-format
 msgid "Adding journal to device %s: "
-msgstr "Lägger till journal till enhet %s: "
+msgstr "Lägger till journal till enhet %s: "
 
-#: misc/mke2fs.c:2520
+#: misc/mke2fs.c:2526
 #, c-format
 msgid ""
 "\n"
 "\twhile trying to add journal to device %s"
 msgstr ""
 "\n"
-"\tvid försök att lägga till journal till enhet %s"
+"\tvid försök att lägga till journal till enhet %s"
 
-#: misc/mke2fs.c:2525 misc/mke2fs.c:2557 misc/tune2fs.c:669 misc/tune2fs.c:683
+#: misc/mke2fs.c:2531 misc/mke2fs.c:2563 misc/tune2fs.c:669 misc/tune2fs.c:683
 #, c-format
 msgid "done\n"
 msgstr "klar\n"
 
-#: misc/mke2fs.c:2534
+#: misc/mke2fs.c:2540
 #, c-format
 msgid "Skipping journal creation in super-only mode\n"
-msgstr "Hoppar över att skapa jornal i läget endast super\n"
+msgstr "Hoppar över att skapa jornal i läget endast super\n"
 
-#: misc/mke2fs.c:2545
+#: misc/mke2fs.c:2551
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Skapar journal (%u block): "
 
-#: misc/mke2fs.c:2553
+#: misc/mke2fs.c:2559
 msgid ""
 "\n"
 "\twhile trying to create journal"
 msgstr ""
 "\n"
-"\tvid försök att skapa journal"
+"\tvid försök att skapa journal"
 
-#: misc/mke2fs.c:2564 misc/tune2fs.c:446
+#: misc/mke2fs.c:2570 misc/tune2fs.c:446
 #, c-format
 msgid ""
 "\n"
 "Error while enabling multiple mount protection feature."
 msgstr ""
 "\n"
-"Fel vid aktivering av funktionen för skydd mot flerfaldig montering."
+"Fel vid aktivering av funktionen för skydd mot flerfaldig montering."
 
-#: misc/mke2fs.c:2569
+#: misc/mke2fs.c:2575
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
-msgstr ""
-"Skydd mot flerfaldig montering är aktiverat med uppdateringsintervall %d "
-"sekunder.\n"
+msgstr "Skydd mot flerfaldig montering är aktiverat med uppdateringsintervall %d sekunder.\n"
 
-#: misc/mke2fs.c:2582
+#: misc/mke2fs.c:2588
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
-msgstr "Skriver superblock och filsystemsbokföringsinformation: "
+msgstr "Skriver superblock och filsystemsbokföringsinformation: "
 
-#: misc/mke2fs.c:2589
+#: misc/mke2fs.c:2595
 #, c-format
 msgid ""
 "\n"
@@ -4857,7 +4768,7 @@ msgstr ""
 "\n"
 "Varning, hade problem att skriva ut superblock."
 
-#: misc/mke2fs.c:2591
+#: misc/mke2fs.c:2597
 #, c-format
 msgid ""
 "done\n"
@@ -4869,7 +4780,7 @@ msgstr ""
 #: misc/mklost+found.c:50
 #, c-format
 msgid "Usage: mklost+found\n"
-msgstr "Användning: mklost+found\n"
+msgstr "Användning: mklost+found\n"
 
 #: misc/partinfo.c:41
 #, c-format
@@ -4880,26 +4791,26 @@ msgid ""
 "For example: %s /dev/hda\n"
 "\n"
 msgstr ""
-"Användning:  %s enhet...\n"
+"Användning:  %s enhet...\n"
 "\n"
-"Skriv ut partitionsinformationen för varje angiven enhet.\n"
+"Skriv ut partitionsinformationen för varje angiven enhet.\n"
 "Till exempel: %s /dev/hda\n"
 "\n"
 
 #: misc/partinfo.c:51
 #, c-format
 msgid "Cannot open %s: %s"
-msgstr "Kan inte öppna %s: %s"
+msgstr "Kan inte öppna %s: %s"
 
 #: misc/partinfo.c:57
 #, c-format
 msgid "Cannot get geometry of %s: %s"
-msgstr "Kan inte få geometrin för %s: %s"
+msgstr "Kan inte få geometrin för %s: %s"
 
 #: misc/partinfo.c:65
 #, c-format
 msgid "Cannot get size of %s: %s"
-msgstr "Kan inte få storlek av %s: %s"
+msgstr "Kan inte få storlek av %s: %s"
 
 #: misc/partinfo.c:71
 #, c-format
@@ -4908,37 +4819,36 @@ msgstr "%s: h=%3d s=%3d c=%4d   start=%8d storlek=%8lu slut=%8d\n"
 
 #: misc/tune2fs.c:107
 msgid "Please run e2fsck on the filesystem.\n"
-msgstr "Kör e2fsck på filsystemet.\n"
+msgstr "Kör e2fsck på filsystemet.\n"
 
 #: misc/tune2fs.c:116
 #, c-format
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
-"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p "
-"mmp_update_interval]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p mmp_update_interval]\n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[ -I new_inode_size ] device\n"
 msgstr ""
-"Användning: %s [-c max_antal_monteringar] [-e felbeteende] [-g grupp]\n"
+"Användning: %s [-c max_antal_monteringar] [-e felbeteende] [-g grupp]\n"
 "\t[-i intervall[d|m|w]] [-j] [-J journalflaggor] [-l]\n"
 "\t[-m reserverade_block_procent] [-o [^]monteringsflaggor[,...]]\n"
 "\t[-p mmp_uppdateringsintervall] [-r antal_reserverade_block]\n"
-"\t[-u användare] [-C antal_monteringar] [-L volymetikett]\n"
+"\t[-u användare] [-C antal_monteringar] [-L volymetikett]\n"
 "\t[-M senast_monterad_katalog] [-O [^]funktion[,...]]\n"
-"\t[-E utökad-flagga[,...]] [-T senaste_kontrolltid] [-U UUID]\n"
+"\t[-E utökad-flagga[,...]] [-T senaste_kontrolltid] [-U UUID]\n"
 "\t[ -I ny_inodstorlek ] enhet\n"
 
 #: misc/tune2fs.c:205
 msgid "while trying to open external journal"
-msgstr "vid försök att öppna extern journal"
+msgstr "vid försök att öppna extern journal"
 
 #: misc/tune2fs.c:210
 #, c-format
 msgid "%s is not a journal device.\n"
-msgstr "%s är inte en journalenhet.\n"
+msgstr "%s är inte en journalenhet.\n"
 
 #: misc/tune2fs.c:225
 msgid "Journal superblock not found!\n"
@@ -4946,7 +4856,7 @@ msgstr "Journalsuperblock inte funnet!\n"
 
 #: misc/tune2fs.c:236
 msgid "Filesystem's UUID not found on journal device.\n"
-msgstr "Filsystems UUID inte funnet på journalenhet.\n"
+msgstr "Filsystems UUID inte funnet på journalenhet.\n"
 
 #: misc/tune2fs.c:257
 msgid ""
@@ -4954,7 +4864,7 @@ msgid ""
 "Use -f option to remove missing journal device.\n"
 msgstr ""
 "Kan inte hitta journalenheten.   Den togs INTE bort.\n"
-"Använd flaggan -f för att ta bort en saknad journalenhet.\n"
+"Använd flaggan -f för att ta bort en saknad journalenhet.\n"
 
 #: misc/tune2fs.c:265
 msgid "Journal removed\n"
@@ -4962,11 +4872,11 @@ msgstr "Journal borttagen\n"
 
 #: misc/tune2fs.c:309
 msgid "while reading bitmaps"
-msgstr "vid läsning av bitkartor"
+msgstr "vid läsning av bitkartor"
 
 #: misc/tune2fs.c:317
 msgid "while clearing journal inode"
-msgstr "vid nollställning av journalinod"
+msgstr "vid nollställning av journalinod"
 
 #: misc/tune2fs.c:328
 msgid "while writing journal inode"
@@ -4975,33 +4885,33 @@ msgstr "vid skrivning av journalinod"
 #: misc/tune2fs.c:363
 #, c-format
 msgid "(and reboot afterwards!)\n"
-msgstr "(och starta om efteråt!)\n"
+msgstr "(och starta om efteråt!)\n"
 
 #: misc/tune2fs.c:396
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
-msgstr "Nollställning av filsystemsfunktion \"%s\" stöds inte.\n"
+msgstr "Nollställning av filsystemsfunktion \"%s\" stöds inte.\n"
 
 #: misc/tune2fs.c:402
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
-msgstr "Att sätta filsystemsfunktion \"%s\" stöds inte.\n"
+msgstr "Att sätta filsystemsfunktion \"%s\" stöds inte.\n"
 
 #: misc/tune2fs.c:411
 msgid ""
 "The has_journal feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"Flaggan has_journal får endast nollställas när filsystemet är\n"
-"omonterat eller monterat enbart för läsning.\n"
+"Flaggan has_journal får endast nollställas när filsystemet är\n"
+"omonterat eller monterat enbart för läsning.\n"
 
 #: misc/tune2fs.c:419
 msgid ""
 "The needs_recovery flag is set.  Please run e2fsck before clearing\n"
 "the has_journal flag.\n"
 msgstr ""
-"Flaggan needs_recovery är satt.  Kör e2fsck före flaggan has_journal\n"
-"nollställs.\n"
+"Flaggan needs_recovery är satt.  Kör e2fsck före flaggan has_journal\n"
+"nollställs.\n"
 
 #: misc/tune2fs.c:438
 msgid ""
@@ -5009,44 +4919,42 @@ msgid ""
 "be set if the filesystem is mounted or\n"
 "read-only.\n"
 msgstr ""
-"Funktionen för skydd mot flerfaldig montering\n"
-"kan inte sättas på om filsystemet är monterat\n"
+"Funktionen för skydd mot flerfaldig montering\n"
+"kan inte sättas på om filsystemet är monterat\n"
 "eller skrivskyddat.\n"
 
 #: misc/tune2fs.c:456
 #, c-format
 msgid "Multiple mount protection has been enabled with update interval %ds.\n"
-msgstr ""
-"Skydd mot flerfaldig montering har aktiverats med uppdateringsintervallet %d "
-"s.\n"
+msgstr "Skydd mot flerfaldig montering har aktiverats med uppdateringsintervallet %d s.\n"
 
 #: misc/tune2fs.c:465
 msgid ""
 "The multiple mount protection feature cannot\n"
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
-"Funktionen för skydd mot flerfaldig montering kan inte\n"
-"avaktiveras om filsystemet är skrivskyddat.\n"
+"Funktionen för skydd mot flerfaldig montering kan inte\n"
+"avaktiveras om filsystemet är skrivskyddat.\n"
 
 #: misc/tune2fs.c:473
 msgid "Error while reading bitmaps\n"
-msgstr "Fel vid läsning av bitkartor\n"
+msgstr "Fel vid läsning av bitkartor\n"
 
 #: misc/tune2fs.c:482
 #, c-format
 msgid "Magic number in MMP block does not match. expected: %x, actual: %x\n"
-msgstr "Magiskt tal i MMP-block stämmer inte.  förväntat: %x, faktiskt: %x\n"
+msgstr "Magiskt tal i MMP-block stämmer inte.  förväntat: %x, faktiskt: %x\n"
 
 #: misc/tune2fs.c:487
 msgid "while reading MMP block."
-msgstr "vid läsning av MMP-block."
+msgstr "vid läsning av MMP-block."
 
 #: misc/tune2fs.c:519
 msgid ""
 "Clearing the flex_bg flag would cause the the filesystem to be\n"
 "inconsistent.\n"
 msgstr ""
-"Att nollställa flaggan flex_bg skulle få filsystemet att bli\n"
+"Att nollställa flaggan flex_bg skulle få filsystemet att bli\n"
 "inkonsistent.\n"
 
 #: misc/tune2fs.c:530
@@ -5054,8 +4962,8 @@ msgid ""
 "The huge_file feature may only be cleared when the filesystem is\n"
 "unmounted or mounted read-only.\n"
 msgstr ""
-"Flaggan huge_file får endast nollställas när filsystemet är\n"
-"omonterat eller monterat enbart för läsning.\n"
+"Flaggan huge_file får endast nollställas när filsystemet är\n"
+"omonterat eller monterat enbart för läsning.\n"
 
 #: misc/tune2fs.c:590
 msgid ""
@@ -5063,7 +4971,7 @@ msgid ""
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 "\n"
-"Varning: flaggan \"^quota\" åsidosätter \"-Q\"-argument.\n"
+"Varning: flaggan \"^quota\" åsidosätter \"-Q\"-argument.\n"
 
 #: misc/tune2fs.c:635
 msgid "The filesystem already has a journal.\n"
@@ -5076,17 +4984,17 @@ msgid ""
 "\twhile trying to open journal on %s\n"
 msgstr ""
 "\n"
-"\tvid försök att öppna journal på %s\n"
+"\tvid försök att öppna journal på %s\n"
 
 #: misc/tune2fs.c:657
 #, c-format
 msgid "Creating journal on device %s: "
-msgstr "Skapar journal på enhet %s: "
+msgstr "Skapar journal på enhet %s: "
 
 #: misc/tune2fs.c:665
 #, c-format
 msgid "while adding filesystem to journal on %s"
-msgstr "vid tillägg av filsystem till journal på %s"
+msgstr "vid tillägg av filsystem till journal på %s"
 
 #: misc/tune2fs.c:671
 msgid "Creating journal inode: "
@@ -5098,19 +5006,18 @@ msgid ""
 "\twhile trying to create journal file"
 msgstr ""
 "\n"
-"\tvid försök att skapa journalfil"
+"\tvid försök att skapa journalfil"
 
-#: misc/tune2fs.c:763
+#: misc/tune2fs.c:754
 msgid "Couldn't allocate memory to parse quota options!\n"
-msgstr "Kunde inte allokera minne för att tolka kvotflaggor!\n"
+msgstr "Kunde inte allokera minne för att tolka kvotflaggor!\n"
 
-#: misc/tune2fs.c:785
+#: misc/tune2fs.c:776
 msgid ""
 "\n"
 "Bad quota options specified.\n"
 "\n"
-"Following valid quota options are available (pass by separating with "
-"comma):\n"
+"Following valid quota options are available (pass by separating with comma):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
@@ -5119,109 +5026,103 @@ msgstr ""
 "\n"
 "Felaktigt kvotalternativ angivet.\n"
 "\n"
-"Följande giltiga kvotalternativ finns (skicka dem separerade med "
-"kommatecken):\n"
+"Följande giltiga kvotalternativ finns (skicka dem separerade med kommatecken):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:846
+#: misc/tune2fs.c:837
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Kunde inte tolka datum-/tidsangivelse: %s"
 
-#: misc/tune2fs.c:870 misc/tune2fs.c:883
+#: misc/tune2fs.c:861 misc/tune2fs.c:874
 #, c-format
 msgid "bad mounts count - %s"
 msgstr "felaktigt antal monteringar - %s"
 
-#: misc/tune2fs.c:899
+#: misc/tune2fs.c:890
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "felaktigt felbeteende - %s"
 
-#: misc/tune2fs.c:926
+#: misc/tune2fs.c:917
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "felaktigt gid/gruppnamn - %s"
 
-#: misc/tune2fs.c:959
+#: misc/tune2fs.c:950
 #, c-format
 msgid "bad interval - %s"
 msgstr "felaktigt intervall - %s"
 
-#: misc/tune2fs.c:988
+#: misc/tune2fs.c:979
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "felaktig andel reserverade block - %s"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:994
 msgid "-o may only be specified once"
-msgstr "-o får endast anges en gång"
+msgstr "-o får endast anges en gång"
 
-#: misc/tune2fs.c:1012
+#: misc/tune2fs.c:1003
 msgid "-O may only be specified once"
-msgstr "-O får endast anges en gång"
+msgstr "-O får endast anges en gång"
 
-#: misc/tune2fs.c:1027
+#: misc/tune2fs.c:1018
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "felaktigt antal reserverade block - %s"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1047
 #, c-format
 msgid "bad uid/user name - %s"
-msgstr "felagtigt uid/användarnamn - %s"
+msgstr "felagtigt uid/användarnamn - %s"
 
-#: misc/tune2fs.c:1073
+#: misc/tune2fs.c:1064
 #, c-format
 msgid "bad inode size - %s"
 msgstr "felaktig inodsstorlek - %s"
 
-#: misc/tune2fs.c:1080
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Inode size must be a power of two- %s"
-msgstr "Inodsstorlek måste vara en multipel av två- %s"
+msgstr "Inodsstorlek måste vara en multipel av två- %s"
 
-#: misc/tune2fs.c:1174
+#: misc/tune2fs.c:1165
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
-msgstr "mmp_update_interval är för stort: %lu\n"
+msgstr "mmp_update_interval är för stort: %lu\n"
 
-#: misc/tune2fs.c:1179
+#: misc/tune2fs.c:1170
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
-msgid_plural ""
-"Setting multiple mount protection update interval to %lu seconds\n"
-msgstr[0] ""
-"Sätter uppdateringsintervall för skydd mot flerfaldig montering till %lu "
-"sekund\n"
-msgstr[1] ""
-"Sätter uppdateringsintervall för skydd mot flerfaldig montering till %lu "
-"sekunder\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Sätter uppdateringsintervall för skydd mot flerfaldig montering till %lu sekund\n"
+msgstr[1] "Sätter uppdateringsintervall för skydd mot flerfaldig montering till %lu sekunder\n"
 
-#: misc/tune2fs.c:1202
+#: misc/tune2fs.c:1193
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Ogiltig RAID-kliv: %s\n"
 
-#: misc/tune2fs.c:1217
+#: misc/tune2fs.c:1208
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Ogiltig RAID-remsbredd: %s\n"
 
-#: misc/tune2fs.c:1232
+#: misc/tune2fs.c:1223
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Ogiltig hash-algoritm: %s\n"
 
-#: misc/tune2fs.c:1238
+#: misc/tune2fs.c:1229
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
-msgstr "Sätter standardhashalgoritm till %s (%d)\n"
+msgstr "Sätter standardhashalgoritm till %s (%d)\n"
 
-#: misc/tune2fs.c:1257
+#: misc/tune2fs.c:1248
 #, c-format
 msgid ""
 "\n"
@@ -5242,137 +5143,135 @@ msgstr ""
 "\n"
 "Felaktiga flaggor angivna.\n"
 "\n"
-"Utökade flaggor separeras med komman, och kan ta ett argument som avdelas "
-"med\n"
+"Utökade flaggor separeras med komman, och kan ta ett argument som avdelas med\n"
 "\tett likhetstecken (\"=\").\n"
 "\n"
-"Giltiga utökade flaggor är:\n"
+"Giltiga utökade flaggor är:\n"
 "\tclear_mmp\n"
 "\thash_alg=<hash-algoritm>\n"
-"        mount_opts=<utökade standardmonteringsflaggor>\n"
+"        mount_opts=<utökade standardmonteringsflaggor>\n"
 "\tstride=<RAID-styckestorlek per disk i block>\n"
-"\tstripe_width=<RAID-kliv·datadiskar i block>\n"
+"\tstripe_width=<RAID-kliv·datadiskar i block>\n"
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:1723
+#: misc/tune2fs.c:1714
 msgid "Failed to read inode bitmap\n"
-msgstr "Misslyckades att läsa inodsbitkarta\n"
+msgstr "Misslyckades att läsa inodsbitkarta\n"
 
-#: misc/tune2fs.c:1728
+#: misc/tune2fs.c:1719
 msgid "Failed to read block bitmap\n"
-msgstr "Misslyckades att läsa blockbitkarta\n"
+msgstr "Misslyckades att läsa blockbitkarta\n"
 
-#: misc/tune2fs.c:1745 resize/resize2fs.c:784
+#: misc/tune2fs.c:1736 resize/resize2fs.c:802
 msgid "blocks to be moved"
 msgstr "block att flytta"
 
-#: misc/tune2fs.c:1748
+#: misc/tune2fs.c:1739
 msgid "Failed to allocate block bitmap when increasing inode size\n"
-msgstr "Kunde inte allokera blockbitkarta när inodsstorleken ökades\n"
+msgstr "Kunde inte allokera blockbitkarta när inodsstorleken ökades\n"
 
-#: misc/tune2fs.c:1754
+#: misc/tune2fs.c:1745
 msgid "Not enough space to increase inode size \n"
-msgstr "Inte tillräckligt med utrymme för att öka inodsstorleken \n"
+msgstr "Inte tillräckligt med utrymme för att öka inodsstorleken \n"
 
-#: misc/tune2fs.c:1759
+#: misc/tune2fs.c:1750
 msgid "Failed to relocate blocks during inode resize \n"
-msgstr "Misslyckades omlokalisera block under storleksändring av inoder \n"
+msgstr "Misslyckades omlokalisera block under storleksändring av inoder \n"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1782
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
-"Fel när storleken på inoder ändrades.\n"
-"Kör e2undo för att göra filsystemsändringarna ogjorda. \n"
+"Fel när storleken på inoder ändrades.\n"
+"Kör e2undo för att göra filsystemsändringarna ogjorda. \n"
 
-#: misc/tune2fs.c:1818
+#: misc/tune2fs.c:1809
 msgid "Couldn't allocate memory for tdb filename\n"
-msgstr "Kunde inte allokera minne för tdb-filnamn\n"
+msgstr "Kunde inte allokera minne för tdb-filnamn\n"
 
-#: misc/tune2fs.c:1840
+#: misc/tune2fs.c:1831
 #, c-format
 msgid "while trying to delete %s"
-msgstr "vid försök att ta bort %s"
+msgstr "vid försök att ta bort %s"
 
-#: misc/tune2fs.c:1850
+#: misc/tune2fs.c:1841
 #, c-format
 msgid ""
 "To undo the tune2fs operation please run the command\n"
 "    e2undo %s %s\n"
 "\n"
 msgstr ""
-"För att göra tune2fs-operationen ogjord, kör kommandot\n"
+"För att göra tune2fs-operationen ogjord, kör kommandot\n"
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/tune2fs.c:1919
+#: misc/tune2fs.c:1910
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
-"MMP-blockets magiska tal är felaktigt.  Försök att rätta det genom att "
-"köra:\n"
+"MMP-blockets magiska tal är felaktigt.  Försök att rätta det genom att köra:\n"
 "\"e2fsck-f %s\"\n"
 
-#: misc/tune2fs.c:1937
+#: misc/tune2fs.c:1928
 #, c-format
 msgid "The inode size is already %lu\n"
-msgstr "Inodsstorleken är redan %lu\n"
+msgstr "Inodsstorleken är redan %lu\n"
 
-#: misc/tune2fs.c:1943
+#: misc/tune2fs.c:1934
 #, c-format
 msgid "Shrinking the inode size is not supported\n"
-msgstr "Att krympa inodsstorleken stöds inte.\n"
+msgstr "Att krympa inodsstorleken stöds inte.\n"
 
-#: misc/tune2fs.c:1990
+#: misc/tune2fs.c:1981
 #, c-format
 msgid "Setting maximal mount count to %d\n"
-msgstr "Sätter max antal monteringar till %d\n"
+msgstr "Sätter max antal monteringar till %d\n"
 
-#: misc/tune2fs.c:1996
+#: misc/tune2fs.c:1987
 #, c-format
 msgid "Setting current mount count to %d\n"
-msgstr "Sätter aktuellt antal monteringar till %d\n"
+msgstr "Sätter aktuellt antal monteringar till %d\n"
 
-#: misc/tune2fs.c:2001
+#: misc/tune2fs.c:1992
 #, c-format
 msgid "Setting error behavior to %d\n"
-msgstr "Sätter felbeteende till %d\n"
+msgstr "Sätter felbeteende till %d\n"
 
-#: misc/tune2fs.c:2006
+#: misc/tune2fs.c:1997
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
-msgstr "Sätter gid för reserverade block till %lu\n"
+msgstr "Sätter gid för reserverade block till %lu\n"
 
-#: misc/tune2fs.c:2011
+#: misc/tune2fs.c:2002
 #, c-format
 msgid "interval between checks is too big (%lu)"
-msgstr "intervall mellan kontroller är för stort (%lu)"
+msgstr "intervall mellan kontroller är för stort (%lu)"
 
-#: misc/tune2fs.c:2018
+#: misc/tune2fs.c:2009
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
-msgstr "Sätter intervall mellan kontroller till %lu sekunder\n"
+msgstr "Sätter intervall mellan kontroller till %lu sekunder\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2016
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
-msgstr "Sätter procent reserverade block till %g %% (%llu block)\n"
+msgstr "Sätter procent reserverade block till %g %% (%llu block)\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2022
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
-msgstr "antal reserverade block för stort (%llu)"
+msgstr "antal reserverade block för stort (%llu)"
 
-#: misc/tune2fs.c:2038
+#: misc/tune2fs.c:2029
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
-msgstr "Sätter antal reserverade block till %llu\n"
+msgstr "Sätter antal reserverade block till %llu\n"
 
-#: misc/tune2fs.c:2044
+#: misc/tune2fs.c:2035
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -5380,91 +5279,90 @@ msgstr ""
 "\n"
 "Filsystemet har redan glesa superblock.\n"
 
-#: misc/tune2fs.c:2051
+#: misc/tune2fs.c:2042
 #, c-format
 msgid ""
 "\n"
 "Sparse superblock flag set.  %s"
 msgstr ""
 "\n"
-"Flaggan för glesa superblock satt.  %s"
+"Flaggan för glesa superblock satt.  %s"
 
-#: misc/tune2fs.c:2056
+#: misc/tune2fs.c:2047
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
 msgstr ""
 "\n"
-"Nollställning av superflaggan gles stöds inte.\n"
+"Nollställning av superflaggan gles stöds inte.\n"
 
-#: misc/tune2fs.c:2064
+#: misc/tune2fs.c:2055
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
-msgstr "Sätter tidpunkt för senaste filsystemskontroll till %s\n"
+msgstr "Sätter tidpunkt för senaste filsystemskontroll till %s\n"
 
-#: misc/tune2fs.c:2070
+#: misc/tune2fs.c:2061
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
-msgstr "Sätter uid för reserverade block till %lu\n"
+msgstr "Sätter uid för reserverade block till %lu\n"
 
-#: misc/tune2fs.c:2102
+#: misc/tune2fs.c:2093
 msgid "Error in using clear_mmp. It must be used with -f\n"
-msgstr "Fel vid användning av clear_mmp.  Det måste användas med -f\n"
+msgstr "Fel vid användning av clear_mmp.  Det måste användas med -f\n"
 
-#: misc/tune2fs.c:2120
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
-msgstr "Kvotafunktionen kan endast ändras när filsystemet är omonterat.\n"
+#: misc/tune2fs.c:2111
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "Kvotafunktionen kan endast ändras när filsystemet är omonterat.\n"
 
-#: misc/tune2fs.c:2153
+#: misc/tune2fs.c:2144
 msgid "Invalid UUID format\n"
 msgstr "Ogiltigt UUID-format\n"
 
-#: misc/tune2fs.c:2166
+#: misc/tune2fs.c:2157
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
-msgstr "Inodsstorleken får endast ändras när filsystemet är omonterat.\n"
+msgstr "Inodsstorleken får endast ändras när filsystemet är omonterat.\n"
 
-#: misc/tune2fs.c:2174
+#: misc/tune2fs.c:2165
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
 msgstr ""
-"Att ändra inodsstorlek stöds inte för filsystem med funktionen flex_bg\n"
+"Att ändra inodsstorlek stöds inte för filsystem med funktionen flex_bg\n"
 "aktiverad.\n"
 
-#: misc/tune2fs.c:2187
+#: misc/tune2fs.c:2178
 #, c-format
 msgid "Setting inode size %lu\n"
-msgstr "Sätter inodsstorlek till %lu\n"
+msgstr "Sätter inodsstorlek till %lu\n"
 
-#: misc/tune2fs.c:2190
+#: misc/tune2fs.c:2181
 #, c-format
 msgid "Failed to change inode size\n"
-msgstr "Misslyckades att ändra inodsstorlek\n"
+msgstr "Misslyckades att ändra inodsstorlek\n"
 
-#: misc/tune2fs.c:2201
+#: misc/tune2fs.c:2192
 #, c-format
 msgid "Setting stride size to %d\n"
-msgstr "Sätter klivstorlek till %d\n"
+msgstr "Sätter klivstorlek till %d\n"
 
-#: misc/tune2fs.c:2206
+#: misc/tune2fs.c:2197
 #, c-format
 msgid "Setting stripe width to %d\n"
-msgstr "Sätter remsbredd till %d\n"
+msgstr "Sätter remsbredd till %d\n"
 
-#: misc/tune2fs.c:2213
+#: misc/tune2fs.c:2204
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
-msgstr "Sätter utökade standardmonteringsflaggor till \"%s\"\n"
+msgstr "Sätter utökade standardmonteringsflaggor till \"%s\"\n"
 
 #: misc/util.c:74
 msgid "Proceed anyway? (y,n) "
-msgstr "Fortsätt ändå? (j,n) "
+msgstr "Fortsätt ändå? (j,n) "
 
 #: misc/util.c:89
 #, c-format
 msgid "Could not stat %s --- %s\n"
-msgstr "Kunde inte ta status på %s --- %s\n"
+msgstr "Kunde inte ta status på %s --- %s\n"
 
 #: misc/util.c:92
 msgid ""
@@ -5477,32 +5375,32 @@ msgstr ""
 #: misc/util.c:103
 #, c-format
 msgid "%s is not a block special device.\n"
-msgstr "%s är inte en blockspecialenhet.\n"
+msgstr "%s är inte en blockspecialenhet.\n"
 
 #: misc/util.c:132
 #, c-format
 msgid "%s is entire device, not just one partition!\n"
-msgstr "%s är hela enheten, inte bara en partition!\n"
+msgstr "%s är hela enheten, inte bara en partition!\n"
 
 #: misc/util.c:154
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr "mke2fs framtvingat ändå.  Hoppas /etc/mtab är felaktig.\n"
+msgstr "mke2fs framtvingat ändå.  Hoppas /etc/mtab är felaktig.\n"
 
 # %s kan bli "filsystem" eller "journal".  Jag har lagt till "en"
-# respektive "ett" i översättningarna av dessa strängar istället.
+# respektive "ett" i översättningarna av dessa strängar istället.
 # Felrapporterat.
 #: misc/util.c:159
 #, c-format
 msgid "will not make a %s here!\n"
-msgstr "skapar inte %s här!\n"
+msgstr "skapar inte %s här!\n"
 
 #: misc/util.c:166
 msgid "mke2fs forced anyway.\n"
-msgstr "mke2fs framtvingad ändå.\n"
+msgstr "mke2fs framtvingad ändå.\n"
 
 #: misc/util.c:182
 msgid "Couldn't allocate memory to parse journal options!\n"
-msgstr "Kunde inte allokera minne för att tolka journalflaggor!\n"
+msgstr "Kunde inte allokera minne för att tolka journalflaggor!\n"
 
 #: misc/util.c:207
 #, c-format
@@ -5532,13 +5430,13 @@ msgstr ""
 "Felaktiga journalflaggor angivna.\n"
 "\n"
 "Journalflaggor separeras med kommatecken, och kan ta ett argument som\n"
-"\tavgränsas med ett likhetstecken (\"=\").\n"
+"\tavgränsas med ett likhetstecken (\"=\").\n"
 "\n"
-"Giltiga journalflaggor är:\n"
+"Giltiga journalflaggor är:\n"
 "\tsize=<journalstorlek i megabyte>\n"
 "\tenhet=<journalenhet>\n"
 "\n"
-"Journalstorleken måste vara mellan 1024 och 10240000 filsystemsblock.\n"
+"Journalstorleken måste vara mellan 1024 och 10240000 filsystemsblock.\n"
 "\n"
 
 #: misc/util.c:258
@@ -5547,7 +5445,7 @@ msgid ""
 "Filesystem too small for a journal\n"
 msgstr ""
 "\n"
-"Filsystem för litet för en journal\n"
+"Filsystem för litet för en journal\n"
 
 #: misc/util.c:265
 #, c-format
@@ -5557,7 +5455,7 @@ msgid ""
 "between 1024 and 10240000 blocks.  Aborting.\n"
 msgstr ""
 "\n"
-"Den begärda journalstorleken är %d block; den måste vara\n"
+"Den begärda journalstorleken är %d block; den måste vara\n"
 "mellan 1024 och 10240000 block.  Avbryter.\n"
 
 #: misc/util.c:273
@@ -5566,7 +5464,7 @@ msgid ""
 "Journal size too big for filesystem.\n"
 msgstr ""
 "\n"
-"Journalstorleken för stor för filsystem.\n"
+"Journalstorleken för stor för filsystem.\n"
 
 #: misc/util.c:287
 #, c-format
@@ -5575,12 +5473,12 @@ msgid ""
 "%g days, whichever comes first.  Use tune2fs -c or -i to override.\n"
 msgstr ""
 "Detta filsystem kommer automatiskt kontrolleras var %d montering eller\n"
-"%g dag, vilket som kommer först.  Använd tune2fs -c eller -i för att ändra.\n"
+"%g dag, vilket som kommer först.  Använd tune2fs -c eller -i för att ändra.\n"
 
 #: misc/uuidd.c:48
 #, c-format
 msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\n"
-msgstr "Användning: %s [-d] [-p pid-fil] [-s uttagssökväg] [-T tidsgräns]\n"
+msgstr "Användning: %s [-d] [-p pid-fil] [-s uttagssökväg] [-T tidsgräns]\n"
 
 #: misc/uuidd.c:50
 #, c-format
@@ -5606,21 +5504,21 @@ msgstr "skriv"
 
 #: misc/uuidd.c:199
 msgid "read count"
-msgstr "läsantal"
+msgstr "läsantal"
 
 #: misc/uuidd.c:205
 msgid "bad response length"
-msgstr "felaktig svarslängd"
+msgstr "felaktig svarslängd"
 
 #: misc/uuidd.c:270
 #, c-format
 msgid "uuidd daemon already running at pid %s\n"
-msgstr "uuidd-demonen som körs redan med pid %s\n"
+msgstr "uuidd-demonen som körs redan med pid %s\n"
 
 #: misc/uuidd.c:278
 #, c-format
 msgid "Couldn't create unix stream socket: %s"
-msgstr "Kunde inte skapa unix-strömuttag: %s"
+msgstr "Kunde inte skapa unix-strömuttag: %s"
 
 #: misc/uuidd.c:307
 #, c-format
@@ -5630,12 +5528,12 @@ msgstr "Kunde inte binda unix-uttag %s: %s\n"
 #: misc/uuidd.c:315
 #, c-format
 msgid "Couldn't listen on unix socket %s: %s\n"
-msgstr "Kunde inte lyssna på unix-uttag %s: %s\n"
+msgstr "Kunde inte lyssna på unix-uttag %s: %s\n"
 
 #: misc/uuidd.c:353
 #, c-format
 msgid "Error reading from client, len = %d\n"
-msgstr "Fel vid läsning från klient, len = %d\n"
+msgstr "Fel vid läsning från klient, len = %d\n"
 
 #: misc/uuidd.c:361
 #, c-format
@@ -5650,14 +5548,14 @@ msgstr "Genererade tids-UUID: %s\n"
 #: misc/uuidd.c:390
 #, c-format
 msgid "Generated random UUID: %s\n"
-msgstr "Genererade slumpmässigt UUID: %s\n"
+msgstr "Genererade slumpmässigt UUID: %s\n"
 
 #: misc/uuidd.c:399
 #, c-format
 msgid "Generated time UUID %s and subsequent UUID\n"
 msgid_plural "Generated time UUID %s and %d subsequent UUIDs\n"
-msgstr[0] "Genererade tids-UUID %s och efterföljande UUID\n"
-msgstr[1] "Genererade tids-UUID %s och %d efterföljande UUID:er\n"
+msgstr[0] "Genererade tids-UUID %s och efterföljande UUID\n"
+msgstr[1] "Genererade tids-UUID %s och %d efterföljande UUID:er\n"
 
 #: misc/uuidd.c:420
 #, c-format
@@ -5683,42 +5581,42 @@ msgstr "Fel vid anrop av uuidd-demonen (%s): %s\n"
 #, c-format
 msgid "%s and subsequent UUID\n"
 msgid_plural "%s and subsequent %d UUIDs\n"
-msgstr[0] "%s och efterföljande UUID\n"
-msgstr[1] "%s och efterföljande %d UUID:er\n"
+msgstr[0] "%s och efterföljande UUID\n"
+msgstr[1] "%s och efterföljande %d UUID:er\n"
 
 #: misc/uuidd.c:547
 #, c-format
 msgid "List of UUID's:\n"
-msgstr "Lista över UUID:er:\n"
+msgstr "Lista över UUID:er:\n"
 
 #: misc/uuidd.c:568
 #, c-format
 msgid "Unexpected reply length from server %d\n"
-msgstr "Oväntad svarslängd från servern %d\n"
+msgstr "Oväntad svarslängd från servern %d\n"
 
 #: misc/uuidd.c:585
 #, c-format
 msgid "Couldn't kill uuidd running at pid %d: %s\n"
-msgstr "Kunde inte döda uuidd som kör med pid %d: %s\n"
+msgstr "Kunde inte döda uuidd som kör med pid %d: %s\n"
 
 #: misc/uuidd.c:591
 #, c-format
 msgid "Killed uuidd running at pid %d\n"
-msgstr "Dödade uuidd som körde med pid %d\n"
+msgstr "Dödade uuidd som körde med pid %d\n"
 
 #: misc/uuidgen.c:32
 #, c-format
 msgid "Usage: %s [-r] [-t]\n"
-msgstr "Användning: %s [-r] [-t]\n"
+msgstr "Användning: %s [-r] [-t]\n"
 
 #: resize/extent.c:202
 msgid "# Extent dump:\n"
-msgstr "# Områdesdump:\n"
+msgstr "# Områdesdump:\n"
 
 #: resize/extent.c:203
 #, c-format
 msgid "#\tNum=%llu, Size=%llu, Cursor=%llu, Sorted=%llu\n"
-msgstr "#\tAntal=%llu, Storlek=%llu, Markör=%llu, Sorterad=%llu\n"
+msgstr "#\tAntal=%llu, Storlek=%llu, Markör=%llu, Sorterad=%llu\n"
 
 #: resize/main.c:43
 #, c-format
@@ -5726,13 +5624,12 @@ msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Användning: %s [-d felsökningflaggor] [-f] [-F] [-M] [-P] [-p] enhet "
-"[ny_storlek]\n"
+"Användning: %s [-d felsökningflaggor] [-f] [-F] [-M] [-P] [-p] enhet [ny_storlek]\n"
 "\n"
 
 #: resize/main.c:65
 msgid "Extending the inode table"
-msgstr "Utökar inodstabellen"
+msgstr "Utökar inodstabellen"
 
 #: resize/main.c:68
 msgid "Relocating blocks"
@@ -5740,7 +5637,7 @@ msgstr "Flyttar om block"
 
 #: resize/main.c:71
 msgid "Scanning inode table"
-msgstr "Söker igenom inodstabell"
+msgstr "Söker igenom inodstabell"
 
 #: resize/main.c:74
 msgid "Updating inode references"
@@ -5752,268 +5649,267 @@ msgstr "Flyttar inodstabell"
 
 #: resize/main.c:80
 msgid "Unknown pass?!?"
-msgstr "Okänt pass?!?"
+msgstr "Okänt pass?!?"
 
 #: resize/main.c:83
 #, c-format
 msgid "Begin pass %d (max = %lu)\n"
-msgstr "Börja pass %d (max = %lu)\n"
+msgstr "Börja pass %d (max = %lu)\n"
 
 #: resize/main.c:259
 #, c-format
 msgid "while opening %s"
-msgstr "när %s öppnades"
+msgstr "när %s öppnades"
 
 #: resize/main.c:267
 #, c-format
 msgid "while getting stat information for %s"
-msgstr "när statusinformation för %s hämtades"
+msgstr "när statusinformation för %s hämtades"
 
-#: resize/main.c:331
-#, c-format
-msgid ""
-"%s: The combination of flex_bg and\n"
-"\t!resize_inode features is not supported by resize2fs.\n"
-msgstr ""
-"%s: Kombinationen av funktionerna flex_bg och\n"
-"\t!resize_inode stöds inte av resize2fs.\n"
-
-#: resize/main.c:344 resize/main.c:452
+#: resize/main.c:325 resize/main.c:437
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
 msgstr ""
-"Kör \"e2fsck -f %s\" först.\n"
+"Kör \"e2fsck -f %s\" först.\n"
 "\n"
 
-#: resize/main.c:348
+#: resize/main.c:329
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
-msgstr "Uppskattad minsta storlek på filsystemet: %llu\n"
+msgstr "Uppskattad minsta storlek på filsystemet: %llu\n"
 
-#: resize/main.c:384
+#: resize/main.c:365
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Ogiltig ny storlek: %s\n"
 
-#: resize/main.c:392
+#: resize/main.c:381
 msgid "New size too large to be expressed in 32 bits\n"
-msgstr "Ny storlek för stor för att uttryckas i 32 bitar\n"
+msgstr "Ny storlek för stor för att uttryckas i 32 bitar\n"
 
-#: resize/main.c:404
+#: resize/main.c:389
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
-msgstr "Ny storlek mindre än minimum (%llu)\n"
+msgstr "Ny storlek mindre än minimum (%llu)\n"
 
-#: resize/main.c:410
+#: resize/main.c:395
 msgid "Invalid stride length"
-msgstr "Ogiltig stride-längd"
+msgstr "Ogiltig stride-längd"
 
-#: resize/main.c:434
+#: resize/main.c:419
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
 "You requested a new size of %llu blocks.\n"
 "\n"
 msgstr ""
-"Den rymmande partitionen (eller enheten) är bara %llu (%d k) block.\n"
-"Du begärde en ny storlek på %llu block.\n"
+"Den rymmande partitionen (eller enheten) är bara %llu (%d k) block.\n"
+"Du begärde en ny storlek på %llu block.\n"
 "\n"
 
-#: resize/main.c:441
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The filesystem is already %llu blocks long.  Nothing to do!\n"
 "\n"
 msgstr ""
-"Filsystemet är redan %llu block långt.  Inget behöver göras!\n"
+"Filsystemet är redan %llu block långt.  Inget behöver göras!\n"
 "\n"
 
-#: resize/main.c:456
+#: resize/main.c:457
+#, c-format
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
+msgstr ""
+"%s: Kombinationen av funktionerna flex_bg och\n"
+"\t!resize_inode stöds inte av resize2fs.\n"
+
+#: resize/main.c:463
 #, c-format
 msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
-msgstr "Ändrar storlek på filsystemet på %s till %llu (%d k) block.\n"
+msgstr "Ändrar storlek på filsystemet på %s till %llu (%d k) block.\n"
 
-#: resize/main.c:465
+#: resize/main.c:472
 #, c-format
 msgid "while trying to resize %s"
-msgstr "vid försök att ändra storlek på %s"
+msgstr "vid försök att ändra storlek på %s"
 
-#: resize/main.c:468
+#: resize/main.c:475
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
-"Kör \"e2fsck -fy %s\" för att laga filsystemet\n"
-"efter den avbrutna storleksändringen.\n"
+"Kör \"e2fsck -fy %s\" för att laga filsystemet\n"
+"efter den avbrutna storleksändringen.\n"
 
-#: resize/main.c:474
+#: resize/main.c:481
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu blocks long.\n"
 "\n"
 msgstr ""
-"Filsystemet på %s är nu %llu block långt.\n"
+"Filsystemet på %s är nu %llu block långt.\n"
 "\n"
 
-#: resize/main.c:489
+#: resize/main.c:496
 #, c-format
 msgid "while trying to truncate %s"
-msgstr "vid försök att korta av %s"
+msgstr "vid försök att korta av %s"
 
 #: resize/online.c:40
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
-msgstr "Filsystem på %s är monterat på %s, on-line-storleksändring krävs\n"
+msgstr "Filsystem på %s är monterat på %s, on-line-storleksändring krävs\n"
 
 #: resize/online.c:44
 msgid "On-line shrinking not supported"
-msgstr "Att krympa uppkopplat stödjs inte"
+msgstr "Att krympa uppkopplat stödjs inte"
 
-#: resize/online.c:63
+#: resize/online.c:69
 msgid "Filesystem does not support online resizing"
-msgstr "Filsystemet stödjer inte storleksändring uppkopplat"
+msgstr "Filsystemet stödjer inte storleksändring uppkopplat"
+
+#: resize/online.c:78
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr "Inte tillräckligt med reserverade gdt-block för storleksändring"
+
+#: resize/online.c:85
+msgid "Kernel does not support resizing a file system this large"
+msgstr "Kärnan stödjer inte ändring av storlek på så stora filsystem"
 
-#: resize/online.c:70
+#: resize/online.c:93
 #, c-format
 msgid "while trying to open mountpoint %s"
-msgstr "vid försök att öppna monteringspunkt %s"
+msgstr "vid försök att öppna monteringspunkt %s"
 
-#: resize/online.c:92 resize/online.c:116
+#: resize/online.c:115 resize/online.c:132
 msgid "Permission denied to resize filesystem"
-msgstr "Rättighet att ändra storlek på filsystem nekas"
+msgstr "Rättighet att ändra storlek på filsystem nekas"
 
-#: resize/online.c:95 resize/online.c:122
+#: resize/online.c:118 resize/online.c:138
 msgid "While checking for on-line resizing support"
-msgstr "Vid kontroll av stöd för storleksändring uppkopplat"
+msgstr "Vid kontroll av stöd för storleksändring uppkopplat"
 
-#: resize/online.c:107
-msgid "Kernel does not support resizing a file system this large"
-msgstr "Kärnan stödjer inte ändring av storlek på så stora filsystem"
-
-#: resize/online.c:119
+#: resize/online.c:135
 msgid "Kernel does not support online resizing"
-msgstr "Kärnan stödjer inte storleksändring uppkopplat"
+msgstr "Kärnan stödjer inte storleksändring uppkopplat"
 
-#: resize/online.c:152
+#: resize/online.c:168
 #, c-format
 msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
-msgstr "Utför en storleksändring on-line av %s till %llu (%d k) block.\n"
+msgstr "Utför en storleksändring on-line av %s till %llu (%d k) block.\n"
 
-#: resize/online.c:162
+#: resize/online.c:178
 msgid "While trying to extend the last group"
-msgstr "Vid försök att utöka den sista gruppen"
+msgstr "Vid försök att utöka den sista gruppen"
 
-#: resize/online.c:216
+#: resize/online.c:232
 #, c-format
 msgid "While trying to add group #%d"
-msgstr "Vid försök att öppna grupp nr. %d"
+msgstr "Vid försök att öppna grupp nr. %d"
 
-#: resize/online.c:227
+#: resize/online.c:243
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"Filsystemet på %s är monterat på %s, och storleksändring on-line stöds inte "
-"på detta system.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Filsystemet på %s är monterat på %s, och storleksändring on-line stöds inte på detta system.\n"
 
-#: resize/resize2fs.c:348
+#: resize/resize2fs.c:346
 #, c-format
 msgid "inodes (%llu) must be less than %u"
-msgstr "inoder (%llu) måste vara mindre än %u"
+msgstr "inoder (%llu) måste vara mindre än %u"
 
-#: resize/resize2fs.c:576
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "reserverade block"
 
-#: resize/resize2fs.c:789
+#: resize/resize2fs.c:807
 msgid "meta-data blocks"
 msgstr "metadatablock"
 
-#: resize/resize2fs.c:1735
+#: resize/resize2fs.c:1753
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
-msgstr "Skulle aldrig inträffa: storleksändringsinoden trasig!\n"
+msgstr "Skulle aldrig inträffa: storleksändringsinoden trasig!\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.42.4"
-msgstr "EXT2FS-bibliotek version 1.42.2"
+msgid "EXT2FS Library version 1.42.6"
+msgstr "EXT2FS-bibliotek version 1.42.6"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
-msgstr "Fel magiskt tal för ext2_filsys-post"
+msgstr "Fel magiskt tal för ext2_filsys-post"
 
 #: lib/ext2fs/ext2_err.c:13
 msgid "Wrong magic number for badblocks_list structure"
-msgstr "Fel magiskt tal för badblocks_list-post"
+msgstr "Fel magiskt tal för badblocks_list-post"
 
 #: lib/ext2fs/ext2_err.c:14
 msgid "Wrong magic number for badblocks_iterate structure"
-msgstr "Fel magiskt tal för badblocks_iterate-post"
+msgstr "Fel magiskt tal för badblocks_iterate-post"
 
 #: lib/ext2fs/ext2_err.c:15
 msgid "Wrong magic number for inode_scan structure"
-msgstr "Fel magiskt tal för inode_scan-post"
+msgstr "Fel magiskt tal för inode_scan-post"
 
 #: lib/ext2fs/ext2_err.c:16
 msgid "Wrong magic number for io_channel structure"
-msgstr "Fel magiskt tal för io_channel-post"
+msgstr "Fel magiskt tal för io_channel-post"
 
 #: lib/ext2fs/ext2_err.c:17
 msgid "Wrong magic number for unix io_channel structure"
-msgstr "Fel magiskt tal för unix-io_channel-post"
+msgstr "Fel magiskt tal för unix-io_channel-post"
 
 #: lib/ext2fs/ext2_err.c:18
 msgid "Wrong magic number for io_manager structure"
-msgstr "Fel magiskt tal för io_manager-post"
+msgstr "Fel magiskt tal för io_manager-post"
 
 #: lib/ext2fs/ext2_err.c:19
 msgid "Wrong magic number for block_bitmap structure"
-msgstr "Fel magiskt tal för block_bitmap-post"
+msgstr "Fel magiskt tal för block_bitmap-post"
 
 #: lib/ext2fs/ext2_err.c:20
 msgid "Wrong magic number for inode_bitmap structure"
-msgstr "Fel magiskt tal för inode_bitmap-post"
+msgstr "Fel magiskt tal för inode_bitmap-post"
 
 #: lib/ext2fs/ext2_err.c:21
 msgid "Wrong magic number for generic_bitmap structure"
-msgstr "Fel magiskt tal för generic_bitmap-post"
+msgstr "Fel magiskt tal för generic_bitmap-post"
 
 #: lib/ext2fs/ext2_err.c:22
 msgid "Wrong magic number for test io_channel structure"
-msgstr "Fel magiskt tal för test io_channel-post"
+msgstr "Fel magiskt tal för test io_channel-post"
 
 #: lib/ext2fs/ext2_err.c:23
 msgid "Wrong magic number for directory block list structure"
-msgstr "Fel magiskt tal för katalogenblocklistepost"
+msgstr "Fel magiskt tal för katalogenblocklistepost"
 
 #: lib/ext2fs/ext2_err.c:24
 msgid "Wrong magic number for icount structure"
-msgstr "Fel magiskt tal för icount-post"
+msgstr "Fel magiskt tal för icount-post"
 
 #: lib/ext2fs/ext2_err.c:25
 msgid "Wrong magic number for Powerquest io_channel structure"
-msgstr "Fel magiskt tal för PowerQuest-io_channel-post"
+msgstr "Fel magiskt tal för PowerQuest-io_channel-post"
 
 #: lib/ext2fs/ext2_err.c:26
 msgid "Wrong magic number for ext2 file structure"
-msgstr "Fel magiskt tal för ext2-filstruktur"
+msgstr "Fel magiskt tal för ext2-filstruktur"
 
 #: lib/ext2fs/ext2_err.c:27
 msgid "Wrong magic number for Ext2 Image Header"
-msgstr "Fel magiskt tal för ext2-avbildshuvud"
+msgstr "Fel magiskt tal för ext2-avbildshuvud"
 
 #: lib/ext2fs/ext2_err.c:28
 msgid "Wrong magic number for inode io_channel structure"
-msgstr "Fel magiskt tal för inods-io_channel-post"
+msgstr "Fel magiskt tal för inods-io_channel-post"
 
 #: lib/ext2fs/ext2_err.c:29
 msgid "Wrong magic number for ext4 extent handle"
-msgstr "Fel magiskt tal för ext4-utsträckningshandtag"
+msgstr "Fel magiskt tal för ext4-utsträckningshandtag"
 
 #: lib/ext2fs/ext2_err.c:30
 msgid "Bad magic number in super-block"
@@ -6021,15 +5917,15 @@ msgstr "Fel magiskt tal i superblocket"
 
 #: lib/ext2fs/ext2_err.c:31
 msgid "Filesystem revision too high"
-msgstr "Filesystemversionen är för hög"
+msgstr "Filesystemversionen är för hög"
 
 #: lib/ext2fs/ext2_err.c:32
 msgid "Attempt to write to filesystem opened read-only"
-msgstr "Försök att skriva till ett filsystem öppnat skrivskyddat"
+msgstr "Försök att skriva till ett filsystem öppnat skrivskyddat"
 
 #: lib/ext2fs/ext2_err.c:33
 msgid "Can't read group descriptors"
-msgstr "Kan inte läsa gruppbeskrivare"
+msgstr "Kan inte läsa gruppbeskrivare"
 
 #: lib/ext2fs/ext2_err.c:34
 msgid "Can't write group descriptors"
@@ -6037,15 +5933,15 @@ msgstr "Kan inte skriva gruppbeskrivare"
 
 #: lib/ext2fs/ext2_err.c:35
 msgid "Corrupt group descriptor: bad block for block bitmap"
-msgstr "Trasig gruppbeskrivare: felaktigt block för blockbitkarta"
+msgstr "Trasig gruppbeskrivare: felaktigt block för blockbitkarta"
 
 #: lib/ext2fs/ext2_err.c:36
 msgid "Corrupt group descriptor: bad block for inode bitmap"
-msgstr "Trasig gruppbeskrivare: felaktigt block för inodsbitkarta"
+msgstr "Trasig gruppbeskrivare: felaktigt block för inodsbitkarta"
 
 #: lib/ext2fs/ext2_err.c:37
 msgid "Corrupt group descriptor: bad block for inode table"
-msgstr "Trasig gruppbeskrivare: dåligt block för inodstabell"
+msgstr "Trasig gruppbeskrivare: dåligt block för inodstabell"
 
 #: lib/ext2fs/ext2_err.c:38
 msgid "Can't write an inode bitmap"
@@ -6053,7 +5949,7 @@ msgstr "Kan inte skriva en inodsbitkarta"
 
 #: lib/ext2fs/ext2_err.c:39
 msgid "Can't read an inode bitmap"
-msgstr "Kan inte läsa en inodsbitkarta"
+msgstr "Kan inte läsa en inodsbitkarta"
 
 #: lib/ext2fs/ext2_err.c:40
 msgid "Can't write an block bitmap"
@@ -6061,7 +5957,7 @@ msgstr "Kan inte skriva en blockbitkarta"
 
 #: lib/ext2fs/ext2_err.c:41
 msgid "Can't read an block bitmap"
-msgstr "Kan inte läsa en blockbitkarta"
+msgstr "Kan inte läsa en blockbitkarta"
 
 #: lib/ext2fs/ext2_err.c:42
 msgid "Can't write an inode table"
@@ -6069,15 +5965,15 @@ msgstr "Kan inte skriva en inodstabell"
 
 #: lib/ext2fs/ext2_err.c:43
 msgid "Can't read an inode table"
-msgstr "Kan inte läsa en inodstabell"
+msgstr "Kan inte läsa en inodstabell"
 
 #: lib/ext2fs/ext2_err.c:44
 msgid "Can't read next inode"
-msgstr "Kan inte läsa nästa inod"
+msgstr "Kan inte läsa nästa inod"
 
 #: lib/ext2fs/ext2_err.c:45
 msgid "Filesystem has unexpected block size"
-msgstr "Filsystemet har oväntad blockstorlek."
+msgstr "Filsystemet har oväntad blockstorlek."
 
 #: lib/ext2fs/ext2_err.c:46
 msgid "EXT2 directory corrupted"
@@ -6085,12 +5981,11 @@ msgstr "EXT2-katalog skadad"
 
 #: lib/ext2fs/ext2_err.c:47
 msgid "Attempt to read block from filesystem resulted in short read"
-msgstr "Försök att läsa block från filsystemet resulterade i en kort läsning"
+msgstr "Försök att läsa block från filsystemet resulterade i en kort läsning"
 
 #: lib/ext2fs/ext2_err.c:48
 msgid "Attempt to write block to filesystem resulted in short write"
-msgstr ""
-"Försök att skriva block till filsystemet resulterade i en kort skrivning"
+msgstr "Försök att skriva block till filsystemet resulterade i en kort skrivning"
 
 #: lib/ext2fs/ext2_err.c:49
 msgid "No free space in the directory"
@@ -6098,19 +5993,19 @@ msgstr "Inget ledigt utrymme i katalogen"
 
 #: lib/ext2fs/ext2_err.c:50
 msgid "Inode bitmap not loaded"
-msgstr "Inodsbitkartan inte inläst"
+msgstr "Inodsbitkartan inte inläst"
 
 #: lib/ext2fs/ext2_err.c:51
 msgid "Block bitmap not loaded"
-msgstr "Blockbitkartan inte inläst"
+msgstr "Blockbitkartan inte inläst"
 
 #: lib/ext2fs/ext2_err.c:52
 msgid "Illegal inode number"
-msgstr "Otillåtet inodsnummer"
+msgstr "Otillåtet inodsnummer"
 
 #: lib/ext2fs/ext2_err.c:53
 msgid "Illegal block number"
-msgstr "Otillåtet blocknummer"
+msgstr "Otillåtet blocknummer"
 
 #: lib/ext2fs/ext2_err.c:54
 msgid "Internal error in ext2fs_expand_dir"
@@ -6118,65 +6013,63 @@ msgstr "Internt fel i ext2fs_expand_dir"
 
 #: lib/ext2fs/ext2_err.c:55
 msgid "Not enough space to build proposed filesystem"
-msgstr "Inte tillräckligt med utrymme för att bygga det föreslagna filsystemet"
+msgstr "Inte tillräckligt med utrymme för att bygga det föreslagna filsystemet"
 
 #: lib/ext2fs/ext2_err.c:56
 msgid "Illegal block number passed to ext2fs_mark_block_bitmap"
-msgstr "Otillåtet blocknummer skickat till ext2fs_mark_block_bitmap"
+msgstr "Otillåtet blocknummer skickat till ext2fs_mark_block_bitmap"
 
 #: lib/ext2fs/ext2_err.c:57
 msgid "Illegal block number passed to ext2fs_unmark_block_bitmap"
-msgstr "Otillåtet blocknummer skickat till ext2fs_unmark_block_bitmap"
+msgstr "Otillåtet blocknummer skickat till ext2fs_unmark_block_bitmap"
 
 #: lib/ext2fs/ext2_err.c:58
 msgid "Illegal block number passed to ext2fs_test_block_bitmap"
-msgstr "Otillåtet blocknummer skickat till ext2fs_test_block_bitmap"
+msgstr "Otillåtet blocknummer skickat till ext2fs_test_block_bitmap"
 
 #: lib/ext2fs/ext2_err.c:59
 msgid "Illegal inode number passed to ext2fs_mark_inode_bitmap"
-msgstr "Otillåtet inodsnummer skickat till ext2fs_mark_inode_bitmap"
+msgstr "Otillåtet inodsnummer skickat till ext2fs_mark_inode_bitmap"
 
 #: lib/ext2fs/ext2_err.c:60
 msgid "Illegal inode number passed to ext2fs_unmark_inode_bitmap"
-msgstr "Otillåtet inodsnummer skickat till ext2fs_unmark_inode_bitmap"
+msgstr "Otillåtet inodsnummer skickat till ext2fs_unmark_inode_bitmap"
 
 #: lib/ext2fs/ext2_err.c:61
 msgid "Illegal inode number passed to ext2fs_test_inode_bitmap"
-msgstr "Otillåtet inodsnummer skickat till ext2fs_test_inode_bitmap"
+msgstr "Otillåtet inodsnummer skickat till ext2fs_test_inode_bitmap"
 
 #: lib/ext2fs/ext2_err.c:62
 msgid "Attempt to fudge end of block bitmap past the real end"
-msgstr ""
-"Försök att fuska till slutet av blockbitkartan bortom det riktiga slutet"
+msgstr "Försök att fuska till slutet av blockbitkartan bortom det riktiga slutet"
 
 #: lib/ext2fs/ext2_err.c:63
 msgid "Attempt to fudge end of inode bitmap past the real end"
-msgstr ""
-"Försök att fuska till slutet av inodsbitkartan bortom det riktiga slutet"
+msgstr "Försök att fuska till slutet av inodsbitkartan bortom det riktiga slutet"
 
 #: lib/ext2fs/ext2_err.c:64
 msgid "Illegal indirect block found"
-msgstr "Otillåtet indirektblock hittat"
+msgstr "Otillåtet indirektblock hittat"
 
 #: lib/ext2fs/ext2_err.c:65
 msgid "Illegal doubly indirect block found"
-msgstr "Otillåtet dubbelt indirektblock hittat"
+msgstr "Otillåtet dubbelt indirektblock hittat"
 
 #: lib/ext2fs/ext2_err.c:66
 msgid "Illegal triply indirect block found"
-msgstr "Otillåtet trippelt indirektblock hittat"
+msgstr "Otillåtet trippelt indirektblock hittat"
 
 #: lib/ext2fs/ext2_err.c:67
 msgid "Block bitmaps are not the same"
-msgstr "Blockbitkartorna är inte desamma"
+msgstr "Blockbitkartorna är inte desamma"
 
 #: lib/ext2fs/ext2_err.c:68
 msgid "Inode bitmaps are not the same"
-msgstr "Inodsbitkartorna är inte desamma"
+msgstr "Inodsbitkartorna är inte desamma"
 
 #: lib/ext2fs/ext2_err.c:69
 msgid "Illegal or malformed device name"
-msgstr "Otillåtet eller felformat enhetsnamn"
+msgstr "Otillåtet eller felformat enhetsnamn"
 
 #: lib/ext2fs/ext2_err.c:70
 msgid "A block group is missing an inode table"
@@ -6184,43 +6077,43 @@ msgstr "En blockgrupp saknar en inodstabell"
 
 #: lib/ext2fs/ext2_err.c:71
 msgid "The ext2 superblock is corrupt"
-msgstr "Ext2-superblocket är skadat"
+msgstr "Ext2-superblocket är skadat"
 
 #: lib/ext2fs/ext2_err.c:72
 msgid "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"
-msgstr "Otillåtet generiskt bittal skickat till ext2fs_mark_generic_bitmap"
+msgstr "Otillåtet generiskt bittal skickat till ext2fs_mark_generic_bitmap"
 
 #: lib/ext2fs/ext2_err.c:73
 msgid "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"
-msgstr "Otillåtet generiskt bittal skickat till ext2fs_unmark_generic_bitmap"
+msgstr "Otillåtet generiskt bittal skickat till ext2fs_unmark_generic_bitmap"
 
 #: lib/ext2fs/ext2_err.c:74
 msgid "Illegal generic bit number passed to ext2fs_test_generic_bitmap"
-msgstr "Otillåtet generiskt bittal skickat till ext2fs_test_generic_bitmap"
+msgstr "Otillåtet generiskt bittal skickat till ext2fs_test_generic_bitmap"
 
 #: lib/ext2fs/ext2_err.c:75
 msgid "Too many symbolic links encountered."
-msgstr "Alltför många symboliska länkar påträffade."
+msgstr "Alltför många symboliska länkar påträffade."
 
 #: lib/ext2fs/ext2_err.c:76
 msgid "The callback function will not handle this case"
-msgstr "Återanropsfunktionen kommer inte att hantera detta fall"
+msgstr "Återanropsfunktionen kommer inte att hantera detta fall"
 
 #: lib/ext2fs/ext2_err.c:77
 msgid "The inode is from a bad block in the inode table"
-msgstr "Inoden är från ett dåligt block i inodstabellen"
+msgstr "Inoden är från ett dåligt block i inodstabellen"
 
 #: lib/ext2fs/ext2_err.c:78
 msgid "Filesystem has unsupported feature(s)"
-msgstr "Filsystemet har funktioner som inte stödjs"
+msgstr "Filsystemet har funktioner som inte stödjs"
 
 #: lib/ext2fs/ext2_err.c:79
 msgid "Filesystem has unsupported read-only feature(s)"
-msgstr "Filsystemet har endast-läsbart-funktioner som inte stödjs"
+msgstr "Filsystemet har endast-läsbart-funktioner som inte stödjs"
 
 #: lib/ext2fs/ext2_err.c:80
 msgid "IO Channel failed to seek on read or write"
-msgstr "IO-kanalen misslyckades söka vid läsning eller skrivning"
+msgstr "IO-kanalen misslyckades söka vid läsning eller skrivning"
 
 #: lib/ext2fs/ext2_err.c:81
 msgid "Memory allocation failed"
@@ -6240,11 +6133,11 @@ msgstr "Kunde inte allokera inoder i ext2-filsystem"
 
 #: lib/ext2fs/ext2_err.c:85
 msgid "Ext2 inode is not a directory"
-msgstr "Ext2-inod är inte en katalog"
+msgstr "Ext2-inod är inte en katalog"
 
 #: lib/ext2fs/ext2_err.c:86
 msgid "Too many references in table"
-msgstr "För många referenser i tabellen"
+msgstr "För många referenser i tabellen"
 
 #: lib/ext2fs/ext2_err.c:87
 msgid "File not found by ext2_lookup"
@@ -6252,7 +6145,7 @@ msgstr "Filen hittades inte av ext2_lookup"
 
 #: lib/ext2fs/ext2_err.c:88
 msgid "File open read-only"
-msgstr "Filen öppnas skrivskyddad"
+msgstr "Filen öppnas skrivskyddad"
 
 #: lib/ext2fs/ext2_err.c:89
 msgid "Ext2 directory block not found"
@@ -6268,15 +6161,15 @@ msgstr "Oimplementerad ext2-biblioteksfunktion"
 
 #: lib/ext2fs/ext2_err.c:92
 msgid "User cancel requested"
-msgstr "Användarannullering begärd"
+msgstr "Användarannullering begärd"
 
 #: lib/ext2fs/ext2_err.c:93
 msgid "Ext2 file too big"
-msgstr "Ext2-fil för stor"
+msgstr "Ext2-fil för stor"
 
 #: lib/ext2fs/ext2_err.c:94
 msgid "Supplied journal device not a block device"
-msgstr "Angiven journalenhet är inte en blockenhet"
+msgstr "Angiven journalenhet är inte en blockenhet"
 
 #: lib/ext2fs/ext2_err.c:95
 msgid "Journal superblock not found"
@@ -6284,15 +6177,15 @@ msgstr "Journalsuperblock inte funnet"
 
 #: lib/ext2fs/ext2_err.c:96
 msgid "Journal must be at least 1024 blocks"
-msgstr "Journalen måste vara minst 1024 block"
+msgstr "Journalen måste vara minst 1024 block"
 
 #: lib/ext2fs/ext2_err.c:97
 msgid "Unsupported journal version"
-msgstr "Ej stödd journalversion"
+msgstr "Ej stödd journalversion"
 
 #: lib/ext2fs/ext2_err.c:98
 msgid "Error loading external journal"
-msgstr "Fel vid läsning av en extern journal"
+msgstr "Fel vid läsning av en extern journal"
 
 #: lib/ext2fs/ext2_err.c:99
 msgid "Journal not found"
@@ -6300,31 +6193,31 @@ msgstr "Journalen inte funnen"
 
 #: lib/ext2fs/ext2_err.c:100
 msgid "Directory hash unsupported"
-msgstr "Katalog-hash stödjs inte"
+msgstr "Katalog-hash stödjs inte"
 
 #: lib/ext2fs/ext2_err.c:101
 msgid "Illegal extended attribute block number"
-msgstr "Ogiltigt blocknummer för utökat attribut"
+msgstr "Ogiltigt blocknummer för utökat attribut"
 
 #: lib/ext2fs/ext2_err.c:102
 msgid "Cannot create filesystem with requested number of inodes"
-msgstr "Kan inte skapa ett filsystem med begärt antal inoder"
+msgstr "Kan inte skapa ett filsystem med begärt antal inoder"
 
 #: lib/ext2fs/ext2_err.c:103
 msgid "E2image snapshot not in use"
-msgstr "E2image-ögonblicksbild används inte"
+msgstr "E2image-ögonblicksbild används inte"
 
 #: lib/ext2fs/ext2_err.c:104
 msgid "Too many reserved group descriptor blocks"
-msgstr "För många reserverade gruppidentifierarblock"
+msgstr "För många reserverade gruppidentifierarblock"
 
 #: lib/ext2fs/ext2_err.c:105
 msgid "Resize inode is corrupt"
-msgstr "Storleksändringsinoden är trasig"
+msgstr "Storleksändringsinoden är trasig"
 
 #: lib/ext2fs/ext2_err.c:106
 msgid "Tried to set block bmap with missing indirect block"
-msgstr "Försökte sätta en blockbitkarta med saknat indirektblock"
+msgstr "Försökte sätta en blockbitkarta med saknat indirektblock"
 
 #: lib/ext2fs/ext2_err.c:107
 msgid "TDB: Success"
@@ -6340,11 +6233,11 @@ msgstr "TDB: I/O-fel"
 
 #: lib/ext2fs/ext2_err.c:110
 msgid "TDB: Locking error"
-msgstr "TDB: Låsningsfel"
+msgstr "TDB: Låsningsfel"
 
 #: lib/ext2fs/ext2_err.c:111
 msgid "TDB: Out of memory"
-msgstr "TDB: Slut på minne"
+msgstr "TDB: Slut på minne"
 
 #: lib/ext2fs/ext2_err.c:112
 msgid "TDB: Record exists"
@@ -6352,7 +6245,7 @@ msgstr "TDB: Posten finns"
 
 #: lib/ext2fs/ext2_err.c:113
 msgid "TDB: Lock exists on other keys"
-msgstr "TDB: Lås finns på andra nycklar"
+msgstr "TDB: Lås finns på andra nycklar"
 
 #: lib/ext2fs/ext2_err.c:114
 msgid "TDB: Invalid parameter"
@@ -6364,31 +6257,31 @@ msgstr "TDB: Posten finns inte"
 
 #: lib/ext2fs/ext2_err.c:116
 msgid "TDB: Write not permitted"
-msgstr "TDB: Skrivning är inte tillåten"
+msgstr "TDB: Skrivning är inte tillåten"
 
 #: lib/ext2fs/ext2_err.c:117
 msgid "Ext2fs directory block list is empty"
-msgstr "Ext2fs-katalogblocklistan är tom"
+msgstr "Ext2fs-katalogblocklistan är tom"
 
 #: lib/ext2fs/ext2_err.c:118
 msgid "Attempt to modify a block mapping via a read-only block iterator"
-msgstr "Försök att ändra en blockmappning via en endast läsbar blockiterator"
+msgstr "Försök att ändra en blockmappning via en endast läsbar blockiterator"
 
 #: lib/ext2fs/ext2_err.c:119
 msgid "Wrong magic number for ext4 extent saved path"
-msgstr "Fel magiskt nummer för sparad sökväg till ext4-utsträckning"
+msgstr "Fel magiskt nummer för sparad sökväg till ext4-utsträckning"
 
 #: lib/ext2fs/ext2_err.c:120
 msgid "Wrong magic number for 64-bit generic bitmap"
-msgstr "Fel magiskt nummer för 64-bitars allmän bitkarta"
+msgstr "Fel magiskt nummer för 64-bitars allmän bitkarta"
 
 #: lib/ext2fs/ext2_err.c:121
 msgid "Wrong magic number for 64-bit block bitmap"
-msgstr "Fel magiskt nummer för 64-bitars blockbitkarta"
+msgstr "Fel magiskt nummer för 64-bitars blockbitkarta"
 
 #: lib/ext2fs/ext2_err.c:122
 msgid "Wrong magic number for 64-bit inode bitmap"
-msgstr "Fel magiskt nummer för 64-bitars inodsbitkarta"
+msgstr "Fel magiskt nummer för 64-bitars inodsbitkarta"
 
 #: lib/ext2fs/ext2_err.c:123
 msgid "Wrong magic number --- RESERVED_13"
@@ -6420,39 +6313,39 @@ msgstr "Fel magiskt nummer --- RESERVERAT_19"
 
 #: lib/ext2fs/ext2_err.c:130
 msgid "Corrupt extent header"
-msgstr "Trasigt utsträckningshuvud"
+msgstr "Trasigt utsträckningshuvud"
 
 #: lib/ext2fs/ext2_err.c:131
 msgid "Corrupt extent index"
-msgstr "Trasigt utsträckningsindex"
+msgstr "Trasigt utsträckningsindex"
 
 #: lib/ext2fs/ext2_err.c:132
 msgid "Corrupt extent"
-msgstr "Trasig utsträckning"
+msgstr "Trasig utsträckning"
 
 #: lib/ext2fs/ext2_err.c:133
 msgid "No free space in extent map"
-msgstr "Inget fritt utrymme i utsträckningskartan"
+msgstr "Inget fritt utrymme i utsträckningskartan"
 
 #: lib/ext2fs/ext2_err.c:134
 msgid "Inode does not use extents"
-msgstr "Inoder använder inte utsträckningar"
+msgstr "Inoder använder inte utsträckningar"
 
 #: lib/ext2fs/ext2_err.c:135
 msgid "No 'next' extent"
-msgstr "Ingen \"nästa\" utsträckning"
+msgstr "Ingen \"nästa\" utsträckning"
 
 #: lib/ext2fs/ext2_err.c:136
 msgid "No 'previous' extent"
-msgstr "Ingen \"föregående\" utsträckning"
+msgstr "Ingen \"föregående\" utsträckning"
 
 #: lib/ext2fs/ext2_err.c:137
 msgid "No 'up' extent"
-msgstr "Ingen \"upp\"-utsträckning"
+msgstr "Ingen \"upp\"-utsträckning"
 
 #: lib/ext2fs/ext2_err.c:138
 msgid "No 'down' extent"
-msgstr "Ingen \"ner\"-utsträckning"
+msgstr "Ingen \"ner\"-utsträckning"
 
 #: lib/ext2fs/ext2_err.c:139
 msgid "No current node"
@@ -6460,11 +6353,11 @@ msgstr "Ingen aktuell nod"
 
 #: lib/ext2fs/ext2_err.c:140
 msgid "Ext2fs operation not supported"
-msgstr "Ext2fs-operationen stödjs inte"
+msgstr "Ext2fs-operationen stödjs inte"
 
 #: lib/ext2fs/ext2_err.c:141
 msgid "No room to insert extent in node"
-msgstr "Ingen plats att lägga in en utsträckning i noden"
+msgstr "Ingen plats att lägga in en utsträckning i noden"
 
 #: lib/ext2fs/ext2_err.c:142
 msgid "Splitting would result in empty node"
@@ -6472,28 +6365,27 @@ msgstr "Uppdelning skulle resultera i en tom nod"
 
 #: lib/ext2fs/ext2_err.c:143
 msgid "Extent not found"
-msgstr "Utsräckningen inte funnen"
+msgstr "Utsräckningen inte funnen"
 
 #: lib/ext2fs/ext2_err.c:144
 msgid "Operation not supported for inodes containing extents"
-msgstr "Operationsn stödjs inte för inoder som innehåller utsträckningar"
+msgstr "Operationsn stödjs inte för inoder som innehåller utsträckningar"
 
 #: lib/ext2fs/ext2_err.c:145
 msgid "Extent length is invalid"
-msgstr "Utsträckningslängden är felaktig"
+msgstr "Utsträckningslängden är felaktig"
 
 #: lib/ext2fs/ext2_err.c:146
 msgid "I/O Channel does not support 64-bit block numbers"
-msgstr "I/O-kanaler stödjer inte 64-bitars blocknummer"
+msgstr "I/O-kanaler stödjer inte 64-bitars blocknummer"
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"Kan inte kontrollera om filsystem är monterade för att att mtab-filen saknas"
+msgstr "Kan inte kontrollera om filsystem är monterade för att att mtab-filen saknas"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
-msgstr "Filsystemen är för stora för att använda gammaldags bitkartor"
+msgstr "Filsystemen är för stora för att använda gammaldags bitkartor"
 
 #: lib/ext2fs/ext2_err.c:149
 msgid "MMP: invalid magic number"
@@ -6501,27 +6393,27 @@ msgstr "MMP: ogiltigt magiskt nummer"
 
 #: lib/ext2fs/ext2_err.c:150
 msgid "MMP: device currently active"
-msgstr "MMP: enheten är för närvarande aktiv"
+msgstr "MMP: enheten är för närvarande aktiv"
 
 #: lib/ext2fs/ext2_err.c:151
 msgid "MMP: fsck being run"
-msgstr "MMP: fsck körs"
+msgstr "MMP: fsck körs"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
-msgstr "MMP: blocknummer utanför filsystemets räckvidd"
+msgstr "MMP: blocknummer utanför filsystemets räckvidd"
 
 #: lib/ext2fs/ext2_err.c:153
 msgid "MMP: undergoing an unknown operation"
-msgstr "MMP: utför en okänd operation"
+msgstr "MMP: utför en okänd operation"
 
 #: lib/ext2fs/ext2_err.c:154
 msgid "MMP: filesystem still in use"
-msgstr "MMP: filsystemet används fortfarande"
+msgstr "MMP: filsystemet används fortfarande"
 
 #: lib/ext2fs/ext2_err.c:155
 msgid "MMP: open with O_DIRECT failed"
-msgstr "MMP: öppning med O_DIRECT misslyckades"
+msgstr "MMP: öppning med O_DIRECT misslyckades"
 
 #: e2fsck/prof_err.c:11
 msgid "Profile version 0.0"
@@ -6529,7 +6421,7 @@ msgstr "Profil version 0.0"
 
 #: e2fsck/prof_err.c:12
 msgid "Bad magic value in profile_node"
-msgstr "Felaktigt magiskt värde i profile_node"
+msgstr "Felaktigt magiskt värde i profile_node"
 
 #: e2fsck/prof_err.c:13
 msgid "Profile section not found"
@@ -6541,31 +6433,31 @@ msgstr "Profilrelationen inte funnen"
 
 #: e2fsck/prof_err.c:15
 msgid "Attempt to add a relation to node which is not a section"
-msgstr "Försök att lägga till en relation till en nod som inte är en sektion"
+msgstr "Försök att lägga till en relation till en nod som inte är en sektion"
 
 #: e2fsck/prof_err.c:16
 msgid "A profile section header has a non-zero value"
-msgstr "Ett huvud till en profilsektion har ett värde skilt från noll"
+msgstr "Ett huvud till en profilsektion har ett värde skilt från noll"
 
 #: e2fsck/prof_err.c:17
 msgid "Bad linked list in profile structures"
-msgstr "Felaktig länkad lista i profilstrukturer"
+msgstr "Felaktig länkad lista i profilstrukturer"
 
 #: e2fsck/prof_err.c:18
 msgid "Bad group level in profile structures"
-msgstr "Felaktig gruppnivå i profilstrukturer"
+msgstr "Felaktig gruppnivå i profilstrukturer"
 
 #: e2fsck/prof_err.c:19
 msgid "Bad parent pointer in profile structures"
-msgstr "Felaktig föräldrapekare i profilstrukturer"
+msgstr "Felaktig föräldrapekare i profilstrukturer"
 
 #: e2fsck/prof_err.c:20
 msgid "Bad magic value in profile iterator"
-msgstr "Felaktigt magiskt värde i profiliterator"
+msgstr "Felaktigt magiskt värde i profiliterator"
 
 #: e2fsck/prof_err.c:21
 msgid "Can't set value on section node"
-msgstr "Kan inte sätta värde på sektionsnod"
+msgstr "Kan inte sätta värde på sektionsnod"
 
 #: e2fsck/prof_err.c:22
 msgid "Invalid argument passed to profile library"
@@ -6573,11 +6465,11 @@ msgstr "Ogiltigt argument skickat till profilbiblioteket"
 
 #: e2fsck/prof_err.c:23
 msgid "Attempt to modify read-only profile"
-msgstr "Försök att ändra en endast läsbar profil"
+msgstr "Försök att ändra en endast läsbar profil"
 
 #: e2fsck/prof_err.c:24
 msgid "Profile section header not at top level"
-msgstr "Huvudet till profilsektionen är inte på toppnivån"
+msgstr "Huvudet till profilsektionen är inte på toppnivån"
 
 #: e2fsck/prof_err.c:25
 msgid "Syntax error in profile section header"
@@ -6597,15 +6489,15 @@ msgstr "Inledande klammer saknas i profilen"
 
 #: e2fsck/prof_err.c:29
 msgid "Bad magic value in profile_t"
-msgstr "Felaktigt magiskt värde i profile_t"
+msgstr "Felaktigt magiskt värde i profile_t"
 
 #: e2fsck/prof_err.c:30
 msgid "Bad magic value in profile_section_t"
-msgstr "Felaktigt magiskt värde i profile_section_t"
+msgstr "Felaktigt magiskt värde i profile_section_t"
 
 #: e2fsck/prof_err.c:31
 msgid "Iteration through all top level section not supported"
-msgstr "Iteration över alla toppnivåsektioner stödjs inte"
+msgstr "Iteration över alla toppnivåsektioner stödjs inte"
 
 #: e2fsck/prof_err.c:32
 msgid "Invalid profile_section object"
@@ -6617,19 +6509,19 @@ msgstr "Inga fler sektioner"
 
 #: e2fsck/prof_err.c:34
 msgid "Bad nameset passed to query routine"
-msgstr "Felaktig namnmängd skickad till frågerutinen"
+msgstr "Felaktig namnmängd skickad till frågerutinen"
 
 #: e2fsck/prof_err.c:35
 msgid "No profile file open"
-msgstr "Ingen profilfil öppen"
+msgstr "Ingen profilfil öppen"
 
 #: e2fsck/prof_err.c:36
 msgid "Bad magic value in profile_file_t"
-msgstr "Felaktigt magiskt värde i profile_file_t"
+msgstr "Felaktigt magiskt värde i profile_file_t"
 
 #: e2fsck/prof_err.c:37
 msgid "Couldn't open profile file"
-msgstr "Kunde inte öppna profilfilen"
+msgstr "Kunde inte öppna profilfilen"
 
 #: e2fsck/prof_err.c:38
 msgid "Section already exists"
@@ -6637,15 +6529,12 @@ msgstr "Sektionen finns redan"
 
 #: e2fsck/prof_err.c:39
 msgid "Invalid boolean value"
-msgstr "Ogiltigt booleskt värde"
+msgstr "Ogiltigt booleskt värde"
 
 #: e2fsck/prof_err.c:40
 msgid "Invalid integer value"
-msgstr "Ogiltigt heltalsvärde"
+msgstr "Ogiltigt heltalsvärde"
 
 #: e2fsck/prof_err.c:41
 msgid "Bad magic value in profile_file_data_t"
-msgstr "Felaktigt magiskt värde i profile_file_data_t"
-
-#~ msgid "%s is mounted.  "
-#~ msgstr "%s är monterat.  "
+msgstr "Felaktigt magiskt värde i profile_file_data_t"
index 47e2fea..c7976a7 100644 (file)
Binary files a/po/vi.gmo and b/po/vi.gmo differ
index ef1c4f4..4f15af2 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
 #.
 msgid ""
 msgstr ""
-"Project-Id-Version: e2fsprogs-1.42.2\n"
+"Project-Id-Version: e2fsprogs-1.42.6\n"
 "Report-Msgid-Bugs-To: tytso@alum.mit.edu\n"
-"POT-Creation-Date: 2012-06-12 14:40-0400\n"
-"PO-Revision-Date: 2012-04-10 14:24+0700\n"
+"POT-Creation-Date: 2012-09-21 12:16-0400\n"
+"PO-Revision-Date: 2012-12-22 14:57+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
 "Language: vi\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Team-Website: <http://translationproject.org/team/vi.html>\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: LocFactoryEditor 1.8\n"
-"X-Poedit-Language: Vietnamese\n"
-"X-Poedit-Country: VIET NAM\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
-#: e2fsck/badblocks.c:23 misc/mke2fs.c:176
+#: e2fsck/badblocks.c:23 misc/mke2fs.c:177
 #, c-format
 msgid "Bad block %u out of range; ignored.\n"
 msgstr "Khối hỏng %u ở ngoại phạm vi nên bị bỏ qua.\n"
@@ -95,10 +94,10 @@ msgid "while reading the bad blocks inode"
 msgstr "trong khi đọc nút thông tin khối hỏng"
 
 #: e2fsck/badblocks.c:72 e2fsck/iscan.c:110 e2fsck/scantest.c:107
-#: e2fsck/unix.c:1298 e2fsck/unix.c:1386 misc/badblocks.c:1214
+#: e2fsck/unix.c:1334 e2fsck/unix.c:1422 misc/badblocks.c:1214
 #: misc/badblocks.c:1222 misc/badblocks.c:1236 misc/badblocks.c:1248
 #: misc/dumpe2fs.c:588 misc/e2image.c:1189 misc/e2image.c:1307
-#: misc/e2image.c:1320 misc/mke2fs.c:192 misc/tune2fs.c:1907 resize/main.c:303
+#: misc/e2image.c:1320 misc/mke2fs.c:193 misc/tune2fs.c:1898 resize/main.c:303
 #, c-format
 msgid "while trying to open %s"
 msgstr "trong khi thử mở %s"
@@ -106,9 +105,9 @@ msgstr "trong khi thử mở %s"
 #: e2fsck/badblocks.c:83
 #, c-format
 msgid "while trying popen '%s'"
-msgstr "trong khi thử mở popen « %s »"
+msgstr "trong khi thử mở popen “%s”"
 
-#: e2fsck/badblocks.c:94 misc/mke2fs.c:199
+#: e2fsck/badblocks.c:94 misc/mke2fs.c:200
 msgid "while reading in list of bad blocks from file"
 msgstr "trong khi đọc vào danh sách các khối hỏng từ tập tin"
 
@@ -119,8 +118,7 @@ msgstr "trong khi cập nhật nút thông tin khối hỏng"
 #: e2fsck/badblocks.c:131
 #, c-format
 msgid "Warning: illegal block %u found in bad block inode.  Cleared.\n"
-msgstr ""
-"Cảnh báo: tìm thấy khối cấm %u trong nút thông tin khối hỏng nên bị xoá.\n"
+msgstr "Cảnh báo: tìm thấy khối cấm %u trong nút thông tin khối hỏng nên bị xoá.\n"
 
 #: e2fsck/ehandler.c:55
 #, c-format
@@ -156,7 +154,7 @@ msgstr "khối thư mục rỗng"
 
 #: e2fsck/emptydir.c:62
 msgid "empty dir map"
-msgstr "sơ đồ thư mục rỗng"
+msgstr "ánh xạ thư mục rỗng"
 
 #: e2fsck/emptydir.c:98
 #, c-format
@@ -171,7 +169,7 @@ msgstr "%s: %s tên tập tin  số khối  cỡ khối\n"
 #: e2fsck/extend.c:44
 #, c-format
 msgid "Illegal number of blocks!\n"
-msgstr "Không cho phép số khối đó.\n"
+msgstr "Không cho phép số khối đó!\n"
 
 #: e2fsck/extend.c:50
 #, c-format
@@ -197,12 +195,12 @@ msgstr ""
 "[KĐN: các khối đệm nút thông tin]\n"
 "\n"
 
-#: e2fsck/iscan.c:81 e2fsck/unix.c:930
+#: e2fsck/iscan.c:81 e2fsck/unix.c:963
 #, c-format
 msgid "while opening %s for flushing"
 msgstr "trong khi mở %s để xoá sạch"
 
-#: e2fsck/iscan.c:86 e2fsck/unix.c:936 resize/main.c:276
+#: e2fsck/iscan.c:86 e2fsck/unix.c:969 resize/main.c:276
 #, c-format
 msgid "while trying to flush %s"
 msgstr "trong khi thử xoá sạch %s"
@@ -299,7 +297,7 @@ msgstr "emục nhập"
 
 #: e2fsck/message.c:125
 msgid "E@e '%Dn' in %p (%i)"
-msgstr "E@e '%Dn' trong %p (%i)"
+msgstr "E@e “%Dn” trong %p (%i)"
 
 #: e2fsck/message.c:126
 msgid "ffilesystem"
@@ -315,7 +313,7 @@ msgstr "gnhóm"
 
 #: e2fsck/message.c:129
 msgid "hHTREE @d @i"
-msgstr "hHCÂY @d @i"
+msgstr "hHTREE @d @i"
 
 #: e2fsck/message.c:130
 msgid "llost+found"
@@ -468,7 +466,7 @@ msgstr "khối #"
 
 #: e2fsck/pass1b.c:222
 msgid "multiply claimed inode map"
-msgstr "sơ đồ nút thông tin đa tuyên bố"
+msgstr "ánh xạ nút thông tin đa tuyên bố"
 
 #: e2fsck/pass1b.c:610 e2fsck/pass1b.c:729
 #, c-format
@@ -495,19 +493,19 @@ msgstr "đang đọc khối thư mục"
 
 #: e2fsck/pass1.c:599
 msgid "in-use inode map"
-msgstr "sơ đồ nút thông tin đang được dùng"
+msgstr "ánh xạ nút thông tin đang được dùng"
 
 #: e2fsck/pass1.c:610
 msgid "directory inode map"
-msgstr "sơ đồ nút thông tin thư mục"
+msgstr "ánh xạ nút thông tin thư mục"
 
 #: e2fsck/pass1.c:620
 msgid "regular file inode map"
-msgstr "sơ đồ nút thông tin tập tin chuẩn"
+msgstr "ánh xạ nút thông tin tập tin chuẩn"
 
 #: e2fsck/pass1.c:629
 msgid "in-use block map"
-msgstr "sơ đồ khối đang được dùng"
+msgstr "ánh xạ khối đang được dùng"
 
 #: e2fsck/pass1.c:696
 msgid "opening inode scan"
@@ -528,23 +526,23 @@ msgstr "đang đọc khối gián tiếp của nút thông tin %u"
 
 #: e2fsck/pass1.c:1347
 msgid "bad inode map"
-msgstr "sơ đồ nút thông tin sai"
+msgstr "ánh xạ nút thông tin sai"
 
 #: e2fsck/pass1.c:1370
 msgid "inode in bad block map"
-msgstr "nút thông tin trong sơ đồ khối sai"
+msgstr "nút thông tin trong ánh xạ khối sai"
 
 #: e2fsck/pass1.c:1390
 msgid "imagic inode map"
-msgstr "sơ đồ nút thông tin ma thuật imagic"
+msgstr "ánh xạ nút thông tin ma thuật imagic"
 
 #: e2fsck/pass1.c:1417
 msgid "multiply claimed block map"
-msgstr "sơ đồ khối đa tuyên bố"
+msgstr "ánh xạ khối đa tuyên bố"
 
 #: e2fsck/pass1.c:1518
 msgid "ext attr block map"
-msgstr "sơ đồ khối ext attr (thuộc tính thêm?)"
+msgstr "ánh xạ khối ext attr (thuộc tính thêm?)"
 
 #: e2fsck/pass1.c:2266
 #, c-format
@@ -669,7 +667,7 @@ msgstr "Bỏ liên kết"
 
 #: e2fsck/problem.c:69
 msgid "Clear HTree index"
-msgstr "Xoá sạch chỉ mục HCây"
+msgstr "Xoá sạch chỉ mục hHTREE"
 
 #: e2fsck/problem.c:70
 msgid "Recreate"
@@ -677,7 +675,7 @@ msgstr "Tạo lại"
 
 #: e2fsck/problem.c:79
 msgid "(NONE)"
-msgstr "(KHÔNG CÓ)"
+msgstr "(KHÔNG)"
 
 #: e2fsck/problem.c:80
 msgid "FIXED"
@@ -858,7 +856,7 @@ msgid ""
 msgstr ""
 "Ghi chú: nếu vài khối nút thông tin hay khối mảng ảnh khối\n"
 "hay phần của bảng nút thông tin cần thiết được định vị lại,\n"
-"đề nghị bạn thử chạy e2fsck với tùy chọn « -b %S »\n"
+"đề nghị bạn thử chạy e2fsck với tùy chọn “-b %S”\n"
 "trước tiên. Vấn đề có thể nằm chỉ trong các mô tả nhóm\n"
 "khối chính, thì các mô tả nhóm khối dự trữ có thể là đúng.\n"
 "\n"
@@ -916,13 +914,11 @@ msgstr "@j bên ngoài không hỗ trợ @f này\n"
 #: e2fsck/problem.c:213
 msgid ""
 "@f @j @S is unknown type %N (unsupported).\n"
-"It is likely that your copy of e2fsck is old and/or doesn't support this @j "
-"format.\n"
+"It is likely that your copy of e2fsck is old and/or doesn't support this @j format.\n"
 "It is also possible the @j @S is corrupt.\n"
 msgstr ""
 "@S @j @f có kiểu lạ %N (không được hỗ trợ).\n"
-"Rất có thể là bạn có một bản sao e2fsck cũ mà/hay không hỗ trợ định dạng @j "
-"này.\n"
+"Rất có thể là bạn có một bản sao e2fsck cũ mà/hay không hỗ trợ định dạng @j này.\n"
 "Cũng có thể là @S @j bị hỏng.\n"
 
 #. @-expanded: journal superblock is corrupt.\n
@@ -1135,7 +1131,7 @@ msgstr "Giao dịch nhật ký %i bị hỏng nên hủy bỏ tiến trình phá
 
 #: e2fsck/problem.c:381
 msgid "The test_fs flag is set (and ext4 is available).  "
-msgstr "Cờ « test_fs » được đặt (và ext4 sẵn sàng)"
+msgstr "Cờ “test_fs” được đặt (và ext4 sẵn sàng)"
 
 #. @-expanded: superblock last mount time is in the future.\n
 #. @-expanded: \t(by less than a day, probably due to the hardware clock being incorrectly 
@@ -1143,8 +1139,7 @@ msgstr "Cờ « test_fs » được đặt (và ext4 sẵn sàng)"
 #: e2fsck/problem.c:386
 msgid ""
 "@S last mount time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set)  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set)  "
 msgstr ""
 "Giờ gắn kết @S cuối cùng nằm trong tương lai\n"
 "\t(theo ít nhất một ngày, rất có thể do đồng hồ phần cứng bị sai lập)."
@@ -1155,8 +1150,7 @@ msgstr ""
 #: e2fsck/problem.c:392
 msgid ""
 "@S last write time is in the future.\n"
-"\t(by less than a day, probably due to the hardware clock being incorrectly "
-"set).  "
+"\t(by less than a day, probably due to the hardware clock being incorrectly set).  "
 msgstr ""
 "Giờ ghi nhớ @S cuối cùng nằm trong tương lai\n"
 "\t(theo ít nhất một ngày, rất có thể do đồng hồ phần cứng bị sai lập)."
@@ -1178,11 +1172,8 @@ msgstr "Đang đặt số lượng @bs thành %c (là %b)\n"
 
 #. @-expanded: Making quota inode %i (%Q) hidden.\n
 #: e2fsck/problem.c:413
-#, fuzzy
 msgid "Making @q @i %i (%Q) hidden.\n"
-msgstr ""
-"Làm cho @q @is ẩn đi.\n"
-"\n"
+msgstr "Làm cho @q @is %i (%Q) ẩn đi.\n"
 
 #. @-expanded: superblock has invalid MMP block.  
 #: e2fsck/problem.c:418
@@ -1240,7 +1231,7 @@ msgstr "@i %i đang được dùng, còn đặt dtime.  "
 #: e2fsck/problem.c:469
 #, c-format
 msgid "@i %i is a @z @d.  "
-msgstr "@i %i là @d @z"
+msgstr "@i %i là @d @z.    "
 
 #. @-expanded: group %g's block bitmap at %b conflicts with some other fs block.\n
 #: e2fsck/problem.c:474
@@ -1331,8 +1322,8 @@ msgid ""
 "in the @f.\n"
 msgstr ""
 "\n"
-"@i @n rất có thể bị hỏng. Đề nghị bạn thôi ngay bây giờ\n"
-"và chạy lệnh « e2fsck -c » để quét tìm khối sai trong @f.\n"
+"@i @n gần như chắc chắn đã hỏng. Đề nghị bạn dừng ngay bây giờ\n"
+"và chạy lệnh “e2fsck -c” để quét tìm khối sai trong @f.\n"
 
 #. @-expanded: \n
 #. @-expanded: If the block is really bad, the filesystem can not be fixed.\n
@@ -1365,8 +1356,7 @@ msgstr "@S chính (%b) nằm trên danh sách các @b sai.\n"
 #. @-expanded: Block %b in the primary group descriptors is on the bad block list\n
 #: e2fsck/problem.c:572
 msgid "Block %b in the primary @g descriptors is on the bad @b list\n"
-msgstr ""
-"Khối %b trong những mô tả @g chính có nằm trong danh sách các @b sai.\n"
+msgstr "Khối %b trong những mô tả @g chính có nằm trong danh sách các @b sai.\n"
 
 #. @-expanded: Warning: Group %g's superblock (%b) is bad.\n
 #: e2fsck/problem.c:578
@@ -1381,8 +1371,7 @@ msgstr "Cảnh báo: bản sao các mô tả @g của nhóm %g có một @b sai
 #. @-expanded: Programming error?  block #%b claimed for no reason in process_bad_block.\n
 #: e2fsck/problem.c:589
 msgid "Programming error?  @b #%b claimed for no reason in process_bad_@b.\n"
-msgstr ""
-"Lỗi lập trình ? @b %b được tuyên bố, không có lý do, trong process_bad_@b\n"
+msgstr "Lỗi lập trình ? @b %b được tuyên bố, không có lý do, trong process_bad_@b\n"
 
 #. @-expanded: error allocating %N contiguous block(s) in block group %g for %s: %m\n
 #: e2fsck/problem.c:595
@@ -1576,20 +1565,20 @@ msgstr "@b @a %b bị hỏng (giá trị @n).  "
 #: e2fsck/problem.c:776
 #, c-format
 msgid "@i %i is too big.  "
-msgstr "@i %i quá lớn.  "
+msgstr "@i %i quá lớn.     "
 
 #. @-expanded: %B (%b) causes directory to be too big.  
 #: e2fsck/problem.c:780
 msgid "%B (%b) causes @d to be too big.  "
-msgstr "%B (%b) gây ra @d quá lớn.  "
+msgstr "%B (%b) gây ra @d quá lớn.        "
 
 #: e2fsck/problem.c:785
 msgid "%B (%b) causes file to be too big.  "
-msgstr "%B (%b) gây ra tập tin quá lớn.  "
+msgstr "%B (%b) gây ra tập tin quá lớn.     "
 
 #: e2fsck/problem.c:790
 msgid "%B (%b) causes symlink to be too big.  "
-msgstr "%B (%b) gây ra liên kết tượng trưng quá lớn.  "
+msgstr "%B (%b) làm cho liên kết tượng trưng quá lớn."
 
 #. @-expanded: inode %i has INDEX_FL flag set on filesystem without htree support.\n
 #: e2fsck/problem.c:795
@@ -1722,8 +1711,7 @@ msgstr "@i %i đặt cờ EXTENTS_FL trên @f mà không hỗ trợ phạm vi.\n
 #: e2fsck/problem.c:897
 #, c-format
 msgid "@i %i is in extent format, but @S is missing EXTENTS feature\n"
-msgstr ""
-"@i %i theo định dạng phạm vi, còn @S thiếu tính năng phạm vi (EXTENTS)\n"
+msgstr "@i %i theo định dạng phạm vi, còn @S thiếu tính năng phạm vi (EXTENTS)\n"
 
 #. @-expanded: inode %i missing EXTENT_FL, but is in extents format\n
 #: e2fsck/problem.c:902
@@ -1876,7 +1864,7 @@ msgid ""
 "@m @bs already reassigned or cloned.\n"
 "\n"
 msgstr ""
-"@b @m Ä\91ã Ä\91ược gán lại hay nhái.\n"
+"@b @m Ä\91ã Ä\91ược gán lại hay nhân bản.\n"
 "\n"
 
 #: e2fsck/problem.c:1039
@@ -1893,7 +1881,7 @@ msgstr "Lần qua 2: đang kiểm tra cấu trúc @d\n"
 #: e2fsck/problem.c:1050
 #, c-format
 msgid "@n @i number for '.' in @d @i %i.\n"
-msgstr "Con số @i @n cho dấu chấm « . » trong @i @d %i.\n"
+msgstr "Con số @i @n cho dấu chấm “.” trong @i @d %i.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) has invalid inode #: %Di.\n
 #: e2fsck/problem.c:1055
@@ -1908,7 +1896,7 @@ msgstr "@E có @i @D/chưa dùng %Di.  "
 #. @-expanded: entry '%Dn' in %p (%i) is a link to '.'  
 #: e2fsck/problem.c:1065
 msgid "@E @L to '.'  "
-msgstr "@E @L đến « . »  "
+msgstr "@E @L đến “.”  "
 
 #. @-expanded: entry '%Dn' in %p (%i) points to inode (%Di) located in a bad block.\n
 #: e2fsck/problem.c:1070
@@ -1934,23 +1922,23 @@ msgstr "@E có tên chứa ký tự cấm.\n"
 #: e2fsck/problem.c:1090
 #, c-format
 msgid "Missing '.' in @d @i %i.\n"
-msgstr "Thiếu « . » trong @i @d %i.\n"
+msgstr "Thiếu “.” trong @i @d %i.\n"
 
 #. @-expanded: Missing '..' in directory inode %i.\n
 #: e2fsck/problem.c:1095
 #, c-format
 msgid "Missing '..' in @d @i %i.\n"
-msgstr "Thiếu « .. » trong @i @d %i.\n"
+msgstr "Thiếu “..” trong @i @d %i.\n"
 
 #. @-expanded: First entry '%Dn' (inode=%Di) in directory inode %i (%p) should be '.'\n
 #: e2fsck/problem.c:1100
 msgid "First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"
-msgstr "@e '%Dn' thứ nhất (@i=%Di) trong @i @d %i (%p) @s « . »\n"
+msgstr "@e “%Dn” thứ nhất (@i=%Di) trong @i @d %i (%p) @s “.”\n"
 
 #. @-expanded: Second entry '%Dn' (inode=%Di) in directory inode %i should be '..'\n
 #: e2fsck/problem.c:1105
 msgid "Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"
-msgstr "@e '%Dn' thứ hai (@i=%Di) trong @i @d %i @s « .. »\n"
+msgstr "@e “%Dn” thứ hai (@i=%Di) trong @i @d %i @s “..”\n"
 
 #. @-expanded: i_faddr for inode %i (%Q) is %IF, should be zero.\n
 #: e2fsck/problem.c:1110
@@ -2001,15 +1989,13 @@ msgstr "@i @d %i có một %B chưa cấp phát.  "
 #: e2fsck/problem.c:1155
 #, c-format
 msgid "'.' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
-"@e @d « . » trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
+msgstr "@e @d “.” trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
 
 #. @-expanded: '..' directory entry in directory inode %i is not NULL terminated\n
 #: e2fsck/problem.c:1160
 #, c-format
 msgid "'..' @d @e in @d @i %i is not NULL terminated\n"
-msgstr ""
-"@e @d « .. » trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
+msgstr "@e @d “..” trong @i @d %i không được chấm dứt bằng NULL (vô giá trị)\n"
 
 #. @-expanded: inode %i (%Q) is an illegal character device.\n
 #: e2fsck/problem.c:1165
@@ -2024,12 +2010,12 @@ msgstr "@i %i (%Q) là @v @b @I.\n"
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '.' entry.\n
 #: e2fsck/problem.c:1175
 msgid "@E is duplicate '.' @e.\n"
-msgstr "@E là @e « . » trùng.\n"
+msgstr "@E là @e “.” trùng.\n"
 
 #. @-expanded: entry '%Dn' in %p (%i) is duplicate '..' entry.\n
 #: e2fsck/problem.c:1180
 msgid "@E is duplicate '..' @e.\n"
-msgstr "@E là @e « .. » trùng.\n"
+msgstr "@E là @e “..” trùng.\n"
 
 #: e2fsck/problem.c:1185 e2fsck/problem.c:1485
 #, c-format
@@ -2079,7 +2065,7 @@ msgstr "Gặp lỗi khi hủy cấp phát @i %i: %m\n"
 #: e2fsck/problem.c:1225
 #, c-format
 msgid "@d @e for '.' in %p (%i) is big.\n"
-msgstr "@d @e đối với '.' trong %p (%i) quá lớn.\n"
+msgstr "@d @e đối với “.” trong %p (%i) quá lớn.\n"
 
 #. @-expanded: inode %i (%Q) is an illegal FIFO.\n
 #: e2fsck/problem.c:1230
@@ -2207,7 +2193,7 @@ msgid ""
 "\tMarking %p (%i) to be rebuilt.\n"
 "\n"
 msgstr ""
-"Tìm thấy @e '%Dn' trùng\n"
+"Tìm thấy @e “%Dn” trùng\n"
 "\tnên nhãn %p (%i) cần được xây dựng lại.\n"
 "\n"
 
@@ -2229,9 +2215,7 @@ msgstr "@E tham chiếu đến @i %Di trong @g %g ở vị trí đặt _INODE_UN
 #. @-expanded: entry '%Dn' in %p (%i) references inode %Di found in group %g's unused inodes area.\n
 #: e2fsck/problem.c:1363
 msgid "@E references @i %Di found in @g %g's unused inodes area.\n"
-msgstr ""
-"@E tham chiếu đến @i %Di được tìm trong vùng nút thông tin không dùng của @g "
-"%g.\n"
+msgstr "@E tham chiếu đến @i %Di được tìm trong vùng nút thông tin không dùng của @g %g.\n"
 
 #. @-expanded: i_file_acl_hi for inode %i (%Q) is %N, should be zero.\n
 #: e2fsck/problem.c:1368
@@ -2246,12 +2230,12 @@ msgstr "Lần qua 3: đang kiểm tra khả năng kết nối của @d\n"
 #. @-expanded: root inode not allocated.  
 #: e2fsck/problem.c:1380
 msgid "@r not allocated.  "
-msgstr "Chưa cấp phát @r."
+msgstr "Chưa cấp phát @r.  "
 
 #. @-expanded: No room in lost+found directory.  
 #: e2fsck/problem.c:1385
 msgid "No room in @l @d.  "
-msgstr "Không có chỗ còn rảnh trong @d @l."
+msgstr "Không có chỗ còn rảnh trong @d @l.  "
 
 #. @-expanded: Unconnected directory inode %i (%p)\n
 #: e2fsck/problem.c:1390
@@ -2267,7 +2251,7 @@ msgstr "/@l không tìm thấy."
 #. @-expanded: '..' in %Q (%i) is %P (%j), should be %q (%d).\n
 #: e2fsck/problem.c:1400
 msgid "'..' in %Q (%i) is %P (%j), @s %q (%d).\n"
-msgstr "« .. » trong %Q (%i) là %P (%j), @s %q (%d).\n"
+msgstr "“..” trong %Q (%i) là %P (%j), @s %q (%d).\n"
 
 #. @-expanded: Bad or non-existent /lost+found.  Cannot reconnect.\n
 #: e2fsck/problem.c:1405
@@ -2475,12 +2459,8 @@ msgstr "Số đếm các @b rảnh không đúng (%b, đã đếm=%c).\n"
 #. @-expanded: PROGRAMMING ERROR: filesystem (#%N) bitmap endpoints (%b, %c) don't match calculated bitmap 
 #. @-expanded: endpoints (%i, %j)\n
 #: e2fsck/problem.c:1638
-msgid ""
-"PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B "
-"endpoints (%i, %j)\n"
-msgstr ""
-"LỖI LẬP TRÌNH: trong @f (#%N) có các điểm cuối @B (%b, %c) không tương ứng "
-"với các điểm cuối @B đã tính (%i, %j)\n"
+msgid "PROGRAMMING ERROR: @f (#%N) @B endpoints (%b, %c) don't match calculated @B endpoints (%i, %j)\n"
+msgstr "LỖI LẬP TRÌNH: trong @f (#%N) có các điểm cuối @B (%b, %c) không tương ứng với các điểm cuối @B đã tính (%i, %j)\n"
 
 #: e2fsck/problem.c:1644
 msgid "Internal error: fudging end of bitmap (%N)\n"
@@ -2517,7 +2497,7 @@ msgstr "Tạo lại @j"
 
 #: e2fsck/problem.c:1696
 msgid "Update quota info for quota type %N"
-msgstr ""
+msgstr "Cập nhật thông tin hạn ngạch cho kiểu hạn ngạch %N"
 
 #: e2fsck/problem.c:1815
 #, c-format
@@ -2549,13 +2529,12 @@ msgstr "trong khi chạy tiến trình quét nút thông tin"
 #: e2fsck/super.c:188
 #, c-format
 msgid "while calling ext2fs_block_iterate for inode %d"
-msgstr ""
-"trong khi gọi hàm lặp lại khối « ext2fs_block_iterate » cho nút thông tin %d"
+msgstr "trong khi gọi hàm lặp lại khối “ext2fs_block_iterate” cho nút thông tin %d"
 
 #: e2fsck/super.c:211
 #, c-format
 msgid "while calling ext2fs_adjust_ea_refcount2 for inode %d"
-msgstr "trong khi gọi hàm « ext2fs_adjust_ea_refcount » cho nút thông tin %d"
+msgstr "trong khi gọi hàm “ext2fs_adjust_ea_refcount” cho nút thông tin %d"
 
 #: e2fsck/super.c:272
 msgid "Truncating"
@@ -2573,7 +2552,7 @@ msgid ""
 "\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
 "\t\t[-E extended-options] device\n"
 msgstr ""
-"Sử dụng: %s [-panyrcdfvtDFV] [-b siêu_khối] [-B cỡ_khối]\n"
+"Cách dùng: %s [-panyrcdfvtDFV] [-b siêu_khối] [-B cỡ_khối]\n"
 "\t\t[-I khối_đệm_inode] [-P cỡ_inode_xử_lý]\n"
 "\t\t[-l|-L tập_tin_khối_sai] [-C fd] [-j nhật_ký_ngoài]\n"
 "\t\t[-E tùy_chọn_đã_mở_rộng] thiết_bị\n"
@@ -2586,18 +2565,16 @@ msgid ""
 " -p                   Automatic repair (no questions)\n"
 " -n                   Make no changes to the filesystem\n"
 " -y                   Assume \"yes\" to all questions\n"
-" -c                   Check for bad blocks and add them to the badblock "
-"list\n"
+" -c                   Check for bad blocks and add them to the badblock list\n"
 " -f                   Force checking even if filesystem is marked clean\n"
 msgstr ""
 "\n"
 "Trợ giúp khẩn cấp:\n"
 " -p                   Sửa chữa tự động (không có câu hỏi)\n"
 " -n                   Không thay đổi hệ thống tập tin\n"
-" -y                   Giả sử trả lời « Có » mọi câu hỏi\n"
+" -y                   Giả sử trả lời “Có” mọi câu hỏi\n"
 " -c                   Kiểm tra tìm khối sai: thêm vào danh sách khối sai\n"
-" -f                   Buộc kiểm tra ngay cả khi hệ thống tập tin có nhãn là "
-"sạch\n"
+" -f                   Buộc kiểm tra ngay cả khi hệ thống tập tin có nhãn là sạch\n"
 
 #: e2fsck/unix.c:86
 #, c-format
@@ -2609,152 +2586,152 @@ msgid ""
 " -l bad_blocks_file   Add to badblocks list\n"
 " -L bad_blocks_file   Set badblocks list\n"
 msgstr ""
-" -v                   \t\tXuất chi tiết\n"
-" -b siêu_khối        \t\tDùng siêu khối xen kẽ\n"
-" -B cỡ_khối         \t\tBuộc kích cỡ của khối khi tìm siêu khối\n"
-" -j nhật_ký_bên_ngoài  \tĐặt địa điểm của nhật ký bên ngoài\n"
-" -l tập_tin_khối_sai    Thêm vào danh sách các khối sai\n"
-" -L tập_tin_khối_sai   Đặt danh sách các khối sai\n"
+" -v                   Xuất chi tiết\n"
+" -b siêu_khối         Dùng siêu khối xen kẽ\n"
+" -B cỡ_khối           Buộc kích cỡ của khối khi tìm siêu khối\n"
+" -j nhật_ký_bên_ngoài Đặt địa điểm của nhật ký bên ngoài\n"
+" -l tập_tin_khối_sai  Thêm vào danh sách các khối sai\n"
+" -L tập_tin_khối_sai  Đặt danh sách các khối sai\n"
 
-#: e2fsck/unix.c:130
+#: e2fsck/unix.c:131
 #, c-format
 msgid "%s: %u/%u files (%0d.%d%% non-contiguous), %llu/%llu blocks\n"
 msgstr "%s: %u/%u tập tin (%0d.%d%% không kề nhau), %llu/%llu khối\n"
 
-#: e2fsck/unix.c:137
+#: e2fsck/unix.c:157
 #, c-format
 msgid ""
 "\n"
-"%8u inode used (%2.2f%%)\n"
+"%12u inode used (%2.2f%%, out of %u)\n"
 msgid_plural ""
 "\n"
-"%8u inodes used (%2.2f%%)\n"
+"%12u inodes used (%2.2f%%, out of %u)\n"
 msgstr[0] ""
 "\n"
-"%8u nút đã được sử dụng (%2.2f%%)\n"
+"%12u inode đã được dùng (%2.2f%%, vượt quá %u)\n"
 
-#: e2fsck/unix.c:141
+#: e2fsck/unix.c:161
 #, c-format
-msgid "%8u non-contiguous file (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous files (%0d.%d%%)\n"
-msgstr[0] "%8u tệp tin không kề nhau (%0d.%d%%)\n"
+msgid "%12u non-contiguous file (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous files (%0d.%d%%)\n"
+msgstr[0] "%12u tệp tin không kề nhau (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:146
+#: e2fsck/unix.c:166
 #, c-format
-msgid "%8u non-contiguous directory (%0d.%d%%)\n"
-msgid_plural "%8u non-contiguous directories (%0d.%d%%)\n"
-msgstr[0] "%8u thư mục không kề nhau (%0d.%d%%)\n"
+msgid "%12u non-contiguous directory (%0d.%d%%)\n"
+msgid_plural "%12u non-contiguous directories (%0d.%d%%)\n"
+msgstr[0] "%12u thư mục không kề nhau (%0d.%d%%)\n"
 
-#: e2fsck/unix.c:151
+#: e2fsck/unix.c:171
 #, c-format
-msgid "         # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
-msgstr "         số inode có khối ind/dind/tind: %u/%u/%u\n"
+msgid "             # of inodes with ind/dind/tind blocks: %u/%u/%u\n"
+msgstr "             # số inode có khối ind/dind/tind: %u/%u/%u\n"
 
-#: e2fsck/unix.c:159
-msgid "         Extent depth histogram: "
-msgstr "         Đồ thị độ sâu: "
+#: e2fsck/unix.c:179
+msgid "             Extent depth histogram: "
+msgstr "             Đồ thị độ sâu: "
 
-#: e2fsck/unix.c:168
+#: e2fsck/unix.c:188
 #, c-format
-msgid "%8llu block used (%2.2f%%)\n"
-msgid_plural "%8llu blocks used (%2.2f%%)\n"
-msgstr[0] "%8llu khối đã được sử dụng (%2.2f%%)\n"
+msgid "%12llu block used (%2.2f%%, out of %llu)\n"
+msgid_plural "%12llu blocks used (%2.2f%%, out of %llu)\n"
+msgstr[0] "%12llu khối đã dùng (%2.2f%%, vượt quá %llu)\n"
 
-#: e2fsck/unix.c:171
+#: e2fsck/unix.c:192
 #, c-format
-msgid "%8u bad block\n"
-msgid_plural "%8u bad blocks\n"
-msgstr[0] "%8u khối hỏng\n"
+msgid "%12u bad block\n"
+msgid_plural "%12u bad blocks\n"
+msgstr[0] "%12u khối hỏng\n"
 
-#: e2fsck/unix.c:173
+#: e2fsck/unix.c:194
 #, c-format
-msgid "%8u large file\n"
-msgid_plural "%8u large files\n"
-msgstr[0] "%8u tập tin lớn\n"
+msgid "%12u large file\n"
+msgid_plural "%12u large files\n"
+msgstr[0] "%12u tập tin quá lớn\n"
 
-#: e2fsck/unix.c:175
+#: e2fsck/unix.c:196
 #, c-format
 msgid ""
 "\n"
-"%8u regular file\n"
+"%12u regular file\n"
 msgid_plural ""
 "\n"
-"%8u regular files\n"
+"%12u regular files\n"
 msgstr[0] ""
 "\n"
-"%8u tập tin thường\n"
+"%12u tập tin thường\n"
 
-#: e2fsck/unix.c:177
+#: e2fsck/unix.c:198
 #, c-format
-msgid "%8u directory\n"
-msgid_plural "%8u directories\n"
-msgstr[0] "%8u thư mục\n"
+msgid "%12u directory\n"
+msgid_plural "%12u directories\n"
+msgstr[0] "%12u thư mục\n"
 
-#: e2fsck/unix.c:179
+#: e2fsck/unix.c:200
 #, c-format
-msgid "%8u character device file\n"
-msgid_plural "%8u character device files\n"
-msgstr[0] "%8u thiết bị ký tự\n"
+msgid "%12u character device file\n"
+msgid_plural "%12u character device files\n"
+msgstr[0] "%12u thiết bị ký tự\n"
 
-#: e2fsck/unix.c:182
+#: e2fsck/unix.c:203
 #, c-format
-msgid "%8u block device file\n"
-msgid_plural "%8u block device files\n"
-msgstr[0] "%8u tệp tin thiết bị khối\n"
+msgid "%12u block device file\n"
+msgid_plural "%12u block device files\n"
+msgstr[0] "%12u tệp tin thiết bị khối\n"
 
-#: e2fsck/unix.c:184
+#: e2fsck/unix.c:205
 #, c-format
-msgid "%8u fifo\n"
-msgid_plural "%8u fifos\n"
-msgstr[0] "%8u fifo\n"
+msgid "%12u fifo\n"
+msgid_plural "%12u fifos\n"
+msgstr[0] "%12u fifo\n"
 
-#: e2fsck/unix.c:186
+#: e2fsck/unix.c:207
 #, c-format
-msgid "%8u link\n"
-msgid_plural "%8u links\n"
-msgstr[0] "%8u liên kết\n"
+msgid "%12u link\n"
+msgid_plural "%12u links\n"
+msgstr[0] "%12u liên kết\n"
 
-#: e2fsck/unix.c:189
+#: e2fsck/unix.c:210
 #, c-format
-msgid "%8u symbolic link"
-msgid_plural "%8u symbolic links"
-msgstr[0] "%8u liên kết tượng trưng"
+msgid "%12u symbolic link"
+msgid_plural "%12u symbolic links"
+msgstr[0] "%12u liên kết tượng trưng"
 
-#: e2fsck/unix.c:191
+#: e2fsck/unix.c:212
 #, c-format
 msgid " (%u fast symbolic link)\n"
 msgid_plural " (%u fast symbolic links)\n"
 msgstr[0] " (%u liên kết tượng trưng nhanh)\n"
 
-#: e2fsck/unix.c:195
+#: e2fsck/unix.c:216
 #, c-format
-msgid "%8u socket\n"
-msgid_plural "%8u sockets\n"
-msgstr[0] "%8u ổ cắm\n"
+msgid "%12u socket\n"
+msgid_plural "%12u sockets\n"
+msgstr[0] "%12u socket\n"
 
-#: e2fsck/unix.c:198
+#: e2fsck/unix.c:220
 #, c-format
-msgid "%8u file\n"
-msgid_plural "%8u files\n"
-msgstr[0] "%8u tệp tin\n"
+msgid "%12u file\n"
+msgid_plural "%12u files\n"
+msgstr[0] "%12u tập tin\n"
 
-#: e2fsck/unix.c:212 misc/badblocks.c:983 misc/tune2fs.c:1979 misc/util.c:147
+#: e2fsck/unix.c:234 misc/badblocks.c:983 misc/tune2fs.c:1970 misc/util.c:147
 #: resize/main.c:247
 #, c-format
 msgid "while determining whether %s is mounted."
 msgstr "trong khi quyết định nếu %s đã gắn kết chưa."
 
-#: e2fsck/unix.c:230
-#, fuzzy, c-format
+#: e2fsck/unix.c:254
+#, c-format
 msgid "Warning!  %s is %s.\n"
-msgstr "Cảnh báo: %s đã gắn kết.\n"
+msgstr "Cảnh báo!  %s là %s.\n"
 
-#: e2fsck/unix.c:237
+#: e2fsck/unix.c:261
 #, c-format
 msgid "%s is %s.\n"
-msgstr ""
+msgstr "%s là %s.\n"
 
-#: e2fsck/unix.c:240
+#: e2fsck/unix.c:264
 msgid ""
 "Cannot continue, aborting.\n"
 "\n"
@@ -2762,7 +2739,7 @@ msgstr ""
 "Không thể tiếp tục nên hủy bỏ.\n"
 "\n"
 
-#: e2fsck/unix.c:242
+#: e2fsck/unix.c:266
 msgid ""
 "\n"
 "\n"
@@ -2772,83 +2749,83 @@ msgid ""
 msgstr ""
 "\n"
 "\n"
-"\a\a\a\aCẢNH BÁO !!!  Hệ thống tập tin đã gắn kết. Vẫn tiếp tục thì\n"
+"CẢNH BÁO!!!  Hệ thống tập tin đã gắn kết. Vẫn tiếp tục thì\n"
 "đây có thể là nguyên nhân ***LÀM HỎNG NẶNG*** hệ thống tập tin.\n"
 "\n"
 
-#: e2fsck/unix.c:247
+#: e2fsck/unix.c:271
 msgid "Do you really want to continue"
 msgstr "Bạn thực sự muốn tiếp tục"
 
-#: e2fsck/unix.c:249
+#: e2fsck/unix.c:273
 #, c-format
 msgid "check aborted.\n"
 msgstr "kiểm tra bị hủy bỏ.\n"
 
-#: e2fsck/unix.c:339
+#: e2fsck/unix.c:363
 msgid " contains a file system with errors"
 msgstr " chứa hệ thống tập tin có lỗi"
 
-#: e2fsck/unix.c:341
+#: e2fsck/unix.c:365
 msgid " was not cleanly unmounted"
 msgstr " chưa tháo gắn kết sạch"
 
-#: e2fsck/unix.c:343
+#: e2fsck/unix.c:367
 msgid " primary superblock features different from backup"
-msgstr "các tính năng của siêu khối chính khác với bản sao lưu"
+msgstr " tính năng của siêu khối chính khác với bản sao lưu"
 
-#: e2fsck/unix.c:347
+#: e2fsck/unix.c:371
 #, c-format
 msgid " has been mounted %u times without being checked"
 msgstr " đã được gắn kết %u lần mà không được kiểm tra"
 
-#: e2fsck/unix.c:354
+#: e2fsck/unix.c:378
 msgid " has filesystem last checked time in the future"
-msgstr "có giờ kiểm tra hệ thống tập tin lần cuối cùng trong tương lai"
+msgstr " có giờ kiểm tra hệ thống tập tin lần cuối cùng trong tương lai"
 
-#: e2fsck/unix.c:360
+#: e2fsck/unix.c:384
 #, c-format
 msgid " has gone %u days without being checked"
 msgstr " đã chạy trong %u ngày mà không được kiểm tra"
 
-#: e2fsck/unix.c:369
+#: e2fsck/unix.c:393
 msgid ", check forced.\n"
 msgstr ", kiểm tra bị ép buộc.\n"
 
-#: e2fsck/unix.c:402
+#: e2fsck/unix.c:426
 #, c-format
 msgid "%s: clean, %u/%u files, %llu/%llu blocks"
 msgstr "%s: sạch, %u/%u tập tin, %llu/%llu khối"
 
-#: e2fsck/unix.c:421
+#: e2fsck/unix.c:445
 msgid " (check deferred; on battery)"
 msgstr " (kiểm tra bị hoãn; chạy bằng pin)"
 
-#: e2fsck/unix.c:424
+#: e2fsck/unix.c:448
 msgid " (check after next mount)"
 msgstr " (kiểm tra sau lần kế tiếp gắn kết)"
 
-#: e2fsck/unix.c:426
+#: e2fsck/unix.c:450
 #, c-format
 msgid " (check in %ld mounts)"
 msgstr " (kiểm tra sau %ld lần gắn kết)"
 
-#: e2fsck/unix.c:576
+#: e2fsck/unix.c:600
 #, c-format
 msgid "ERROR: Couldn't open /dev/null (%s)\n"
-msgstr "LỖI: không thể mở « /dev/null » (%s)\n"
+msgstr "LỖI: không thể mở “/dev/null” (%s)\n"
 
-#: e2fsck/unix.c:645
+#: e2fsck/unix.c:669
 #, c-format
 msgid "Invalid EA version.\n"
 msgstr "Phiên bản EA không hợp lệ.\n"
 
-#: e2fsck/unix.c:672
+#: e2fsck/unix.c:696
 #, c-format
 msgid "Unknown extended option: %s\n"
 msgstr "Tùy chọn đã mở rộng lạ: %s\n"
 
-#: e2fsck/unix.c:697
+#: e2fsck/unix.c:721
 #, c-format
 msgid ""
 "Syntax error in e2fsck config file (%s, line #%d)\n"
@@ -2857,58 +2834,57 @@ msgstr ""
 "Gặp lỗi cú pháp trong tập tin cấu hình e2fsck (%s, dòng số %d)\n"
 "\t%s\n"
 
-#: e2fsck/unix.c:766
+#: e2fsck/unix.c:790
 #, c-format
 msgid "Error validating file descriptor %d: %s\n"
 msgstr "Gặp lỗi khi hợp lệ hóa mô tả tập tin %d: %s\n"
 
-#: e2fsck/unix.c:770
+#: e2fsck/unix.c:794
 msgid "Invalid completion information file descriptor"
 msgstr "Mô tả tập tin thông tin hoà chỉnh không hợp lệ"
 
-#: e2fsck/unix.c:785
+#: e2fsck/unix.c:809
 msgid "Only one of the options -p/-a, -n or -y may be specified."
-msgstr "Có thể xác định chỉ một của những tùy chọn -p/-a, -n và -y."
+msgstr "Có thể chỉ ra một trong những tùy chọn -p/-a, -n và -y."
 
-#: e2fsck/unix.c:806
+#: e2fsck/unix.c:830
 #, c-format
 msgid "The -t option is not supported on this version of e2fsck.\n"
-msgstr "Tùy chọn « -t » không được hỗ trợ trong phiên bản e2fsck này.\n"
+msgstr "Tùy chọn “-t” không được hỗ trợ trong phiên bản e2fsck này.\n"
 
-#: e2fsck/unix.c:837 e2fsck/unix.c:909 misc/tune2fs.c:811 misc/tune2fs.c:1100
-#: misc/tune2fs.c:1118
+#: e2fsck/unix.c:861 e2fsck/unix.c:933 misc/tune2fs.c:802 misc/tune2fs.c:1091
+#: misc/tune2fs.c:1109
 #, c-format
 msgid "Unable to resolve '%s'"
-msgstr "Không thể quyết định « %s »"
+msgstr "Không thể quyết định “%s”"
 
-#: e2fsck/unix.c:888
+#: e2fsck/unix.c:912
 msgid "The -n and -D options are incompatible."
-msgstr "Hai tùy chọn « -n » và « -D » không tương thích với nhau."
+msgstr "Hai tùy chọn “-n” và “-D” không tương thích với nhau."
 
-#: e2fsck/unix.c:893
+#: e2fsck/unix.c:917
 msgid "The -n and -c options are incompatible."
-msgstr "Hai tùy chọn « -n » và « -c » không tương thích với nhau."
+msgstr "Hai tùy chọn “-n” và “-c” không tương thích với nhau."
 
-#: e2fsck/unix.c:898
+#: e2fsck/unix.c:922
 msgid "The -n and -l/-L options are incompatible."
-msgstr "Hai tùy chọn « -n » và « -l/-L » không tương thích với nhau."
+msgstr "Hai tùy chọn “-n” và “-l/-L” không tương thích với nhau."
 
-#: e2fsck/unix.c:943
+#: e2fsck/unix.c:976
 #, c-format
 msgid "The -c and the -l/-L options may not be both used at the same time.\n"
-msgstr ""
-"Không cho phép sử dụng đồng thời cả hai tùy chọn « --c » và « --l/L ».\n"
+msgstr "Không cho phép sử dụng đồng thời cả hai tùy chọn “--c” và “--l/L”.\n"
 
-#: e2fsck/unix.c:991
+#: e2fsck/unix.c:1024
 #, c-format
 msgid ""
 "E2FSCK_JBD_DEBUG \"%s\" not an integer\n"
 "\n"
 msgstr ""
-"E2FSCK_JBD_DEBUG « %s » không phải số nguyên\n"
+"E2FSCK_JBD_DEBUG “%s” không phải số nguyên\n"
 "\n"
 
-#: e2fsck/unix.c:1000
+#: e2fsck/unix.c:1033
 #, c-format
 msgid ""
 "\n"
@@ -2916,74 +2892,69 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Đối số không thuộc số không hợp lệ đối với -%c (« %s »)\n"
+"Đối số không thuộc số không hợp lệ đối với -%c (“%s”)\n"
 "\n"
 
-#: e2fsck/unix.c:1089
+#: e2fsck/unix.c:1122
 #, c-format
-msgid ""
-"MMP interval is %u seconds and total wait time is %u seconds. Please "
-"wait...\n"
-msgstr ""
-"khoảng nhịp MMP là %u giây cộng với tổng thời gian chờ là %u giây. Vui lòng "
-"chờ...\n"
+msgid "MMP interval is %u seconds and total wait time is %u seconds. Please wait...\n"
+msgstr "khoảng nhịp MMP là %u giây cộng với tổng thời gian chờ là %u giây. Vui lòng chờ...\n"
 
 # Item in the main menu to select this package
-#: e2fsck/unix.c:1106 e2fsck/unix.c:1111
+#: e2fsck/unix.c:1139 e2fsck/unix.c:1144
 msgid "while checking MMP block"
 msgstr "trong khi kiểm tra khối MMP"
 
-#: e2fsck/unix.c:1113 misc/tune2fs.c:1912
+#: e2fsck/unix.c:1146 misc/tune2fs.c:1903
 msgid ""
 "If you are sure the filesystem is not in use on any node, run:\n"
 "'tune2fs -f -E clear_mmp {device}'\n"
 msgstr ""
-"Nếu bạn không chắc là hệ thống tệp tin không đang sử dụng bất kỳ nút nào, "
-"chạy lệnh:\n"
-"'tune2fs -f -E clear_mmp {thiết_bị}'\n"
+"Nếu bạn không chắc là hệ thống tập tin không đang sử dụng bất kỳ nút nào, chạy lệnh:\n"
+"“tune2fs -f -E clear_mmp {thiết_bị}”\n"
 
-#: e2fsck/unix.c:1163
+#: e2fsck/unix.c:1196
 #, c-format
 msgid "Error: ext2fs library version out of date!\n"
 msgstr "Lỗi: phiên bản thư viện ext2fs quá cũ.\n"
 
-#: e2fsck/unix.c:1171
+#: e2fsck/unix.c:1204
 msgid "while trying to initialize program"
 msgstr "trong khi thử sở khởi chương trình"
 
-#: e2fsck/unix.c:1194
+#: e2fsck/unix.c:1227
 #, c-format
 msgid "\tUsing %s, %s\n"
 msgstr "\tDùng %s, %s\n"
 
-#: e2fsck/unix.c:1206
+#: e2fsck/unix.c:1239
 msgid "need terminal for interactive repairs"
-msgstr "cần thiết thiết bị cuối để sửa chữa tương tác"
+msgstr "cần thiết bị cuối để sửa chữa theo kiểu tương tác"
 
-#: e2fsck/unix.c:1256
+#: e2fsck/unix.c:1292
 #, c-format
 msgid "%s: %s trying backup blocks...\n"
-msgstr "%s %s đang thử các khối dự trữ...\n"
+msgstr "%s: %s đang thử các khối dự trữ...\n"
 
-#: e2fsck/unix.c:1258
+#: e2fsck/unix.c:1294
 msgid "Superblock invalid,"
 msgstr "Siêu khối không hợp lệ,"
 
-#: e2fsck/unix.c:1259
+#: e2fsck/unix.c:1295
 msgid "Group descriptors look bad..."
 msgstr "Có vẻ là các mô tả nhóm sai..."
 
-#: e2fsck/unix.c:1269
+#: e2fsck/unix.c:1305
 #, c-format
 msgid "%s: %s while using the backup blocks"
 msgstr "%s: %s trong khi đọc nút thông tin khối hỏng"
 
-#: e2fsck/unix.c:1273
+#: e2fsck/unix.c:1309
 #, c-format
 msgid "%s: going back to original superblock\n"
 msgstr "%s: đang trở về siêu khối gốc\n"
 
-#: e2fsck/unix.c:1301
+#: e2fsck/unix.c:1337
 msgid ""
 "The filesystem revision is apparently too high for this version of e2fsck.\n"
 "(Or the filesystem superblock is corrupt)\n"
@@ -2993,104 +2964,96 @@ msgstr ""
 "(hoặc siêu khối hệ thống tập tin bị hỏng).\n"
 "\n"
 
-#: e2fsck/unix.c:1307
+#: e2fsck/unix.c:1343
 msgid "Could this be a zero-length partition?\n"
 msgstr "Phân vùng này có thể có độ dài bằng không ?\n"
 
-#: e2fsck/unix.c:1310
+#: e2fsck/unix.c:1346
 #, c-format
 msgid "You must have %s access to the filesystem or be root\n"
-msgstr ""
-"Bạn phải có quyền truy cập %s vào hệ thống tập tin, hoặc là người chủ "
-"(root)\n"
+msgstr "Bạn phải có quyền truy cập %s vào hệ thống tập tin, hoặc là người chủ (root)\n"
 
-#: e2fsck/unix.c:1315
+#: e2fsck/unix.c:1351
 msgid "Possibly non-existent or swap device?\n"
 msgstr "Có thể là thiết bị không tồn tại, hoặc thiết bị trao đổi ?\n"
 
-#: e2fsck/unix.c:1318
+#: e2fsck/unix.c:1354
 msgid "Filesystem mounted or opened exclusively by another program?\n"
-msgstr ""
-"Hệ thống tập tin đã được gắn kết hay mở hoàn toàn bởi chương trình khác ?\n"
+msgstr "Hệ thống tập tin đã được gắn kết hay mở hoàn toàn bởi chương trình khác ?\n"
 
-#: e2fsck/unix.c:1321
+#: e2fsck/unix.c:1357
 msgid "Possibly non-existent device?\n"
 msgstr "Có thể là thiết bị không tồn tại?\n"
 
-#: e2fsck/unix.c:1324
+#: e2fsck/unix.c:1360
 msgid ""
 "Disk write-protected; use the -n option to do a read-only\n"
 "check of the device.\n"
 msgstr ""
-"Đĩa bị chống ghi; hãy dùng tùy chọn « -n » để chạy\n"
+"Đĩa bị chống ghi; hãy dùng tùy chọn “-n” để chạy\n"
 "việc kiểm tra chỉ đọc trên thiết bị đó.\n"
 
-#: e2fsck/unix.c:1389
+#: e2fsck/unix.c:1425
 msgid "Get a newer version of e2fsck!"
-msgstr "Lấy phiên bản e2fsck mới hơn."
+msgstr "Lấy phiên bản e2fsck mới hơn!"
 
-#: e2fsck/unix.c:1437
+#: e2fsck/unix.c:1469
 #, c-format
 msgid "while checking ext3 journal for %s"
 msgstr "trong khi kiểm tra nhật ký ext3 tìm %s"
 
-#: e2fsck/unix.c:1448
-msgid ""
-"Warning: skipping journal recovery because doing a read-only filesystem "
-"check.\n"
-msgstr ""
-"Cảnh báo: đang bỏ qua việc phục hồi nhật ký vì đang kiểm tra hệ thống tập "
-"tin một cách chỉ đọc.\n"
+#: e2fsck/unix.c:1480
+msgid "Warning: skipping journal recovery because doing a read-only filesystem check.\n"
+msgstr "Cảnh báo: đang bỏ qua việc phục hồi nhật ký vì đang kiểm tra hệ thống tập tin một cách chỉ đọc.\n"
 
-#: e2fsck/unix.c:1461
+#: e2fsck/unix.c:1493
 #, c-format
 msgid "unable to set superblock flags on %s\n"
 msgstr "không thể đặt cờ siêu khối trên %s\n"
 
-#: e2fsck/unix.c:1467
+#: e2fsck/unix.c:1499
 #, c-format
 msgid "while recovering ext3 journal of %s"
 msgstr "trong khi phục hồi nhật ký ext3 của %s"
 
-#: e2fsck/unix.c:1492
+#: e2fsck/unix.c:1523
 #, c-format
 msgid "%s has unsupported feature(s):"
 msgstr "%s có tính năng không được hỗ trợ:"
 
-#: e2fsck/unix.c:1507
+#: e2fsck/unix.c:1538
 #, c-format
 msgid "%s: warning: compression support is experimental.\n"
 msgstr "%s: cảnh báo: sự hỗ trợ khả năng nén là thực nghiệm.\n"
 
-#: e2fsck/unix.c:1513
+#: e2fsck/unix.c:1544
 #, c-format
 msgid ""
 "%s: e2fsck not compiled with HTREE support,\n"
 "\tbut filesystem %s has HTREE directories.\n"
 msgstr ""
-"%s: e2fsck không được biên dịch với khả năng hỗ trợ HCÂY,\n"
-"\tnhưng hệ thống tập tin %s có thư mục HCÂY.\n"
+"%s: e2fsck không được biên dịch với khả năng hỗ trợ HTREE,\n"
+"\tnhưng hệ thống tập tin %s có thư mục HTREE.\n"
 
-#: e2fsck/unix.c:1565
+#: e2fsck/unix.c:1596
 #, c-format
 msgid "%s: %s while reading bad blocks inode\n"
 msgstr "%s: %s trong khi đọc nút thông tin khối hỏng\n"
 
-#: e2fsck/unix.c:1568
+#: e2fsck/unix.c:1599
 msgid "This doesn't bode well, but we'll try to go on...\n"
-msgstr ""
-"Đây không phải báo trước điềm hay, nhưng tiến trình này sẽ thử tiếp tục...\n"
+msgstr "Đây không phải báo trước điềm hay, nhưng tiến trình này sẽ thử tiếp tục...\n"
 
-#: e2fsck/unix.c:1609
+#: e2fsck/unix.c:1640
 #, c-format
 msgid "Creating journal (%d blocks): "
 msgstr "Đang tạo nhật ký (%d khối): "
 
-#: e2fsck/unix.c:1619
+#: e2fsck/unix.c:1650
 msgid " Done.\n"
-msgstr " Hoàn tất\n"
+msgstr " Hoàn tất.\n"
 
-#: e2fsck/unix.c:1620
+#: e2fsck/unix.c:1651
 msgid ""
 "\n"
 "*** journal has been re-created - filesystem is now ext3 again ***\n"
@@ -3098,24 +3061,24 @@ msgstr ""
 "\n"
 "••• nhật ký đã được tạo lại — hệ thống tập tin lúc này là ext3 lại •••\n"
 
-#: e2fsck/unix.c:1643
+#: e2fsck/unix.c:1674
 msgid "Restarting e2fsck from the beginning...\n"
 msgstr "Đang khởi chạy lại hoàn toàn e2fsck...\n"
 
-#: e2fsck/unix.c:1647
+#: e2fsck/unix.c:1678
 msgid "while resetting context"
 msgstr "trong khi đặt lại ngữ cảnh"
 
-#: e2fsck/unix.c:1654
+#: e2fsck/unix.c:1685
 #, c-format
 msgid "%s: e2fsck canceled.\n"
-msgstr "%s: e2fsck bị thôi.\n"
+msgstr "%s: e2fsck bị hủy bỏ.\n"
 
-#: e2fsck/unix.c:1659
+#: e2fsck/unix.c:1690
 msgid "aborted"
 msgstr "bị hủy bỏ"
 
-#: e2fsck/unix.c:1671 e2fsck/util.c:67
+#: e2fsck/unix.c:1702 e2fsck/util.c:67
 #, c-format
 msgid ""
 "\n"
@@ -3124,12 +3087,12 @@ msgstr ""
 "\n"
 "%s: ••••• HỆ THỐNG TẬP TIN BỊ SỬA ĐỔI •••••\n"
 
-#: e2fsck/unix.c:1675
+#: e2fsck/unix.c:1706
 #, c-format
 msgid "%s: ***** REBOOT LINUX *****\n"
 msgstr "%s: ••••• HÃY KHỞI ĐỘNG LẠI LINUX •••••\n"
 
-#: e2fsck/unix.c:1683 e2fsck/util.c:73
+#: e2fsck/unix.c:1714 e2fsck/util.c:73
 #, c-format
 msgid ""
 "\n"
@@ -3137,20 +3100,20 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"%s: •••••••••• CẢNH BÁO: hệ thống tập tin vẫn còn có lỗi ••••••••••\n"
+"%s: •••••••••• CẢNH BÁO: Hệ thống tập tin vẫn còn có lỗi ••••••••••\n"
 "\n"
 
-#: e2fsck/unix.c:1723
+#: e2fsck/unix.c:1754
 msgid "while setting block group checksum info"
 msgstr "trong khi đặt thông tin tổng kiểm nhóm khối"
 
 #: e2fsck/util.c:189 misc/util.c:70
 msgid "yY"
-msgstr "cC"
+msgstr "cCyY"
 
 #: e2fsck/util.c:190
 msgid "nN"
-msgstr "kK"
+msgstr "kKnN"
 
 #: e2fsck/util.c:204
 msgid "<y>"
@@ -3166,7 +3129,7 @@ msgstr " (c/k)"
 
 #: e2fsck/util.c:222
 msgid "cancelled!\n"
-msgstr "bị thôi !\n"
+msgstr "đã hủy!\n"
 
 #: e2fsck/util.c:237
 msgid "yes\n"
@@ -3236,7 +3199,7 @@ msgstr ""
 "\n"
 "\n"
 "%s: MÂU THUẪN BẤT THƯỜNG: HÃY TỰ CHẠY fsck.\n"
-"\t(tức là không có tùy chọn « -a » hay « -p »).\n"
+"\t(tức là không có tùy chọn “-a” hay “-p”).\n"
 
 #: e2fsck/util.c:395
 #, c-format
@@ -3273,27 +3236,22 @@ msgid "while allocating zeroizing buffer"
 msgstr "trong khi cấp phát bộ đếm làm số không"
 
 #: e2fsck/util.c:788
-msgid ""
-"UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is "
-"running.\n"
-msgstr ""
-"MÂU THUẪN: hệ thống tệp tin đang được sửa chữa trong khi lệnh fsck đang "
-"chạy.\n"
+msgid "UNEXPECTED INCONSISTENCY: the filesystem is being modified while fsck is running.\n"
+msgstr "MÂU THUẪN: hệ thống tập tin đang được sửa chữa trong khi lệnh fsck đang chạy.\n"
 
 #: misc/badblocks.c:69
 msgid "done                                                 \n"
-msgstr "hoàn tất                                \n"
+msgstr "hoàn tất                                             \n"
 
 #: misc/badblocks.c:93
 #, c-format
 msgid ""
 "Usage: %s [-b block_size] [-i input_file] [-o output_file] [-svwnf]\n"
-"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e "
-"max_bad_blocks]\n"
+"       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]\n"
 "       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]\n"
 "       device [last_block [first_block]]\n"
 msgstr ""
-"Sử dụng: %s [-b cỡ_khối] [-i tập_tin_nhập] [-o tập_tin_xuất] [-svwnf]\n"
+"Cách dùng: %s [-b cỡ_khối] [-i tập_tin_nhập] [-o tập_tin_xuất] [-svwnf]\n"
 "       [-c số_khối_cùng_lúc] [-d hệ_số_đợi_đọc] [-e số_tối_đa_khối_xấu]\n"
 "       [-p số_lần_qua] [-t mẫu_thử [-t mẫu_thử [...]]]\n"
 "       thiết_bị [khối_cuối [khối_đầu]]\n"
@@ -3304,7 +3262,7 @@ msgid ""
 "%s: The -n and -w options are mutually exclusive.\n"
 "\n"
 msgstr ""
-"%s: hai tùy chọn « -n » và « -w » loại từ lẫn nhau.\n"
+"%s: hai tùy chọn “-n” và “-w” loại từ lẫn nhau.\n"
 "\n"
 
 #: misc/badblocks.c:219
@@ -3327,11 +3285,11 @@ msgstr "trong khi tìm nơi"
 #: misc/badblocks.c:383
 #, c-format
 msgid "Weird value (%ld) in do_read\n"
-msgstr "Giá trị lạ (%ld) trong việc đọc « do_read »\n"
+msgstr "Giá trị lạ (%ld) trong việc đọc “do_read”\n"
 
 #: misc/badblocks.c:469
 msgid "during ext2fs_sync_device"
-msgstr "trong khi đồng bộ hoá thiết bị « ext2fs_sync_device »"
+msgstr "trong khi đồng bộ hoá thiết bị “ext2fs_sync_device”"
 
 #: misc/badblocks.c:489 misc/badblocks.c:749
 msgid "while beginning bad block list iteration"
@@ -3396,13 +3354,13 @@ msgstr "trong khi thử ra ghi dữ liệu, khối %lu"
 #: misc/badblocks.c:988 misc/util.c:152
 #, c-format
 msgid "%s is mounted; "
-msgstr "%s đã gắn kết; "
+msgstr "%s đã được gắn kết; "
 
 #: misc/badblocks.c:990
 msgid "badblocks forced anyway.  Hope /etc/mtab is incorrect.\n"
 msgstr ""
 "tùy chọn khối sai (badblocks) vẫn bị ép buộc.\n"
-"Mong « /etc/mtab » không đúng.\n"
+"Mong “/etc/mtab” không đúng.\n"
 
 #: misc/badblocks.c:995
 msgid "it's not safe to run badblocks!\n"
@@ -3411,7 +3369,7 @@ msgstr "Không an toàn khi chạy badblocks.\n"
 #: misc/badblocks.c:1000 misc/util.c:163
 #, c-format
 msgid "%s is apparently in use by the system; "
-msgstr "Có vẻ là %s đang bị hệ thống dùng; "
+msgstr "Có vẻ là %s đang được hệ thống dùng; "
 
 #: misc/badblocks.c:1003
 msgid "badblocks forced anyway.\n"
@@ -3429,8 +3387,7 @@ msgstr "không thể cấp phát bộ nhớ cho mẫu thử (test_pattern) — %
 
 #: misc/badblocks.c:1163
 msgid "Maximum of one test_pattern may be specified in read-only mode"
-msgstr ""
-"Trong chế độ chỉ đọc, có thể xác định tối đa một mẫu thử (test_pattern)"
+msgstr "Trong chế độ chỉ đọc, có thể xác định tối đa một mẫu thử (test_pattern)"
 
 #: misc/badblocks.c:1169
 msgid "Random test_pattern is not allowed in read-only mode"
@@ -3476,66 +3433,66 @@ msgstr "Qua xong, tìm thấy %u khối sai. (%d/%d/%d errors)\n"
 
 #: misc/chattr.c:86
 #, c-format
-msgid "Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n"
-msgstr "Sử dụng: %s [-RVf] [-+=AacDdeijsSu] [-v phiên_bản] tập_tin...\n"
+msgid "Usage: %s [-RVf] [-+=AaCcDdeijsSu] [-v version] files...\n"
+msgstr "Cách dùng: %s [-RVf] [-+=AaCcDdeijsSu] [-v phiên_bản] tập_tin...\n"
 
-#: misc/chattr.c:154
+#: misc/chattr.c:155
 #, c-format
 msgid "bad version - %s\n"
 msgstr "phiên bản sai — %s\n"
 
-#: misc/chattr.c:201 misc/lsattr.c:116
+#: misc/chattr.c:202 misc/lsattr.c:116
 #, c-format
 msgid "while trying to stat %s"
 msgstr "trong khi thử lấy các thông tin về %s"
 
-#: misc/chattr.c:208
+#: misc/chattr.c:209
 #, c-format
 msgid "while reading flags on %s"
 msgstr "trong khi đọc các cờ trên %s"
 
-#: misc/chattr.c:217 misc/chattr.c:236
+#: misc/chattr.c:218 misc/chattr.c:237
 #, c-format
 msgid "Clearing extent flag not supported on %s"
 msgstr "Chức năng xoá sạch cờ tầm không được hỗ trợ trên %s"
 
-#: misc/chattr.c:222 misc/chattr.c:241
+#: misc/chattr.c:223 misc/chattr.c:242
 #, c-format
 msgid "Flags of %s set as "
 msgstr "Các cờ của %s đã đặt thành "
 
-#: misc/chattr.c:250
+#: misc/chattr.c:251
 #, c-format
 msgid "while setting flags on %s"
 msgstr "trong khi đặt các cờ trên %s"
 
-#: misc/chattr.c:258
+#: misc/chattr.c:259
 #, c-format
 msgid "Version of %s set as %lu\n"
 msgstr "Phiên bản %s được đặt thành %lu\n"
 
-#: misc/chattr.c:262
+#: misc/chattr.c:263
 #, c-format
 msgid "while setting version on %s"
 msgstr "trong khi đặt phiên bản trên %s"
 
-#: misc/chattr.c:282
+#: misc/chattr.c:283
 #, c-format
 msgid "Couldn't allocate path variable in chattr_dir_proc"
 msgstr "Không thể cấp phát biến đường dẫn trong chattr_dir_proc"
 
-#: misc/chattr.c:322
+#: misc/chattr.c:323
 msgid "= is incompatible with - and +\n"
-msgstr "= không tương thích với « - » và « + »\n"
+msgstr "= không tương thích với “-” và “+”\n"
 
-#: misc/chattr.c:330
+#: misc/chattr.c:331
 msgid "Must use '-v', =, - or +\n"
-msgstr "Phải dùng « -v », « = », « - » hay « + »\n"
+msgstr "Phải dùng “-v”, “=”, “-” hay “+”\n"
 
 #: misc/dumpe2fs.c:55
 #, c-format
 msgid "Usage: %s [-bfhixV] [-o superblock=<num>] [-o blocksize=<num>] device\n"
-msgstr "Sử dụng: %s [-bfhixV] [-o siêu_khối=<số>] [-o cỡ_khối=<số>] thiết_bị\n"
+msgstr "Cách dùng: %s [-bfhixV] [-o siêu_khối=<số>] [-o cỡ_khối=<số>] thiết_bị\n"
 
 #: misc/dumpe2fs.c:159
 msgid "blocks"
@@ -3558,7 +3515,7 @@ msgstr "  Tổng kiểm 0x%04x"
 #: misc/dumpe2fs.c:206
 #, c-format
 msgid " (EXPECTED 0x%04x)"
-msgstr " (MONG ĐỢI 0x%04x)"
+msgstr " (CẦN      0x%04x)"
 
 #: misc/dumpe2fs.c:207
 #, c-format
@@ -3659,11 +3616,11 @@ msgstr "trong khi đọc siêu khối nhật ký"
 #: misc/dumpe2fs.c:355
 #, c-format
 msgid "Journal features:        "
-msgstr "Tính năng nhật ký:        "
+msgstr "Tính năng nhật ký:       "
 
 #: misc/dumpe2fs.c:368
 msgid "Journal size:             "
-msgstr "Kích cỡ nhật ký:             "
+msgstr "Kích cỡ nhật ký:          "
 
 #: misc/dumpe2fs.c:379
 #, c-format
@@ -3672,14 +3629,14 @@ msgid ""
 "Journal sequence:         0x%08x\n"
 "Journal start:            %u\n"
 msgstr ""
-"Chiều dài nhật ký:         %u\n"
-"Dãy nhật ký:               0x%08x\n"
-"Đầu nhật ký:               %u\n"
+"Chiều dài nhật ký:        %u\n"
+"Dãy nhật ký:              0x%08x\n"
+"Đầu nhật ký:              %u\n"
 
 #: misc/dumpe2fs.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "Journal errno:            %d\n"
-msgstr "Người dùng nhật ký:            %s\n"
+msgstr "Lỗi Journal:              %d\n"
 
 #: misc/dumpe2fs.c:401 misc/tune2fs.c:218
 msgid "while reading journal superblock"
@@ -3701,22 +3658,22 @@ msgid ""
 "Journal number of users:  %u\n"
 msgstr ""
 "\n"
-"Kích cỡ khối nhật ký:       \t%u\n"
-"Độ dài nhật ký:         \t\t%u\n"
-"Khối đầu nhật ký:      \t\t%u\n"
-"Dãy nhật ký:         \t\t\t0x%08x\n"
-"Đầu nhật ký:            \t\t%u\n"
-"Số người dùng nhật ký:  \t%u\n"
+"Kích cỡ khối nhật ký:     %u\n"
+"Độ dài nhật ký:           %u\n"
+"Khối đầu nhật ký:         %u\n"
+"Dãy nhật ký:              0x%08x\n"
+"Đầu nhật ký:              %u\n"
+"Số người dùng nhật ký:    %u\n"
 
 #: misc/dumpe2fs.c:426
 #, c-format
 msgid "Journal users:            %s\n"
-msgstr "Người dùng nhật ký:            %s\n"
+msgstr "Người dùng nhật ký:       %s\n"
 
-#: misc/dumpe2fs.c:442 misc/mke2fs.c:662 misc/tune2fs.c:1137
+#: misc/dumpe2fs.c:442 misc/mke2fs.c:665 misc/tune2fs.c:1128
 #, c-format
 msgid "Couldn't allocate memory to parse options!\n"
-msgstr "Không thể cấp phát bộ nhớ để phân tách tùy chọn !\n"
+msgstr "Không thể cấp phát bộ nhớ để phân tách tùy chọn!\n"
 
 #: misc/dumpe2fs.c:468
 #, c-format
@@ -3742,21 +3699,21 @@ msgid ""
 "\tblocksize=<blocksize>\n"
 msgstr ""
 "\n"
-"Sai xác định tùy chọn đã mở rộng: %s\n"
+"Chỉ ra tùy chọn mở rộng sai: %s\n"
 "\n"
 "Các tùy chọn đã mở rộng cũng định giới bằng dấu phẩy, có thể chấp nhận\n"
-"đối số được ngụ ý với dấu bằng « = ».\n"
+"đối số được ngụ ý với dấu bằng “=”.\n"
 "\n"
 "Tùy chọn đã mở rộng hợp lệ:\n"
 "\tsuperblock=<số thứ tự siêu khối>\n"
 "\tblocksize=<kích cỡ khối>\n"
 
-#: misc/dumpe2fs.c:554 misc/mke2fs.c:1525
+#: misc/dumpe2fs.c:554 misc/mke2fs.c:1528
 #, c-format
 msgid "\tUsing %s\n"
 msgstr "\tDùng %s\n"
 
-#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1923
+#: misc/dumpe2fs.c:590 misc/e2image.c:1309 misc/tune2fs.c:1914
 #: resize/main.c:305
 #, c-format
 msgid "Couldn't find valid filesystem superblock.\n"
@@ -3774,7 +3731,7 @@ msgstr ""
 #: misc/e2image.c:87
 #, c-format
 msgid "Usage: %s [-rsIQ] device image_file\n"
-msgstr "Sử dụng: %s [-rsIQ] thiết_bị tập_tin_ảnh\n"
+msgstr "Cách dùng: %s [-rsIQ] thiết_bị tập_tin_ảnh\n"
 
 #: misc/e2image.c:135
 #, c-format
@@ -3826,7 +3783,7 @@ msgstr "e2label: gặp lỗi khi đọc siêu khối\n"
 msgid "e2label: not an ext2 filesystem\n"
 msgstr "e2label: không phải hệ thống tập tin kiểu ext2\n"
 
-#: misc/e2label.c:97 misc/tune2fs.c:2074
+#: misc/e2label.c:97 misc/tune2fs.c:2065
 #, c-format
 msgid "Warning: label too long, truncating.\n"
 msgstr "Cảnh báo: nhãn quá dài nên cắt ngắn.\n"
@@ -3841,15 +3798,15 @@ msgstr "e2label: không thể tìm nơi lại tới siêu khối\n"
 msgid "e2label: error writing superblock\n"
 msgstr "e2label: gặp lỗi khi ghi siêu khối\n"
 
-#: misc/e2label.c:117 misc/tune2fs.c:803
+#: misc/e2label.c:117 misc/tune2fs.c:794
 #, c-format
 msgid "Usage: e2label device [newlabel]\n"
-msgstr "Sử dụng: e2label thiết_bị [nhãn_mới]\n"
+msgstr "Cách dùng: e2label thiết_bị [nhãn_mới]\n"
 
 #: misc/e2undo.c:36
 #, c-format
 msgid "Usage: %s <transaction file> <filesystem>\n"
-msgstr "Sử dụng: %s <tập tin giao dịch> <hệ thống tập tin>\n"
+msgstr "Cách dùng: %s <tập tin giao dịch> <hệ thống tập tin>\n"
 
 #: misc/e2undo.c:52
 msgid "Failed to read the file system data \n"
@@ -3956,7 +3913,7 @@ msgid ""
 "with 'no' or '!'.\n"
 msgstr ""
 "Hoặc tất cả hoặc không có kiểu hệ thống tập tin được gửi qua\n"
-"cho tùy chọn « -t » phải có tiền tố « no » hay « ! ».\n"
+"cho tùy chọn “-t” phải có tiền tố “no” hay “!”.\n"
 
 #: misc/fsck.c:761
 msgid "Couldn't allocate memory for filesystem types\n"
@@ -3964,12 +3921,8 @@ msgstr "Không thể cấp phát bộ nhớ cho kiểu hế thống tập tin\n"
 
 #: misc/fsck.c:884
 #, c-format
-msgid ""
-"%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass "
-"number\n"
-msgstr ""
-"%s: đang bỏ qua dòng sai trong « /etc/fstab »: đóng kết lắp với số gửi qua "
-"fsck khác số không\n"
+msgid "%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"
+msgstr "%s: đang bỏ qua dòng sai trong “/etc/fstab”: đóng kết lắp với số gửi qua fsck khác số không\n"
 
 #: misc/fsck.c:911
 #, c-format
@@ -3986,10 +3939,9 @@ msgid "--waiting-- (pass %d)\n"
 msgstr "--đang đợi-- (lần qua %d)\n"
 
 #: misc/fsck.c:1078
-msgid ""
-"Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
+msgid "Usage: fsck [-AMNPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]\n"
 msgstr ""
-"Sử dụng: fsck [-AMNPRTV] [ -C [ fd ] ] [-t kiểu_HTT] [fs-options] [HTT ...]\n"
+"Cách dùng: fsck [-AMNPRTV] [ -C [ fd ] ] [-t kiểu_HTT] [fs-options] [HTT ...]\n"
 "\n"
 "HTT: hệ thống tập tin\n"
 
@@ -4006,7 +3958,7 @@ msgstr "%s: quá nhiều đối số\n"
 #: misc/lsattr.c:74
 #, c-format
 msgid "Usage: %s [-RVadlv] [files...]\n"
-msgstr "Sử dụng: %s [-RVadlv] [tập_tin...]\n"
+msgstr "Cách dùng: %s [-RVadlv] [tập_tin...]\n"
 
 #: misc/lsattr.c:84
 #, c-format
@@ -4018,7 +3970,7 @@ msgstr "Trong khi đọc các cờ trên %s"
 msgid "While reading version on %s"
 msgstr "Trong khi đọc phiên bản trên %s"
 
-#: misc/mke2fs.c:114
+#: misc/mke2fs.c:115
 #, c-format
 msgid ""
 "Usage: %s [-c|-l filename] [-b block-size] [-C cluster-size]\n"
@@ -4027,52 +3979,50 @@ msgid ""
 "\t[-m reserved-blocks-percentage] [-o creator-os]\n"
 "\t[-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]\n"
 "\t[-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]\n"
-"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-"
-"count]\n"
+"\t[-t fs-type] [-T usage-type ] [-U UUID] [-jnqvDFKSV] device [blocks-count]\n"
 msgstr ""
-"Sử dụng: %s [-c|-l tên_tập_tin] [-b cỡ_khối] [-C cỡ_đoạn]\n"
+"Cách dùng: %s [-c|-l tên_tập_tin] [-b cỡ_khối] [-C cỡ_đoạn]\n"
 "\t[-i byte_mỗi_inode] [-I cỡ_inode] [-J tùy_chọn_nhật_ký]\n"
 "\t[-G cỡ_nhóm-flex] [-N số_lượng_inode]\n"
 "\t [-m phần_trăm_khối_dành_riêng] [-o HĐH_tạo]\n"
 "\t[-g số-khối_mỗi_nhóm] [-L nhãn_khối_tin] [-M thư_mục_lắp_cuối]\n"
 "\t[-O tính_năng[,...]] [-r bản_sửa_đổi_HTT] [-E tùy_chọn_mở_rộng[,...]]\n"
-"\t [-t kiểu_HTTT] [-T kiểu-dùng ] [-U UUID] [-jnqvDFKSV] thiết_bị "
-"[số_lượng_khối]\n"
+"\t [-t kiểu_HTTT] [-T kiểu-dùng ] [-U UUID] [-jnqvDFKSV] thiết_bị [số_lượng_khối]\n"
 "Từ viết tắt:\n"
 "\tHDH: hệ điều hành\n"
-"\tHTTT: há»\87 thá»\91ng tá»\87p tin\n"
+"\tHTTT: há»\87 thá»\91ng tập tin\n"
 
-#: misc/mke2fs.c:217
+#: misc/mke2fs.c:218
 #, c-format
 msgid "Running command: %s\n"
 msgstr "Đang chạy lệnh: %s\n"
 
-#: misc/mke2fs.c:221
+#: misc/mke2fs.c:222
 #, c-format
 msgid "while trying to run '%s'"
-msgstr "trong khi thử chạy « %s »"
+msgstr "trong khi thử chạy “%s”"
 
-#: misc/mke2fs.c:228
+#: misc/mke2fs.c:229
 msgid "while processing list of bad blocks from program"
 msgstr "trong khi xử lý danh sách các khối sai từ chương trình"
 
-#: misc/mke2fs.c:255
+#: misc/mke2fs.c:256
 #, c-format
 msgid "Block %d in primary superblock/group descriptor area bad.\n"
 msgstr "Khối %d sai trong vùng mô tả nhóm/siêu khối chính.\n"
 
-#: misc/mke2fs.c:257
+#: misc/mke2fs.c:258
 #, c-format
 msgid "Blocks %u through %u must be good in order to build a filesystem.\n"
 msgstr ""
 "Các khối trong phạm vi %u đến %u phải là tốt\n"
 "để xây dựng được hệ thống tập tin.\n"
 
-#: misc/mke2fs.c:260
+#: misc/mke2fs.c:261
 msgid "Aborting....\n"
 msgstr "Đang hủy bỏ...\n"
 
-#: misc/mke2fs.c:280
+#: misc/mke2fs.c:281
 #, c-format
 msgid ""
 "Warning: the backup superblock/group descriptors at block %u contain\n"
@@ -4082,15 +4032,15 @@ msgstr ""
 "Cảnh báo: các mô tả nhóm/siêu khối dự trữ tại khối %u chứa khối sai.\n"
 "\n"
 
-#: misc/mke2fs.c:299
+#: misc/mke2fs.c:300
 msgid "while marking bad blocks as used"
 msgstr "trong khi đánh dấu các khối sai đã được dùng"
 
-#: misc/mke2fs.c:316
+#: misc/mke2fs.c:317
 msgid "Writing inode tables: "
 msgstr "Đang ghi các bảng nút thông tin: "
 
-#: misc/mke2fs.c:337
+#: misc/mke2fs.c:339
 #, c-format
 msgid ""
 "\n"
@@ -4099,72 +4049,72 @@ msgstr ""
 "\n"
 "Không thể ghi %d khối trong bảng nút thông tin, bắt đầu tại %llu: %s\n"
 
-#: misc/mke2fs.c:351 misc/mke2fs.c:2175 misc/mke2fs.c:2429
+#: misc/mke2fs.c:353 misc/mke2fs.c:2181 misc/mke2fs.c:2435
 #, c-format
 msgid "done                            \n"
-msgstr "hoàn tất                         \n"
+msgstr "hoàn tất                        \n"
 
-#: misc/mke2fs.c:362
+#: misc/mke2fs.c:364
 msgid "while creating root dir"
 msgstr "trong khi tạo thư mục gốc"
 
-#: misc/mke2fs.c:369
+#: misc/mke2fs.c:371
 msgid "while reading root inode"
 msgstr "trong khi đọc nút thông tin gốc"
 
-#: misc/mke2fs.c:383
+#: misc/mke2fs.c:385
 msgid "while setting root inode ownership"
 msgstr "trong khi đặt quyền sở hữu nút thông tin gốc"
 
-#: misc/mke2fs.c:401
+#: misc/mke2fs.c:403
 msgid "while creating /lost+found"
 msgstr "trong khi tạo /mất+tìm"
 
-#: misc/mke2fs.c:408
+#: misc/mke2fs.c:410
 msgid "while looking up /lost+found"
 msgstr "trong khi tra tìm /mất+tìm"
 
-#: misc/mke2fs.c:421
+#: misc/mke2fs.c:423
 msgid "while expanding /lost+found"
 msgstr "trong khi mở rộng /mất+tìm"
 
-#: misc/mke2fs.c:436
+#: misc/mke2fs.c:438
 msgid "while setting bad block inode"
 msgstr "trong khi đặt nút thông tin khối sai"
 
-#: misc/mke2fs.c:463
+#: misc/mke2fs.c:465
 #, c-format
 msgid "Out of memory erasing sectors %d-%d\n"
 msgstr "Hết bộ nhớ nên xoá các rãnh ghi trong phạm vi %d đến %d\n"
 
-#: misc/mke2fs.c:473
+#: misc/mke2fs.c:475
 #, c-format
 msgid "Warning: could not read block 0: %s\n"
 msgstr "Cảnh báo: không thể đọc khối 0: %s\n"
 
-#: misc/mke2fs.c:489
+#: misc/mke2fs.c:491
 #, c-format
 msgid "Warning: could not erase sector %d: %s\n"
 msgstr "Cảnh báo: không thể xoá rãnh ghi %d: %s\n"
 
-#: misc/mke2fs.c:505
+#: misc/mke2fs.c:507
 msgid "while initializing journal superblock"
 msgstr "trong khi sở khởi siêu khối nhật ký"
 
-#: misc/mke2fs.c:513
+#: misc/mke2fs.c:515
 msgid "Zeroing journal device: "
 msgstr "Đang làm số không thiết bị nhật ký: "
 
-#: misc/mke2fs.c:525
+#: misc/mke2fs.c:527
 #, c-format
 msgid "while zeroing journal device (block %llu, count %d)"
 msgstr "trong khi làm số không thiết bị nhật ký (khối %llu, số lượng %d)"
 
-#: misc/mke2fs.c:543
+#: misc/mke2fs.c:546
 msgid "while writing journal superblock"
 msgstr "trong khi ghi siêu khối nhật ký"
 
-#: misc/mke2fs.c:558
+#: misc/mke2fs.c:561
 #, c-format
 msgid ""
 "warning: %llu blocks unused.\n"
@@ -4173,125 +4123,124 @@ msgstr ""
 "cảnh báo: %llu khối chưa dùng.\n"
 "\n"
 
-#: misc/mke2fs.c:563
+#: misc/mke2fs.c:566
 #, c-format
 msgid "Filesystem label=%s\n"
 msgstr "Nhãn hệ thống tập tin=%s\n"
 
-#: misc/mke2fs.c:566
+#: misc/mke2fs.c:569
 #, c-format
 msgid "OS type: %s\n"
 msgstr "Kiểu HĐH: %s\n"
 
-#: misc/mke2fs.c:568
+#: misc/mke2fs.c:571
 #, c-format
 msgid "Block size=%u (log=%u)\n"
 msgstr "Cỡ khối=%u (bản ghi=%u)\n"
 
-#: misc/mke2fs.c:572
+#: misc/mke2fs.c:575
 #, c-format
 msgid "Cluster size=%u (log=%u)\n"
 msgstr "Cỡ liên cung=%u (bản ghi=%u)\n"
 
-#: misc/mke2fs.c:576
+#: misc/mke2fs.c:579
 #, c-format
 msgid "Fragment size=%u (log=%u)\n"
 msgstr "Cỡ đoạn=%u (bản ghi=%u)\n"
 
-#: misc/mke2fs.c:578
+#: misc/mke2fs.c:581
 #, c-format
 msgid "Stride=%u blocks, Stripe width=%u blocks\n"
 msgstr "Bước=%u khối, Độ rộng sọc=%u khối\n"
 
-#: misc/mke2fs.c:580
+#: misc/mke2fs.c:583
 #, c-format
 msgid "%u inodes, %llu blocks\n"
 msgstr "%u nút thông tin, %llu khối\n"
 
-#: misc/mke2fs.c:582
+#: misc/mke2fs.c:585
 #, c-format
 msgid "%llu blocks (%2.2f%%) reserved for the super user\n"
 msgstr "%llu khối (%2.2f%%) được dành riêng cho siêu người dùng\n"
 
-#: misc/mke2fs.c:585
+#: misc/mke2fs.c:588
 #, c-format
 msgid "First data block=%u\n"
 msgstr "Khối dữ liệu đầu=%u\n"
 
-#: misc/mke2fs.c:587
+#: misc/mke2fs.c:590
 #, c-format
 msgid "Maximum filesystem blocks=%lu\n"
 msgstr "Khối hệ thống tập tin tối đa=%lu\n"
 
-#: misc/mke2fs.c:591
+#: misc/mke2fs.c:594
 #, c-format
 msgid "%u block groups\n"
 msgstr "%u nhóm khối\n"
 
-#: misc/mke2fs.c:593
+#: misc/mke2fs.c:596
 #, c-format
 msgid "%u block group\n"
 msgstr "%u nhóm khối\n"
 
-#: misc/mke2fs.c:596
+#: misc/mke2fs.c:599
 #, c-format
 msgid "%u blocks per group, %u clusters per group\n"
 msgstr "%u khối trên mỗi nhóm, %u đoạn trên mỗi nhóm\n"
 
-#: misc/mke2fs.c:599
+#: misc/mke2fs.c:602
 #, c-format
 msgid "%u blocks per group, %u fragments per group\n"
 msgstr "%u khối trên mỗi nhóm, %u đoạn trên mỗi nhóm\n"
 
-#: misc/mke2fs.c:601
+#: misc/mke2fs.c:604
 #, c-format
 msgid "%u inodes per group\n"
 msgstr "%u nút thông tin trên mỗi nhóm\n"
 
-#: misc/mke2fs.c:608
+#: misc/mke2fs.c:611
 #, c-format
 msgid "Superblock backups stored on blocks: "
 msgstr "Siêu khối dự trữ được cất giữ trên khối: "
 
-#: misc/mke2fs.c:687 misc/tune2fs.c:1165
+#: misc/mke2fs.c:690 misc/tune2fs.c:1156
 #, c-format
 msgid "Invalid mmp_update_interval: %s\n"
 msgstr "mmp_update_interval không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:701
+#: misc/mke2fs.c:704
 #, c-format
 msgid "Invalid stride parameter: %s\n"
 msgstr "Tham số stride không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:716
+#: misc/mke2fs.c:719
 #, c-format
 msgid "Invalid stripe-width parameter: %s\n"
 msgstr "Tham số stride không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:739
+#: misc/mke2fs.c:742
 #, c-format
 msgid "Invalid resize parameter: %s\n"
 msgstr "Tham số thay đổi kích cỡ không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:746
+#: misc/mke2fs.c:749
 #, c-format
 msgid "The resize maximum must be greater than the filesystem size.\n"
-msgstr ""
-"Số thay đổi kích cỡ tối đa phải lớn hơn kích cỡ của hệ thống tập tin.\n"
+msgstr "Số thay đổi kích cỡ tối đa phải lớn hơn kích cỡ của hệ thống tập tin.\n"
 
-#: misc/mke2fs.c:770
+#: misc/mke2fs.c:773
 #, c-format
 msgid "On-line resizing not supported with revision 0 filesystems\n"
 msgstr ""
 "Tính năng thay đổi kích cỡ một cách trực tuyến không được hỗ trợ\n"
 "trên hệ thống tập tin bản sửa đổi 0\n"
 
-#: misc/mke2fs.c:808
+#: misc/mke2fs.c:811
 #, c-format
 msgid "Invalid quotatype parameter: %s\n"
 msgstr "Tham số kiểu hạn ngạch không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:819
+#: misc/mke2fs.c:822
 #, c-format
 msgid ""
 "\n"
@@ -4313,10 +4262,10 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Sai xác định tùy chọn: %s\n"
+"Tùy chọn đã cho không đúng: %s\n"
 "\n"
 "Các tùy chọn mở rộng được định giới bằng dấu phẩy, có thể chấp nhận\n"
-"\tđối số được đặt với dấu bằng ('=').\n"
+"\tđối số được đặt với dấu bằng (”=”).\n"
 "\n"
 "Tùy chọn mở rộng hợp lệ:\n"
 "\tstride=<đoạn dữ liệu RAID mỗi đĩa theo khối>\n"
@@ -4330,7 +4279,7 @@ msgstr ""
 "\tquotatype=<usr HAY grp>\n"
 "\n"
 
-#: misc/mke2fs.c:839
+#: misc/mke2fs.c:842
 #, c-format
 msgid ""
 "\n"
@@ -4338,11 +4287,10 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Cảnh báo: chiều rộng sọc (stripe-width) RAID %u không phải là một bội số "
-"dương của %u.\n"
+"Cảnh báo: chiều rộng sọc (stripe-width) RAID %u không phải là một bội số dương của %u.\n"
 "\n"
 
-#: misc/mke2fs.c:878
+#: misc/mke2fs.c:881
 #, c-format
 msgid ""
 "Syntax error in mke2fs config file (%s, line #%d)\n"
@@ -4351,40 +4299,40 @@ msgstr ""
 "Gặp lỗi cú pháp trong tập tin cấu hình mke2fs (%s, dòng số %d)\n"
 "\t%s\n"
 
-#: misc/mke2fs.c:891 misc/tune2fs.c:393
+#: misc/mke2fs.c:894 misc/tune2fs.c:393
 #, c-format
 msgid "Invalid filesystem option set: %s\n"
 msgstr "Đặt tùy chọn hệ thống tập tin không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:903 misc/tune2fs.c:345
+#: misc/mke2fs.c:906 misc/tune2fs.c:345
 #, c-format
 msgid "Invalid mount option set: %s\n"
 msgstr "Đặt tùy chọn lắp không hợp lệ: %s\n"
 
-#: misc/mke2fs.c:1043
+#: misc/mke2fs.c:1046
 #, c-format
 msgid ""
 "\n"
 "Your mke2fs.conf file does not define the %s filesystem type.\n"
 msgstr ""
 "\n"
-"Tập tin « mke2fs.conf » của bạn không xác định kiểu hệ thống tập tin %s.\n"
+"Tập tin “mke2fs.conf” của bạn không xác định kiểu hệ thống tập tin %s.\n"
 
-#: misc/mke2fs.c:1047
+#: misc/mke2fs.c:1050
 #, c-format
 msgid ""
 "You probably need to install an updated mke2fs.conf file.\n"
 "\n"
 msgstr ""
-"Rất có thể là bạn cần phải cài đặt một tập tin « mke2fs.conf » mới.\n"
+"Rất có thể là bạn cần phải cài đặt một tập tin “mke2fs.conf” mới.\n"
 "\n"
 
-#: misc/mke2fs.c:1051
+#: misc/mke2fs.c:1054
 #, c-format
 msgid "Aborting...\n"
 msgstr "Đang hủy bỏ...\n"
 
-#: misc/mke2fs.c:1091
+#: misc/mke2fs.c:1094
 #, c-format
 msgid ""
 "\n"
@@ -4395,124 +4343,120 @@ msgstr ""
 "Cảnh báo: fs_type %s không được định nghĩa trong mke2fs.conf\n"
 "\n"
 
-#: misc/mke2fs.c:1249
+#: misc/mke2fs.c:1252
 #, c-format
 msgid "Couldn't allocate memory for new PATH.\n"
 msgstr "Không thể cấp phát bộ nhớ cho ĐƯỜNG-DẪN\n"
 
-#: misc/mke2fs.c:1290
+#: misc/mke2fs.c:1293
 #, c-format
 msgid "Couldn't init profile successfully (error: %ld).\n"
 msgstr "Không thể khởi tạo profile thành công (lỗi: %ld).\n"
 
-#: misc/mke2fs.c:1330
+#: misc/mke2fs.c:1333
 #, c-format
 msgid "invalid block size - %s"
 msgstr "cỡ khối không hợp lệ — %s"
 
-#: misc/mke2fs.c:1334
+#: misc/mke2fs.c:1337
 #, c-format
 msgid "Warning: blocksize %d not usable on most systems.\n"
 msgstr "Cảnh báo: kích cỡ khối %d vô ích trên phần lớn hệ thống.\n"
 
-#: misc/mke2fs.c:1350
+#: misc/mke2fs.c:1353
 #, c-format
 msgid "invalid cluster size - %s"
 msgstr "cỡ nhóm không hợp lệ — %s"
 
-#: misc/mke2fs.c:1362
+#: misc/mke2fs.c:1365
 msgid "Illegal number for blocks per group"
 msgstr "Số cấm cho số khối trên mỗi nhóm"
 
-#: misc/mke2fs.c:1367
+#: misc/mke2fs.c:1370
 msgid "blocks per group must be multiple of 8"
 msgstr "số khối trên mỗi nhóm phải là bội số cho 8"
 
-#: misc/mke2fs.c:1375
+#: misc/mke2fs.c:1378
 msgid "Illegal number for flex_bg size"
 msgstr "Kích cỡ flex_bg có số không được phép"
 
-#: misc/mke2fs.c:1381
+#: misc/mke2fs.c:1384
 msgid "flex_bg size must be a power of 2"
 msgstr "Kích cỡ flex_bg phải là lũy thừa 2"
 
-#: misc/mke2fs.c:1391
+#: misc/mke2fs.c:1394
 #, c-format
 msgid "invalid inode ratio %s (min %d/max %d)"
 msgstr "tỷ lệ nút thông tin không hợp lệ %s (thiểu %d/đa %d)"
 
-#: misc/mke2fs.c:1401
+#: misc/mke2fs.c:1404
 #, c-format
-msgid ""
-"Warning: -K option is deprecated and should not be used anymore. Use '-E "
-"nodiscard' extended option instead!\n"
-msgstr ""
-"Cảnh báo: tuỳ chọn -K không được tán thành và có lẽ không còn bao giờ được "
-"sử dụng nữa. Sử dụng tuỳ chọn mở rộng '-E nodiscard' để thay thế!\n"
+msgid "Warning: -K option is deprecated and should not be used anymore. Use '-E nodiscard' extended option instead!\n"
+msgstr "Cảnh báo: tuỳ chọn -K không được tán thành và có lẽ không còn bao giờ được sử dụng nữa. Sử dụng tuỳ chọn mở rộng “-E nodiscard” để thay thế!\n"
 
-#: misc/mke2fs.c:1415
+#: misc/mke2fs.c:1418
 msgid "in malloc for bad_blocks_filename"
 msgstr ""
 "trong hàm cấp phát bộ nhớ malloc cho tên tập tin khối sai\n"
-"« bad_blocks_filename »"
+"“bad_blocks_filename”"
 
-#: misc/mke2fs.c:1425
+#: misc/mke2fs.c:1428
 #, c-format
 msgid "invalid reserved blocks percent - %s"
 msgstr "phần trăm khối được dành riêng không hợp lệ — %s"
 
-#: misc/mke2fs.c:1443
+#: misc/mke2fs.c:1446
 #, c-format
 msgid "bad revision level - %s"
 msgstr "cấp bản sửa đổi sai — %s"
 
-#: misc/mke2fs.c:1455
+#: misc/mke2fs.c:1458
 #, c-format
 msgid "invalid inode size - %s"
 msgstr "kích cỡ nút thông tin không hợp lệ — %s"
 
-#: misc/mke2fs.c:1475
+#: misc/mke2fs.c:1478
 #, c-format
 msgid "bad num inodes - %s"
 msgstr "số (num) nút thông tin sai — %s"
 
-#: misc/mke2fs.c:1492
+#: misc/mke2fs.c:1495
 msgid "The -t option may only be used once"
 msgstr "tùy chọn -t chỉ sử dụng một lần"
 
-#: misc/mke2fs.c:1500
+#: misc/mke2fs.c:1503
 msgid "The -T option may only be used once"
 msgstr "Tùy chọn -T chỉ sử dụng một lần"
 
-#: misc/mke2fs.c:1550 misc/mke2fs.c:2508
+#: misc/mke2fs.c:1553 misc/mke2fs.c:2514
 #, c-format
 msgid "while trying to open journal device %s\n"
 msgstr "trong khi thử mở thiết bị nhật ký %s\n"
 
-#: misc/mke2fs.c:1556
+#: misc/mke2fs.c:1559
 #, c-format
 msgid "Journal dev blocksize (%d) smaller than minimum blocksize %d\n"
 msgstr "Kích cỡ của thiết bị nhật ký (%d) nhỏ hơn kích cỡ tối thiểu %d\n"
 
-#: misc/mke2fs.c:1562
+#: misc/mke2fs.c:1565
 #, c-format
 msgid "Using journal device's blocksize: %d\n"
 msgstr "Đang dùng kích cỡ khối của thiết bị nhật ký: %d\n"
 
-#: misc/mke2fs.c:1573
+#: misc/mke2fs.c:1576
 #, c-format
 msgid "invalid blocks '%s' on device '%s'"
-msgstr "khối '%s' sai trên thiết bị '%s'"
+msgstr "khối “%s” sai trên thiết bị “%s”"
 
-#: misc/mke2fs.c:1583
+#: misc/mke2fs.c:1586
 msgid "filesystem"
 msgstr "hệ thống tập tin"
 
-#: misc/mke2fs.c:1596 resize/main.c:374
+#: misc/mke2fs.c:1599 resize/main.c:355
 msgid "while trying to determine filesystem size"
 msgstr "trong khi thử quyết định kích cỡ của hệ thống tập tin"
 
-#: misc/mke2fs.c:1602
+#: misc/mke2fs.c:1605
 msgid ""
 "Couldn't determine device size; you must specify\n"
 "the size of the filesystem\n"
@@ -4520,7 +4464,7 @@ msgstr ""
 "Không thể quyết định kích cỡ của thiết bị;\n"
 "bạn cần phải xác định kích cỡ của hệ thống tập tin\n"
 
-#: misc/mke2fs.c:1609
+#: misc/mke2fs.c:1612
 msgid ""
 "Device size reported to be zero.  Invalid partition specified, or\n"
 "\tpartition table wasn't reread after running fdisk, due to\n"
@@ -4534,16 +4478,16 @@ msgstr ""
 "\tdo phân vùng đã sửa đổi đang bận và đang được dùng.\n"
 "Có lẽ bạn cần phải khởi động lại máy để đọc lại bảng phân vùng.\n"
 
-#: misc/mke2fs.c:1626
+#: misc/mke2fs.c:1629
 msgid "Filesystem larger than apparent device size."
 msgstr "Hệ thống tập tin lớn hơn kích cỡ thiết bị biểu kiến."
 
-#: misc/mke2fs.c:1646
+#: misc/mke2fs.c:1649
 #, c-format
 msgid "Failed to parse fs types list\n"
 msgstr "Lỗi phân tích danh sách các kiểu hệ thống tập tin\n"
 
-#: misc/mke2fs.c:1700
+#: misc/mke2fs.c:1703
 #, c-format
 msgid ""
 "%s: Size of device (0x%llx blocks) %s too big to be expressed\n"
@@ -4552,127 +4496,119 @@ msgstr ""
 "%s: thiết bị (0x%llx blocks) %s có kích cỡ quá lớn để biểu diễn theo 32 bit\n"
 "\tdùng kích cỡ khối của %d.\n"
 
-#: misc/mke2fs.c:1716
+#: misc/mke2fs.c:1719
 msgid "fs_types for mke2fs.conf resolution: "
 msgstr "fs_types để giải quyết mke2fs.conf: "
 
-#: misc/mke2fs.c:1723
+#: misc/mke2fs.c:1726
 #, c-format
 msgid "Filesystem features not supported with revision 0 filesystems\n"
 msgstr ""
 "Tính năng hệ thống tập tin không được hỗ trợ trên hệ thống tập tin\n"
 "bản sửa đổi 0\n"
 
-#: misc/mke2fs.c:1730
+#: misc/mke2fs.c:1733
 #, c-format
 msgid "Sparse superblocks not supported with revision 0 filesystems\n"
 msgstr ""
 "Tính năng siêu khối thưa thớt không được hỗ trợ\n"
 "trên hệ thống tập tin bản sửa đổi 0\n"
 
-#: misc/mke2fs.c:1742
+#: misc/mke2fs.c:1745
 #, c-format
 msgid "Journals not supported with revision 0 filesystems\n"
 msgstr ""
 "Tính năng nhật ký không được hỗ trợ trên hệ thống tập tin\n"
 "bản sửa đổi 0\n"
 
-#: misc/mke2fs.c:1756
+#: misc/mke2fs.c:1759
 #, c-format
 msgid "invalid reserved blocks percent - %lf"
 msgstr "phần trăm khối được dành riêng không hợp lệ -%lf"
 
-#: misc/mke2fs.c:1772
+#: misc/mke2fs.c:1775
 #, c-format
 msgid ""
 "The resize_inode and meta_bg features are not compatible.\n"
 "They can not be both enabled simultaneously.\n"
 msgstr ""
-"Hai tính năng thay đổi kích cỡ nút (resize_inode) và siêu nền (meta_bg) "
-"không tương thích với nhau.\n"
+"Hai tính năng thay đổi kích cỡ nút (resize_inode) và siêu nền (meta_bg) không tương thích với nhau.\n"
 "Do đó không thể hiệu lực đồng thời cả hai.\n"
 
-#: misc/mke2fs.c:1789
+#: misc/mke2fs.c:1792
 msgid "while trying to determine hardware sector size"
 msgstr "trong khi thử quyết định kích cỡ của rãnh ghi phần cứng"
 
-#: misc/mke2fs.c:1795
+#: misc/mke2fs.c:1798
 msgid "while trying to determine physical sector size"
 msgstr "trong khi thử quyết định kích cỡ của rãnh ghi vật lý"
 
-#: misc/mke2fs.c:1828
+#: misc/mke2fs.c:1831
 msgid "while setting blocksize; too small for device\n"
 msgstr "trong khi lập kích cỡ khối ; quá nhỏ đối với thiết bị\n"
 
-#: misc/mke2fs.c:1833
+#: misc/mke2fs.c:1836
 #, c-format
-msgid ""
-"Warning: specified blocksize %d is less than device physical sectorsize %d\n"
-msgstr ""
-"Cảnh báo: kích cỡ khối %d đã ghi rõ vẫn nhỏ hơn kích cỡ rãnh ghi vật lý của "
-"thiết bị %d\n"
+msgid "Warning: specified blocksize %d is less than device physical sectorsize %d\n"
+msgstr "Cảnh báo: kích cỡ khối %d đã ghi rõ vẫn nhỏ hơn kích cỡ rãnh ghi vật lý của thiết bị %d\n"
 
-#: misc/mke2fs.c:1864
+#: misc/mke2fs.c:1867
 #, c-format
 msgid "warning: Unable to get device geometry for %s\n"
 msgstr "cảnh báo: không thể lấy dạng hình thiết bị cho %s\n"
 
-#: misc/mke2fs.c:1867
+#: misc/mke2fs.c:1870
 #, c-format
 msgid "%s alignment is offset by %lu bytes.\n"
 msgstr "Khoảng sắp hàng %s bị bù theo %lu byte.\n"
 
-#: misc/mke2fs.c:1869
+#: misc/mke2fs.c:1872
 #, c-format
-msgid ""
-"This may result in very poor performance, (re)-partitioning suggested.\n"
-msgstr ""
-"Trường hợp này có thể gây ra hiệu suất rất yếu thì khuyên bạn phân vùng "
-"(lại).\n"
+msgid "This may result in very poor performance, (re)-partitioning suggested.\n"
+msgstr "Trường hợp này có thể gây ra hiệu suất rất yếu thì khuyên bạn phân vùng (lại).\n"
 
-#: misc/mke2fs.c:1880
+#: misc/mke2fs.c:1883
 #, c-format
 msgid "%d-byte blocks too big for system (max %d)"
 msgstr "Khối %d-byte quá lớn đối với hệ thống (tối đa %d)"
 
-#: misc/mke2fs.c:1884
+#: misc/mke2fs.c:1887
 #, c-format
-msgid ""
-"Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
+msgid "Warning: %d-byte blocks too big for system (max %d), forced to continue\n"
 msgstr ""
 "Cảnh báo: khối %d-byte quá lớn đối với hệ thống (tối đa %d)\n"
 "nên bị buộc tiếp tục\n"
 
-#: misc/mke2fs.c:1920
+#: misc/mke2fs.c:1925
 msgid "reserved online resize blocks not supported on non-sparse filesystem"
 msgstr ""
 "khối thay đổi kích cỡ trực tuyến được dành riêng không được hỗ trợ\n"
 "trên hệ thống tập tin không thưa thớt"
 
-#: misc/mke2fs.c:1929
+#: misc/mke2fs.c:1934
 msgid "blocks per group count out of range"
 msgstr "số khối trên mỗi nhóm ở ngoài phạm vi"
 
-#: misc/mke2fs.c:1944
+#: misc/mke2fs.c:1949
 msgid "Flex_bg feature not enabled, so flex_bg size may not be specified"
 msgstr "Chưa hiệu lực tính năng Flex_bg thì không thể ghi rõ kích cỡ Flex_bg"
 
-#: misc/mke2fs.c:1956
+#: misc/mke2fs.c:1961
 #, c-format
 msgid "invalid inode size %d (min %d/max %d)"
 msgstr "kích cỡ nút thông tin không hợp lệ %d (thiểu %d/đa %d)"
 
-#: misc/mke2fs.c:1974
+#: misc/mke2fs.c:1979
 #, c-format
 msgid "too many inodes (%llu), raise inode ratio?"
 msgstr "quá nhiều nút thông tin (%llu), tăng tỷ lệ nút thông tin không?"
 
-#: misc/mke2fs.c:1981
+#: misc/mke2fs.c:1986
 #, c-format
 msgid "too many inodes (%llu), specify < 2^32 inodes"
 msgstr "quá nhiều nút thông tin (%llu), xác định <2³² nút thông tin"
 
-#: misc/mke2fs.c:1995
+#: misc/mke2fs.c:2000
 #, c-format
 msgid ""
 "inode_size (%u) * inodes_count (%u) too big for a\n"
@@ -4684,7 +4620,7 @@ msgstr ""
 "\ttỷ_lệ_nút_thông_tin (-i) cao hơn hay số lượng nút thông tin\n"
 "(-N) thấp hơn\n"
 
-#: misc/mke2fs.c:2114
+#: misc/mke2fs.c:2119
 #, c-format
 msgid ""
 "Overwriting existing filesystem; this can be undone using the command:\n"
@@ -4695,43 +4631,43 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/mke2fs.c:2128
+#: misc/mke2fs.c:2133
 msgid "while trying to setup undo file\n"
-msgstr "trong khi tử cài đặt tệp tin undo\n"
+msgstr "trong khi thử cài đặt tập tin undo\n"
 
-#: misc/mke2fs.c:2154
+#: misc/mke2fs.c:2159
 msgid "Discarding device blocks: "
 msgstr "Bỏ qua khối thiết bị: "
 
-#: misc/mke2fs.c:2170
+#: misc/mke2fs.c:2176
 msgid "failed - "
-msgstr "gặp lỗi -"
+msgstr "gặp lỗi - "
 
 # Item in the main menu to select this package
-#: misc/mke2fs.c:2277
+#: misc/mke2fs.c:2283
 msgid "while setting up superblock"
 msgstr "trong khi thiết lập siêu khối"
 
-#: misc/mke2fs.c:2286
+#: misc/mke2fs.c:2292
 #, c-format
 msgid "Discard succeeded and will return 0s  - skipping inode table wipe\n"
 msgstr "Loại bỏ thành công và sẽ trả về 0 - bỏ qua xoá bảng nút\n"
 
-#: misc/mke2fs.c:2369
+#: misc/mke2fs.c:2375
 #, c-format
 msgid "unknown os - %s"
 msgstr "hệ điều hành lạ — %s"
 
-#: misc/mke2fs.c:2421
+#: misc/mke2fs.c:2427
 #, c-format
 msgid "Allocating group tables: "
 msgstr "Phân bổ bảng nhóm: "
 
-#: misc/mke2fs.c:2425
+#: misc/mke2fs.c:2431
 msgid "while trying to allocate filesystem tables"
 msgstr "trong khi thử cấp phát các bảng hệ thống tập tin"
 
-#: misc/mke2fs.c:2434
+#: misc/mke2fs.c:2440
 msgid ""
 "\n"
 "\twhile converting subcluster bitmap"
@@ -4739,25 +4675,25 @@ msgstr ""
 "\n"
 "\ttrong khi chuyển đổi mảng ảnh liên cung con"
 
-#: misc/mke2fs.c:2477
+#: misc/mke2fs.c:2483
 #, c-format
 msgid "while zeroing block %llu at end of filesystem"
 msgstr "trong khi điền số không khối %llu tại kết thúc của hệ thống tập tin"
 
-#: misc/mke2fs.c:2490
+#: misc/mke2fs.c:2496
 msgid "while reserving blocks for online resize"
 msgstr "trong khi dành riêng các khối để thay đổi kích cỡ trực tuyến"
 
-#: misc/mke2fs.c:2501 misc/tune2fs.c:640
+#: misc/mke2fs.c:2507 misc/tune2fs.c:640
 msgid "journal"
 msgstr "nhật ký"
 
-#: misc/mke2fs.c:2513
+#: misc/mke2fs.c:2519
 #, c-format
 msgid "Adding journal to device %s: "
 msgstr "Đang thêm nhật ký vào thiết bị %s: "
 
-#: misc/mke2fs.c:2520
+#: misc/mke2fs.c:2526
 #, c-format
 msgid ""
 "\n"
@@ -4766,22 +4702,22 @@ msgstr ""
 "\n"
 "trong khi thử thêm nhật ký vào thiết bị %s"
 
-#: misc/mke2fs.c:2525 misc/mke2fs.c:2557 misc/tune2fs.c:669 misc/tune2fs.c:683
+#: misc/mke2fs.c:2531 misc/mke2fs.c:2563 misc/tune2fs.c:669 misc/tune2fs.c:683
 #, c-format
 msgid "done\n"
 msgstr "hoàn tất\n"
 
-#: misc/mke2fs.c:2534
+#: misc/mke2fs.c:2540
 #, c-format
 msgid "Skipping journal creation in super-only mode\n"
 msgstr "Đang bỏ qua bước tạo nhật ký trong chế độ chỉ siêu\n"
 
-#: misc/mke2fs.c:2545
+#: misc/mke2fs.c:2551
 #, c-format
 msgid "Creating journal (%u blocks): "
 msgstr "Đang tạo nhật ký (%u khối): "
 
-#: misc/mke2fs.c:2553
+#: misc/mke2fs.c:2559
 msgid ""
 "\n"
 "\twhile trying to create journal"
@@ -4789,7 +4725,7 @@ msgstr ""
 "\n"
 "trong khi thử tạo nhật ký"
 
-#: misc/mke2fs.c:2564 misc/tune2fs.c:446
+#: misc/mke2fs.c:2570 misc/tune2fs.c:446
 #, c-format
 msgid ""
 "\n"
@@ -4798,17 +4734,17 @@ msgstr ""
 "\n"
 "Lỗi khi bật đặc tính bảo vệ đa gắn"
 
-#: misc/mke2fs.c:2569
+#: misc/mke2fs.c:2575
 #, c-format
 msgid "Multiple mount protection is enabled with update interval %d seconds.\n"
 msgstr "Bảo vệ đa gắn được bật với nhịp cập nhật là %d giây.\n"
 
-#: misc/mke2fs.c:2582
+#: misc/mke2fs.c:2588
 #, c-format
 msgid "Writing superblocks and filesystem accounting information: "
 msgstr "Đang ghi siêu khối và thông tin kế toán hệ thống tập tin: "
 
-#: misc/mke2fs.c:2589
+#: misc/mke2fs.c:2595
 #, c-format
 msgid ""
 "\n"
@@ -4817,7 +4753,7 @@ msgstr ""
 "\n"
 "Cảnh báo: gặp khó khăn trong việc ghi ra các siêu khối."
 
-#: misc/mke2fs.c:2591
+#: misc/mke2fs.c:2597
 #, c-format
 msgid ""
 "done\n"
@@ -4829,7 +4765,7 @@ msgstr ""
 #: misc/mklost+found.c:50
 #, c-format
 msgid "Usage: mklost+found\n"
-msgstr "Sử dụng: mklost+found\n"
+msgstr "Cách dùng: mklost+found\n"
 
 #: misc/partinfo.c:41
 #, c-format
@@ -4840,7 +4776,7 @@ msgid ""
 "For example: %s /dev/hda\n"
 "\n"
 msgstr ""
-"Sử dụng:  %s thiết bị...\n"
+"Cách dùng:  %s thiết bị...\n"
 "\n"
 "In ra thông tin về phân vùng đối với mỗi thiết bị được cho.\n"
 "Ví dụ: %s /dev/hda\n"
@@ -4875,19 +4811,16 @@ msgstr "Hãy chạy tiến trình e2fsck trên hệ thống tập tin.\n"
 msgid ""
 "Usage: %s [-c max_mounts_count] [-e errors_behavior] [-g group]\n"
 "\t[-i interval[d|m|w]] [-j] [-J journal_options] [-l]\n"
-"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p "
-"mmp_update_interval]\n"
+"\t[-m reserved_blocks_percent] [-o [^]mount_options[,...]] [-p mmp_update_interval]\n"
 "\t[-r reserved_blocks_count] [-u user] [-C mount_count] [-L volume_label]\n"
 "\t[-M last_mounted_dir] [-O [^]feature[,...]]\n"
 "\t[-E extended-option[,...]] [-T last_check_time] [-U UUID]\n"
 "\t[ -I new_inode_size ] device\n"
 msgstr ""
-"Sử dụng: %s [-c số_đếm_lắp_tối_đa] [-e ứng_xử_lỗi] [-g nhóm]\n"
+"Cách dùng: %s [-c số_đếm_lắp_tối_đa] [-e ứng_xử_lỗi] [-g nhóm]\n"
 "\t[-i khoảng[d|m|w]] [-j] [-J tùy_chọn_nhật_ký] [-l]\n"
-"\t[-m phần_trăm_khối_dành_riêng] [-o [^]tùy_chọn_lắp[,...]] [-p "
-"nhịp_cập_nhật_mmp]\n"
-"\t[-r số_đếm_khối_dành_riêng] [-u người_dùng] [-C số_đếm_lắp] [-L "
-"nhãn_phân_vùng]\n"
+"\t[-m phần_trăm_khối_dành_riêng] [-o [^]tùy_chọn_lắp[,...]] [-p nhịp_cập_nhật_mmp]\n"
+"\t[-r số_đếm_khối_dành_riêng] [-u người_dùng] [-C số_đếm_lắp] [-L nhãn_phân_vùng]\n"
 "\t[-M thư_mục_lắp_cuối] [-O [^]tính_năng[,...]]\n"
 "\t[-E tùy_chọn_mở_rộng[,...] [-T giờ_kiểm_tra_cuối] [-U UUID]\n"
 "\t[-l cỡ_nút_mới] thiết_bị\n"
@@ -4941,12 +4874,12 @@ msgstr "(và khởi động lại sau !)\n"
 #: misc/tune2fs.c:396
 #, c-format
 msgid "Clearing filesystem feature '%s' not supported.\n"
-msgstr "Tính năng xoá sạch hệ thống tập tin « %s » không được hỗ trợ.\n"
+msgstr "Tính năng xoá sạch hệ thống tập tin “%s” không được hỗ trợ.\n"
 
 #: misc/tune2fs.c:402
 #, c-format
 msgid "Setting filesystem feature '%s' not supported.\n"
-msgstr "Tính năng đặt hệ thống tập tin « %s » không được hỗ trợ.\n"
+msgstr "Tính năng đặt hệ thống tập tin “%s” không được hỗ trợ.\n"
 
 #: misc/tune2fs.c:411
 msgid ""
@@ -4972,7 +4905,7 @@ msgid ""
 "read-only.\n"
 msgstr ""
 "Tính năng bảo vệ chống đa gắn không thể\n"
-"Ä\91ặt Ä\91ược nếu há»\87 thá»\91ng tá»\87p tin đã được gắn kết\n"
+"Ä\91ặt Ä\91ược nếu há»\87 thá»\91ng tập tin đã được gắn kết\n"
 "hay chỉ cho đọc.\n"
 
 #: misc/tune2fs.c:456
@@ -4986,7 +4919,7 @@ msgid ""
 "be disabled if the filesystem is readonly.\n"
 msgstr ""
 "Đặc tính kỹ thuật bảo vệ đa gắn không thể\n"
-"Ä\91ược tắt nếu há»\87 thá»\91ng tá»\87p tin chỉ đọc.\n"
+"Ä\91ược tắt nếu há»\87 thá»\91ng tập tin chỉ đọc.\n"
 
 #: misc/tune2fs.c:473
 msgid "Error while reading bitmaps\n"
@@ -5022,7 +4955,7 @@ msgid ""
 "Warning: '^quota' option overrides '-Q'arguments.\n"
 msgstr ""
 "\n"
-"Cảnh báo: tuỳ chọn '^quota' sẽ dè lên đối số '-Q'.\n"
+"Cảnh báo: tuỳ chọn “^quota” sẽ dè lên đối số “-Q”.\n"
 
 #: misc/tune2fs.c:635
 msgid "The filesystem already has a journal.\n"
@@ -5059,17 +4992,16 @@ msgstr ""
 "\n"
 "trong khi thử tạo tập tin nhật ký"
 
-#: misc/tune2fs.c:763
+#: misc/tune2fs.c:754
 msgid "Couldn't allocate memory to parse quota options!\n"
 msgstr "Không thể cấp phát bộ nhớ để phân tách các tùy chọn hạn ngạch!\n"
 
-#: misc/tune2fs.c:785
+#: misc/tune2fs.c:776
 msgid ""
 "\n"
 "Bad quota options specified.\n"
 "\n"
-"Following valid quota options are available (pass by separating with "
-"comma):\n"
+"Following valid quota options are available (pass by separating with comma):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
@@ -5078,105 +5010,102 @@ msgstr ""
 "\n"
 "Đã chỉ định tuỳ chọn hạn ngạch sai.\n"
 "\n"
-"Sau đây là danh sách các tuỳ chọn hạn ngạch được dùng (chấp nhận ngăn cách "
-"bằng dấu phẩy):\n"
+"Sau đây là danh sách các tuỳ chọn hạn ngạch được dùng (chấp nhận ngăn cách bằng dấu phẩy):\n"
 "\t[^]usrquota\n"
 "\t[^]grpquota\n"
 "\n"
 "\n"
 
-#: misc/tune2fs.c:846
+#: misc/tune2fs.c:837
 #, c-format
 msgid "Couldn't parse date/time specifier: %s"
 msgstr "Không thể phân tách toán tử ngày/giờ: %s"
 
-#: misc/tune2fs.c:870 misc/tune2fs.c:883
+#: misc/tune2fs.c:861 misc/tune2fs.c:874
 #, c-format
 msgid "bad mounts count - %s"
-msgstr "số đếm lắp sai — %s"
+msgstr "số đếm gắn sai — %s"
 
-#: misc/tune2fs.c:899
+#: misc/tune2fs.c:890
 #, c-format
 msgid "bad error behavior - %s"
 msgstr "ứng xử lỗi sai — %s"
 
-#: misc/tune2fs.c:926
+#: misc/tune2fs.c:917
 #, c-format
 msgid "bad gid/group name - %s"
 msgstr "GID/tên nhóm sai — %s"
 
-#: misc/tune2fs.c:959
+#: misc/tune2fs.c:950
 #, c-format
 msgid "bad interval - %s"
-msgstr "khoảng sai - %s"
+msgstr "sai nhịp - %s"
 
-#: misc/tune2fs.c:988
+#: misc/tune2fs.c:979
 #, c-format
 msgid "bad reserved block ratio - %s"
 msgstr "tỷ lệ khối dành riêng sai — %s"
 
-#: misc/tune2fs.c:1003
+#: misc/tune2fs.c:994
 msgid "-o may only be specified once"
-msgstr "có thể xác định tùy chọn « -o » chỉ một lần"
+msgstr "có thể đưa ra tùy chọn “-o” chỉ một lần"
 
-#: misc/tune2fs.c:1012
+#: misc/tune2fs.c:1003
 msgid "-O may only be specified once"
-msgstr "có thể xác định tùy chọn « -O » chỉ một lần"
+msgstr "có thể đưa ra tùy chọn “-O” chỉ một lần"
 
-#: misc/tune2fs.c:1027
+#: misc/tune2fs.c:1018
 #, c-format
 msgid "bad reserved blocks count - %s"
 msgstr "số đếm khối dành riêng sai — %s"
 
-#: misc/tune2fs.c:1056
+#: misc/tune2fs.c:1047
 #, c-format
 msgid "bad uid/user name - %s"
 msgstr "UID/tên người dùng sai — %s"
 
-#: misc/tune2fs.c:1073
+#: misc/tune2fs.c:1064
 #, c-format
 msgid "bad inode size - %s"
 msgstr "kích cỡ nút sai — %s"
 
-#: misc/tune2fs.c:1080
+#: misc/tune2fs.c:1071
 #, c-format
 msgid "Inode size must be a power of two- %s"
 msgstr "Kích cỡ nút phải là lũy thừa 2 — %s"
 
-#: misc/tune2fs.c:1174
+#: misc/tune2fs.c:1165
 #, c-format
 msgid "mmp_update_interval too big: %lu\n"
 msgstr "mmp_update_interval quá lớn (%lu)\n"
 
-#: misc/tune2fs.c:1179
+#: misc/tune2fs.c:1170
 #, c-format
 msgid "Setting multiple mount protection update interval to %lu second\n"
-msgid_plural ""
-"Setting multiple mount protection update interval to %lu seconds\n"
-msgstr[0] ""
-"Đang đặt khoảng thời gian cập nhật bảo vệ chống đa lắp thành %lu giây\n"
+msgid_plural "Setting multiple mount protection update interval to %lu seconds\n"
+msgstr[0] "Đang đặt khoảng thời gian cập nhật bảo vệ chống đa lắp thành %lu giây\n"
 
-#: misc/tune2fs.c:1202
+#: misc/tune2fs.c:1193
 #, c-format
 msgid "Invalid RAID stride: %s\n"
 msgstr "Tham số stride RAID không hợp lệ: %s\n"
 
-#: misc/tune2fs.c:1217
+#: misc/tune2fs.c:1208
 #, c-format
 msgid "Invalid RAID stripe-width: %s\n"
 msgstr "Tham số chiều rộng sọc (stripe-width) RAID không hợp lệ: %s\n"
 
-#: misc/tune2fs.c:1232
+#: misc/tune2fs.c:1223
 #, c-format
 msgid "Invalid hash algorithm: %s\n"
 msgstr "Thuật toán tạo mẫu duy nhất vẫn không hợp lệ: %s\n"
 
-#: misc/tune2fs.c:1238
+#: misc/tune2fs.c:1229
 #, c-format
 msgid "Setting default hash algorithm to %s (%d)\n"
 msgstr "Đang đặt thuật toán tạo mẫu duy nhất thành %s (%d)\n"
 
-#: misc/tune2fs.c:1257
+#: misc/tune2fs.c:1248
 #, c-format
 msgid ""
 "\n"
@@ -5195,10 +5124,10 @@ msgid ""
 "\t^test_fs\n"
 msgstr ""
 "\n"
-"Sai xác định tùy chọn.\n"
+"Chỉ định tùy chọn sai.\n"
 "\n"
 "Các tùy chọn mở rộng định giới bằng dấu phẩy, có thể chấp nhận\n"
-"\tđối số được gán với dấu bằng « = ».\n"
+"\tđối số được gán với dấu bằng “=”.\n"
 "\n"
 "Tùy chọn đã mở rộng hợp lệ:\n"
 "\tclear_mmp\n"
@@ -5209,48 +5138,48 @@ msgstr ""
 "\ttest_fs\n"
 "\t^test_fs\n"
 
-#: misc/tune2fs.c:1723
+#: misc/tune2fs.c:1714
 msgid "Failed to read inode bitmap\n"
-msgstr "Không thể đọc sơ đồ inode\n"
+msgstr "Không thể đọc ánh xạ inode\n"
 
-#: misc/tune2fs.c:1728
+#: misc/tune2fs.c:1719
 msgid "Failed to read block bitmap\n"
 msgstr "Lỗi khi đọc mảng khối\n"
 
-#: misc/tune2fs.c:1745 resize/resize2fs.c:784
+#: misc/tune2fs.c:1736 resize/resize2fs.c:802
 msgid "blocks to be moved"
 msgstr "khối cần di chuyển"
 
-#: misc/tune2fs.c:1748
+#: misc/tune2fs.c:1739
 msgid "Failed to allocate block bitmap when increasing inode size\n"
 msgstr "Lỗi cấp phát ảnh mảng khối khi tăng kích cỡ inode\n"
 
-#: misc/tune2fs.c:1754
+#: misc/tune2fs.c:1745
 msgid "Not enough space to increase inode size \n"
 msgstr "Không đủ sức chứa để tăng kích cỡ inode\n"
 
-#: misc/tune2fs.c:1759
+#: misc/tune2fs.c:1750
 msgid "Failed to relocate blocks during inode resize \n"
 msgstr "Lỗi định vị lại khối trong khi thay đổi kích cỡ inode \n"
 
-#: misc/tune2fs.c:1791
+#: misc/tune2fs.c:1782
 msgid ""
 "Error in resizing the inode size.\n"
 "Run e2undo to undo the file system changes. \n"
 msgstr ""
 "Gặp lỗi khi thay đổi kích cỡ nút.\n"
-"Hãy chạy lệnh « e2undo » để hủy các bước thay đổi hệ thống tập tin. \n"
+"Hãy chạy lệnh “e2undo” để hủy các bước thay đổi hệ thống tập tin. \n"
 
-#: misc/tune2fs.c:1818
+#: misc/tune2fs.c:1809
 msgid "Couldn't allocate memory for tdb filename\n"
 msgstr "Không thể cấp phát bộ nhớ cho tên tập tin tdb\n"
 
-#: misc/tune2fs.c:1840
+#: misc/tune2fs.c:1831
 #, c-format
 msgid "while trying to delete %s"
 msgstr "trong khi thử xoá %s"
 
-#: misc/tune2fs.c:1850
+#: misc/tune2fs.c:1841
 #, c-format
 msgid ""
 "To undo the tune2fs operation please run the command\n"
@@ -5261,71 +5190,71 @@ msgstr ""
 "    e2undo %s %s\n"
 "\n"
 
-#: misc/tune2fs.c:1919
+#: misc/tune2fs.c:1910
 #, c-format
 msgid ""
 "MMP block magic is bad. Try to fix it by running:\n"
 "'e2fsck -f %s'\n"
 msgstr ""
 "Khối màu nhiệm MMP sai. Thử sửa bằng cách chạy lệnh:\n"
-"'e2fsck -f %s'\n"
+"“e2fsck -f %s”\n"
 
-#: misc/tune2fs.c:1937
+#: misc/tune2fs.c:1928
 #, c-format
 msgid "The inode size is already %lu\n"
 msgstr "Kích cỡ nút thông tin đã %lu\n"
 
-#: misc/tune2fs.c:1943
+#: misc/tune2fs.c:1934
 #, c-format
 msgid "Shrinking the inode size is not supported\n"
 msgstr "Không hỗ trợ tính năng thu nhỏ kích cỡ nút thông tin\n"
 
-#: misc/tune2fs.c:1990
+#: misc/tune2fs.c:1981
 #, c-format
 msgid "Setting maximal mount count to %d\n"
 msgstr "Đang đặt số đếm lắp tối đa thành %d\n"
 
-#: misc/tune2fs.c:1996
+#: misc/tune2fs.c:1987
 #, c-format
 msgid "Setting current mount count to %d\n"
 msgstr "Đang đặt số đếm lắp hiện thời thành %d\n"
 
-#: misc/tune2fs.c:2001
+#: misc/tune2fs.c:1992
 #, c-format
 msgid "Setting error behavior to %d\n"
 msgstr "Đang đặt ứng xử lỗi thành %d\n"
 
-#: misc/tune2fs.c:2006
+#: misc/tune2fs.c:1997
 #, c-format
 msgid "Setting reserved blocks gid to %lu\n"
 msgstr "Đang đặt GID khối dành riêng thành %lu\n"
 
-#: misc/tune2fs.c:2011
+#: misc/tune2fs.c:2002
 #, c-format
 msgid "interval between checks is too big (%lu)"
 msgstr "khoảng giữa hai lần kiểm tra quá lớn (%lu)"
 
-#: misc/tune2fs.c:2018
+#: misc/tune2fs.c:2009
 #, c-format
 msgid "Setting interval between checks to %lu seconds\n"
 msgstr "Đang đặt khoảng giữa hai lần kiểm tra thành %lu giây\n"
 
-#: misc/tune2fs.c:2025
+#: misc/tune2fs.c:2016
 #, c-format
 msgid "Setting reserved blocks percentage to %g%% (%llu blocks)\n"
 msgstr "Đang đặt phần trăm khối dự trữ thành %g%% (%llu khối)\n"
 
-#: misc/tune2fs.c:2031
+#: misc/tune2fs.c:2022
 #, c-format
 msgid "reserved blocks count is too big (%llu)"
 msgstr "số lượng khối dự trữ quá lớn (%llu)"
 
-#: misc/tune2fs.c:2038
+#: misc/tune2fs.c:2029
 #, c-format
 msgid "Setting reserved blocks count to %llu\n"
 msgstr "Đang đặt số lượng khối dự trữ thành %llu\n"
 
-#: misc/tune2fs.c:2044
+#: misc/tune2fs.c:2035
 msgid ""
 "\n"
 "The filesystem already has sparse superblocks.\n"
@@ -5333,7 +5262,7 @@ msgstr ""
 "\n"
 "Hệ thống tập tin đã có siêu khối thưa thớt.\n"
 
-#: misc/tune2fs.c:2051
+#: misc/tune2fs.c:2042
 #, c-format
 msgid ""
 "\n"
@@ -5342,7 +5271,7 @@ msgstr ""
 "\n"
 "Đặt cờ siêu khối thưa thớt.  %s"
 
-#: misc/tune2fs.c:2056
+#: misc/tune2fs.c:2047
 msgid ""
 "\n"
 "Clearing the sparse superflag not supported.\n"
@@ -5350,68 +5279,62 @@ msgstr ""
 "\n"
 "Tính năng xoá sạch siêu cờ sparse không được hỗ trợ.\n"
 
-#: misc/tune2fs.c:2064
+#: misc/tune2fs.c:2055
 #, c-format
 msgid "Setting time filesystem last checked to %s\n"
 msgstr "Đang đặt giờ kiểm tra hệ thống tập tin lần cuối cùng thành %s\n"
 
-#: misc/tune2fs.c:2070
+#: misc/tune2fs.c:2061
 #, c-format
 msgid "Setting reserved blocks uid to %lu\n"
 msgstr "Đang đặt UID khối dành riêng thành %lu\n"
 
-#: misc/tune2fs.c:2102
+#: misc/tune2fs.c:2093
 msgid "Error in using clear_mmp. It must be used with -f\n"
 msgstr "Lỗi không sử dụng clear_mmp. Nó phải được sử dụng cùng với -f\n"
 
-#: misc/tune2fs.c:2120
-msgid ""
-"The quota feature may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Đặc tính hạn ngạch chỉ có thể được thay đổi khi hệ thống tập tin không được "
-"gắn kết.\n"
+#: misc/tune2fs.c:2111
+msgid "The quota feature may only be changed when the filesystem is unmounted.\n"
+msgstr "Đặc tính hạn ngạch chỉ có thể được thay đổi khi hệ thống tập tin không được gắn kết.\n"
 
-#: misc/tune2fs.c:2153
+#: misc/tune2fs.c:2144
 msgid "Invalid UUID format\n"
 msgstr "Định dạng UUID không hợp lệ\n"
 
-#: misc/tune2fs.c:2166
+#: misc/tune2fs.c:2157
 msgid "The inode size may only be changed when the filesystem is unmounted.\n"
-msgstr ""
-"Kích cỡ nút chỉ có thể thay đổi khi hệ thống tập tin không được gắn kết.\n"
+msgstr "Kích cỡ nút chỉ có thể thay đổi khi hệ thống tập tin không được gắn kết.\n"
 
-#: misc/tune2fs.c:2174
+#: misc/tune2fs.c:2165
 msgid ""
 "Changing the inode size not supported for filesystems with the flex_bg\n"
 "feature enabled.\n"
-msgstr ""
-"Chức năng thay đổi kích cỡ nút thông tin không phải được hỗ trợ đối với hệ "
-"thống tập tin đã bật tính năng « flex_bg ».\n"
+msgstr "Chức năng thay đổi kích cỡ nút thông tin không phải được hỗ trợ đối với hệ thống tập tin đã bật tính năng “flex_bg”.\n"
 
-#: misc/tune2fs.c:2187
+#: misc/tune2fs.c:2178
 #, c-format
 msgid "Setting inode size %lu\n"
 msgstr "Đang đặt kích cỡ nút %lu\n"
 
-#: misc/tune2fs.c:2190
+#: misc/tune2fs.c:2181
 #, c-format
 msgid "Failed to change inode size\n"
 msgstr "Lỗi thay đổi kích thước của nút\n"
 
-#: misc/tune2fs.c:2201
+#: misc/tune2fs.c:2192
 #, c-format
 msgid "Setting stride size to %d\n"
 msgstr "Đang đặt kích cỡ stride thành %d\n"
 
-#: misc/tune2fs.c:2206
+#: misc/tune2fs.c:2197
 #, c-format
 msgid "Setting stripe width to %d\n"
 msgstr "Đang đặt chiều rộng sọc (stripe width) thành %d\n"
 
-#: misc/tune2fs.c:2213
+#: misc/tune2fs.c:2204
 #, c-format
 msgid "Setting extended default mount options to '%s'\n"
-msgstr "Đang đặt tuỳ chọn gắn mặc định mở rộng thành '%s'\n"
+msgstr "Đang đặt tuỳ chọn gắn mặc định mở rộng thành “%s”\n"
 
 #: misc/util.c:74
 msgid "Proceed anyway? (y,n) "
@@ -5428,7 +5351,7 @@ msgid ""
 "The device apparently does not exist; did you specify it correctly?\n"
 msgstr ""
 "\n"
-"Có vẻ là thiết bị không tồn tại; bạn có xác định đúng chưa?\n"
+"Có vẻ là thiết bị không tồn tại; bạn có đưa ra đúng chưa?\n"
 
 #: misc/util.c:103
 #, c-format
@@ -5442,7 +5365,7 @@ msgstr "%s là toàn bộ thiết bị, không phải chỉ một phân vùng !\
 
 #: misc/util.c:154
 msgid "mke2fs forced anyway.  Hope /etc/mtab is incorrect.\n"
-msgstr "Tiến trình mke2fs vẫn còn bị ép buộc. Mong « /etc/mtab » không đúng.\n"
+msgstr "Tiến trình mke2fs vẫn còn bị ép buộc. Mong “/etc/mtab” không đúng.\n"
 
 #: misc/util.c:159
 #, c-format
@@ -5482,10 +5405,10 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Sai xác định tùy chọn nhật ký.\n"
+"Đưa ra tùy chọn nhật ký sai.\n"
 "\n"
 "Các tùy chọn nhật ký cũng định giới bằng dấu phẩy, có thể chấp nhận\n"
-"đối số được ngụ ý với dấu bằng « = ».\n"
+"đối số được ngụ ý với dấu bằng “=”.\n"
 "\n"
 "Tùy chọn nhật ký hợp lệ:\n"
 "\tsize=<kích cỡ nhật ký theo MB>\n"
@@ -5531,12 +5454,12 @@ msgid ""
 msgstr ""
 "Hệ thống tập tin này sẽ được kiểm tra tự động mỗi %d lần gắn kết\n"
 "hay mỗi %g ngày, điều nào xảy ra trước. Hãy dùng tùy chọn\n"
-"« tune2fs -c » hay « tune2fs -i » để ghi đè lên nó.\n"
+"“tune2fs -c” hay “tune2fs -i” để ghi đè lên nó.\n"
 
 #: misc/uuidd.c:48
 #, c-format
 msgid "Usage: %s [-d] [-p pidfile] [-s socketpath] [-T timeout]\n"
-msgstr "Sử dụng: %s [-d] [-p tập_tin_PID] [-s đường_dẫn_ổ_cắm] [-T thời_hạn]\n"
+msgstr "Cách dùng: %s [-d] [-p tập_tin_PID] [-s đường_dẫn_ổ_cắm] [-T thời_hạn]\n"
 
 #: misc/uuidd.c:50
 #, c-format
@@ -5663,7 +5586,7 @@ msgstr "Đã buộc kết thúc uuidd chạy tại PID %d\n"
 #: misc/uuidgen.c:32
 #, c-format
 msgid "Usage: %s [-r] [-t]\n"
-msgstr "Sử dụng: %s [-r] [-t]\n"
+msgstr "Cách dùng: %s [-r] [-t]\n"
 
 #: resize/extent.c:202
 msgid "# Extent dump:\n"
@@ -5680,7 +5603,7 @@ msgid ""
 "Usage: %s [-d debug_flags] [-f] [-F] [-M] [-P] [-p] device [new_size]\n"
 "\n"
 msgstr ""
-"Sử dụng: %s [-d cờ_gỡ_lỗi] [-f] [-F] [-M] [-P] [-p] thiết_bị [kích_cỡ_mới]\n"
+"Cách dùng: %s [-d cờ_gỡ_lỗi] [-f] [-F] [-M] [-P] [-p] thiết_bị [kích_cỡ_mới]\n"
 "\n"
 
 #: resize/main.c:65
@@ -5705,7 +5628,7 @@ msgstr "Đang di chuyển bảng nút thông tin"
 
 #: resize/main.c:80
 msgid "Unknown pass?!?"
-msgstr "Lần qua lạ ?!?"
+msgstr "Lần qua lạ?!?"
 
 #: resize/main.c:83
 #, c-format
@@ -5722,46 +5645,37 @@ msgstr "trong khi mở %s"
 msgid "while getting stat information for %s"
 msgstr "trong khi lấy các thông tin về %s"
 
-#: resize/main.c:331
-#, c-format
-msgid ""
-"%s: The combination of flex_bg and\n"
-"\t!resize_inode features is not supported by resize2fs.\n"
-msgstr ""
-"%s: tổ hợp hai tính năng flex_bg và !resize_inode\n"
-"đều không được resize2fs hỗ trợ.\n"
-
-#: resize/main.c:344 resize/main.c:452
+#: resize/main.c:325 resize/main.c:437
 #, c-format
 msgid ""
 "Please run 'e2fsck -f %s' first.\n"
 "\n"
-msgstr "Trước tiên hãy chạy tiến trình « e2fsck -f %s ».\n"
+msgstr "Trước tiên hãy chạy chương trình “e2fsck -f %s”.\n"
 
-#: resize/main.c:348
+#: resize/main.c:329
 #, c-format
 msgid "Estimated minimum size of the filesystem: %llu\n"
 msgstr "Kích cỡ hệ thống tập tin tối thiểu được ước tính: %llu\n"
 
-#: resize/main.c:384
+#: resize/main.c:365
 #, c-format
 msgid "Invalid new size: %s\n"
 msgstr "Kích cỡ mới không hợp lệ: %s\n"
 
-#: resize/main.c:392
+#: resize/main.c:381
 msgid "New size too large to be expressed in 32 bits\n"
 msgstr "Kích thước mới quá lớn để có thể dùng số 32 bit\n"
 
-#: resize/main.c:404
+#: resize/main.c:389
 #, c-format
 msgid "New size smaller than minimum (%llu)\n"
 msgstr "Kích cỡ mới vẫn nhỏ hơn mức tối thiểu (%llu)\n"
 
-#: resize/main.c:410
+#: resize/main.c:395
 msgid "Invalid stride length"
 msgstr "Độ dài stride không hợp lệ"
 
-#: resize/main.c:434
+#: resize/main.c:419
 #, c-format
 msgid ""
 "The containing partition (or device) is only %llu (%dk) blocks.\n"
@@ -5772,7 +5686,7 @@ msgstr ""
 "Bạn đã yêu cầu kích cỡ mới %llu khối.\n"
 "\n"
 
-#: resize/main.c:441
+#: resize/main.c:426
 #, c-format
 msgid ""
 "The filesystem is already %llu blocks long.  Nothing to do!\n"
@@ -5781,27 +5695,35 @@ msgstr ""
 "Hệ thống tập tin đã có độ dài %llu khối. Không có gì cần làm !\n"
 "\n"
 
-#: resize/main.c:456
+#: resize/main.c:457
 #, c-format
-msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
+msgid ""
+"%s: The combination of flex_bg and\n"
+"\t!resize_inode features is not supported by resize2fs.\n"
 msgstr ""
-"Đang thay đổi kích cỡ của hệ thống tập tin trên %s thành %llu (%dk) khối.\n"
+"%s: tổ hợp hai tính năng flex_bg và !resize_inode\n"
+"đều không được resize2fs hỗ trợ.\n"
+
+#: resize/main.c:463
+#, c-format
+msgid "Resizing the filesystem on %s to %llu (%dk) blocks.\n"
+msgstr "Đang thay đổi kích cỡ của hệ thống tập tin trên %s thành %llu (%dk) khối.\n"
 
-#: resize/main.c:465
+#: resize/main.c:472
 #, c-format
 msgid "while trying to resize %s"
 msgstr "trong khi thử thay đổi kích cỡ %s"
 
-#: resize/main.c:468
+#: resize/main.c:475
 #, c-format
 msgid ""
 "Please run 'e2fsck -fy %s' to fix the filesystem\n"
 "after the aborted resize operation.\n"
 msgstr ""
-"Hãy chạy câu lệnh « e2fsck -fy %s » để sửa chữa hệ thống tập tin\n"
+"Hãy chạy câu lệnh “e2fsck -fy %s” để sửa chữa hệ thống tập tin\n"
 "đằng sau thao tác thay đổi kích cỡ bị hủy bỏ.\n"
 
-#: resize/main.c:474
+#: resize/main.c:481
 #, c-format
 msgid ""
 "The filesystem on %s is now %llu blocks long.\n"
@@ -5810,7 +5732,7 @@ msgstr ""
 "Hệ thống tập tin nằm trên %s giờ có độ dài %llu khối.\n"
 "\n"
 
-#: resize/main.c:489
+#: resize/main.c:496
 #, c-format
 msgid "while trying to truncate %s"
 msgstr "trong khi thử cắt ngắn %s"
@@ -5818,88 +5740,81 @@ msgstr "trong khi thử cắt ngắn %s"
 #: resize/online.c:40
 #, c-format
 msgid "Filesystem at %s is mounted on %s; on-line resizing required\n"
-msgstr ""
-"Hệ thống tập tin ở %s được gắn kết vào %s; cần thiết thay đổi kích cỡ trực "
-"tuyến\n"
+msgstr "Hệ thống tập tin ở %s được gắn kết vào %s; cần thiết thay đổi kích cỡ trực tuyến\n"
 
 #: resize/online.c:44
 msgid "On-line shrinking not supported"
 msgstr "Tính năng thu nhỏ khi đang chạy không được hỗ trợ"
 
-#: resize/online.c:63
+#: resize/online.c:69
 msgid "Filesystem does not support online resizing"
 msgstr "Hệ thống tập tin không hỗ trợ tính năng thay đổi kích cỡ trực tuyến"
 
-#: resize/online.c:70
+#: resize/online.c:78
+msgid "Not enough reserved gdt blocks for resizing"
+msgstr "Không đủ khối dự trữ gdt để thay đổi kích thước"
+
+#: resize/online.c:85
+msgid "Kernel does not support resizing a file system this large"
+msgstr "Hạt nhân không hỗ trợ tính năng thay đổi kích cỡ hệ thống tập tin này rộng hơn"
+
+#: resize/online.c:93
 #, c-format
 msgid "while trying to open mountpoint %s"
 msgstr "trong khi thử mở điểm lắp %s"
 
-#: resize/online.c:92 resize/online.c:116
+#: resize/online.c:115 resize/online.c:132
 msgid "Permission denied to resize filesystem"
 msgstr "Không đủ quyền để thay đổi kích cỡ của hệ thống tập tin"
 
-#: resize/online.c:95 resize/online.c:122
+#: resize/online.c:118 resize/online.c:138
 msgid "While checking for on-line resizing support"
 msgstr "Trong khi kiểm tra có hỗ trợ thay đổi kích cỡ trực tuyến"
 
-#: resize/online.c:107
-msgid "Kernel does not support resizing a file system this large"
-msgstr ""
-"Hạt nhân không hỗ trợ tính năng thay đổi kích cỡ hệ thống tệp tin này rộng "
-"hơn"
-
-#: resize/online.c:119
+#: resize/online.c:135
 msgid "Kernel does not support online resizing"
 msgstr "Hạt nhân không hỗ trợ tính năng thay đổi kích cỡ trực tuyến"
 
-#: resize/online.c:152
+#: resize/online.c:168
 #, c-format
 msgid "Performing an on-line resize of %s to %llu (%dk) blocks.\n"
-msgstr ""
-"Đang thực hiện một công việc thay đổi kích cỡ %s trực tuyến thành %llu (%dk) "
-"khối.\n"
+msgstr "Đang thực hiện một công việc thay đổi kích cỡ %s trực tuyến thành %llu (%dk) khối.\n"
 
-#: resize/online.c:162
+#: resize/online.c:178
 msgid "While trying to extend the last group"
 msgstr "Trong khi thử mở rộng nhóm cuối cùng"
 
-#: resize/online.c:216
+#: resize/online.c:232
 #, c-format
 msgid "While trying to add group #%d"
 msgstr "Trong khi thử thêm nhóm số %d"
 
-#: resize/online.c:227
+#: resize/online.c:243
 #, c-format
-msgid ""
-"Filesystem at %s is mounted on %s, and on-line resizing is not supported on "
-"this system.\n"
-msgstr ""
-"Hệ thống tập tin ở %s được gắn kết vào %s, và tính năng thay đổi kích cỡ "
-"trên dòng không được hỗ trợ trên hệ thống này.\n"
+msgid "Filesystem at %s is mounted on %s, and on-line resizing is not supported on this system.\n"
+msgstr "Hệ thống tập tin ở %s được gắn kết vào %s, và tính năng thay đổi kích cỡ trên dòng không được hỗ trợ trên hệ thống này.\n"
 
-#: resize/resize2fs.c:348
+#: resize/resize2fs.c:346
 #, c-format
 msgid "inodes (%llu) must be less than %u"
 msgstr "nút thông tin (%llu) phải nhỏ hơn %u"
 
-#: resize/resize2fs.c:576
+#: resize/resize2fs.c:582
 msgid "reserved blocks"
 msgstr "khối dành riêng"
 
-#: resize/resize2fs.c:789
+#: resize/resize2fs.c:807
 msgid "meta-data blocks"
 msgstr "khối siêu dữ liệu"
 
-#: resize/resize2fs.c:1735
+#: resize/resize2fs.c:1753
 #, c-format
 msgid "Should never happen: resize inode corrupt!\n"
 msgstr "Không bao giờ nên xảy ra: nút thông tin thay đổi kích cỡ bị hỏng !\n"
 
 #: lib/ext2fs/ext2_err.c:11
-#, fuzzy
-msgid "EXT2FS Library version 1.42.4"
-msgstr "Thư viện EXT2FS phiên bản 1.42"
+msgid "EXT2FS Library version 1.42.6"
+msgstr "Thư viện EXT2FS phiên bản 1.42.6"
 
 #: lib/ext2fs/ext2_err.c:12
 msgid "Wrong magic number for ext2_filsys structure"
@@ -5959,7 +5874,7 @@ msgstr "Sai số màu nhiệm cho cấu trúc Powerquest io_channe"
 
 #: lib/ext2fs/ext2_err.c:26
 msgid "Wrong magic number for ext2 file structure"
-msgstr "Sai sá»\91 màu nhiá»\87m cho cấu trúc tá»\87p tin ext2"
+msgstr "Sai sá»\91 màu nhiá»\87m cho cấu trúc tập tin ext2"
 
 #: lib/ext2fs/ext2_err.c:27
 msgid "Wrong magic number for Ext2 Image Header"
@@ -5979,11 +5894,11 @@ msgstr "Sai số màu nhiệm trong siêu khối"
 
 #: lib/ext2fs/ext2_err.c:31
 msgid "Filesystem revision too high"
-msgstr "Phiên bản há»\87 thá»\91ng tá»\87p tin quá cao"
+msgstr "Phiên bản há»\87 thá»\91ng tập tin quá cao"
 
 #: lib/ext2fs/ext2_err.c:32
 msgid "Attempt to write to filesystem opened read-only"
-msgstr "Thá»­ viết vào há»\87 thá»\91ng tá»\87p tin mà nónó chỉ đọc"
+msgstr "Thá»­ viết vào há»\87 thá»\91ng tập tin mà nónó chỉ đọc"
 
 #: lib/ext2fs/ext2_err.c:33
 msgid "Can't read group descriptors"
@@ -6027,7 +5942,7 @@ msgstr "Không thể ghi bảng nút thông tin"
 
 #: lib/ext2fs/ext2_err.c:43
 msgid "Can't read an inode table"
-msgstr "Không thể đọcbảng nút thông tin"
+msgstr "Không thể đọc bảng nút thông tin"
 
 #: lib/ext2fs/ext2_err.c:44
 msgid "Can't read next inode"
@@ -6035,7 +5950,7 @@ msgstr "Không thể đọc nút tiếp theo"
 
 #: lib/ext2fs/ext2_err.c:45
 msgid "Filesystem has unexpected block size"
-msgstr "Há»\87 thá»\91ng tá»\87p tin có kích cỡ khối bất thường"
+msgstr "Há»\87 thá»\91ng tập tin có kích cỡ khối bất thường"
 
 #: lib/ext2fs/ext2_err.c:46
 msgid "EXT2 directory corrupted"
@@ -6043,11 +5958,11 @@ msgstr "Thư mục ext2 đã hỏng"
 
 #: lib/ext2fs/ext2_err.c:47
 msgid "Attempt to read block from filesystem resulted in short read"
-msgstr "Thá»­ Ä\91á»\8dc khá»\91i từ há»\87 thá»\91ng tá»\87p tin kết quả dạng ngắn"
+msgstr "Thá»­ Ä\91á»\8dc khá»\91i từ há»\87 thá»\91ng tập tin kết quả dạng ngắn"
 
 #: lib/ext2fs/ext2_err.c:48
 msgid "Attempt to write block to filesystem resulted in short write"
-msgstr "Thá»­ ghi khá»\91i tá»\9bi há»\87 thá»\91ng tá»\87p tin kết quả dạng ngắn"
+msgstr "Thá»­ ghi khá»\91i tá»\9bi há»\87 thá»\91ng tập tin kết quả dạng ngắn"
 
 #: lib/ext2fs/ext2_err.c:49
 msgid "No free space in the directory"
@@ -6075,7 +5990,7 @@ msgstr "Lỗi nội bộ trong ext2fs_expand_dir"
 
 #: lib/ext2fs/ext2_err.c:55
 msgid "Not enough space to build proposed filesystem"
-msgstr "Không Ä\91ủ sức chứa Ä\91á»\83 xây dá»±ng há»\87 thá»\91ng tá»\87p tin như đề xuất"
+msgstr "Không Ä\91ủ sức chứa Ä\91á»\83 xây dá»±ng há»\87 thá»\91ng tập tin như đề xuất"
 
 #: lib/ext2fs/ext2_err.c:56
 msgid "Illegal block number passed to ext2fs_mark_block_bitmap"
@@ -6143,18 +6058,15 @@ msgstr "Siêu khối ext2 bị hỏng."
 
 #: lib/ext2fs/ext2_err.c:72
 msgid "Illegal generic bit number passed to ext2fs_mark_generic_bitmap"
-msgstr ""
-"Số bít chung không hợp lệ được chuyển qua cho ext2fs_mark_generic_bitmap"
+msgstr "Số bít chung không hợp lệ được chuyển qua cho ext2fs_mark_generic_bitmap"
 
 #: lib/ext2fs/ext2_err.c:73
 msgid "Illegal generic bit number passed to ext2fs_unmark_generic_bitmap"
-msgstr ""
-"Số bít chung không hợp lệ được chuyển qua cho ext2fs_unmark_generic_bitmap"
+msgstr "Số bít chung không hợp lệ được chuyển qua cho ext2fs_unmark_generic_bitmap"
 
 #: lib/ext2fs/ext2_err.c:74
 msgid "Illegal generic bit number passed to ext2fs_test_generic_bitmap"
-msgstr ""
-"Số bít chung không hợp lệ được chuyển qua cho ext2fs_test_generic_bitmap"
+msgstr "Số bít chung không hợp lệ được chuyển qua cho ext2fs_test_generic_bitmap"
 
 #: lib/ext2fs/ext2_err.c:75
 msgid "Too many symbolic links encountered."
@@ -6170,15 +6082,15 @@ msgstr "Nút từ một khối sai trong bảng nút"
 
 #: lib/ext2fs/ext2_err.c:78
 msgid "Filesystem has unsupported feature(s)"
-msgstr "Há»\87 thá»\91ng tá»\87p tin có tính năng không được hỗ trợ"
+msgstr "Há»\87 thá»\91ng tập tin có tính năng không được hỗ trợ"
 
 #: lib/ext2fs/ext2_err.c:79
 msgid "Filesystem has unsupported read-only feature(s)"
-msgstr "Há»\87 thá»\91ng tá»\87p tin không hỗ trợ tính năng chỉ đọc"
+msgstr "Há»\87 thá»\91ng tập tin không hỗ trợ tính năng chỉ đọc"
 
 #: lib/ext2fs/ext2_err.c:80
 msgid "IO Channel failed to seek on read or write"
-msgstr "Kênh IO gặp lá»\97i khi tìm kiếm trên tá»\87p tin lúc đọc hay ghi"
+msgstr "Kênh IO gặp lá»\97i khi tìm kiếm trên tập tin lúc đọc hay ghi"
 
 #: lib/ext2fs/ext2_err.c:81
 msgid "Memory allocation failed"
@@ -6206,11 +6118,11 @@ msgstr "Có quá nhiều tham chiếu trong bảng"
 
 #: lib/ext2fs/ext2_err.c:87
 msgid "File not found by ext2_lookup"
-msgstr "Tá»\87p tin không tìm được bởi ext2_lookup"
+msgstr "Tập tin không tìm được bởi ext2_lookup"
 
 #: lib/ext2fs/ext2_err.c:88
 msgid "File open read-only"
-msgstr "Má»\9f tá»\87p tin trong chế độ chỉ cho đọc"
+msgstr "Má»\9f tập tin trong chế độ chỉ cho đọc"
 
 #: lib/ext2fs/ext2_err.c:89
 msgid "Ext2 directory block not found"
@@ -6230,7 +6142,7 @@ msgstr "Người dùng yêu cầu hủy"
 
 #: lib/ext2fs/ext2_err.c:93
 msgid "Ext2 file too big"
-msgstr "Tá»\87p tin ext2 quá lớn"
+msgstr "Tập tin ext2 quá lớn"
 
 #: lib/ext2fs/ext2_err.c:94
 msgid "Supplied journal device not a block device"
@@ -6266,7 +6178,7 @@ msgstr "Số khối thuộc tính mở rộng không hợp lệ"
 
 #: lib/ext2fs/ext2_err.c:102
 msgid "Cannot create filesystem with requested number of inodes"
-msgstr "Không thá»\83 tạo há»\87 thá»\91ng tá»\87p tin với số nút đã yêu cầu"
+msgstr "Không thá»\83 tạo há»\87 thá»\91ng tập tin với số nút đã yêu cầu"
 
 #: lib/ext2fs/ext2_err.c:103
 msgid "E2image snapshot not in use"
@@ -6398,19 +6310,19 @@ msgstr "Inode does not use extents"
 
 #: lib/ext2fs/ext2_err.c:135
 msgid "No 'next' extent"
-msgstr "Không có extent 'tiếp theo'"
+msgstr "Không có extent “tiếp theo”"
 
 #: lib/ext2fs/ext2_err.c:136
 msgid "No 'previous' extent"
-msgstr "Không có extent 'liền trước'"
+msgstr "Không có extent “liền trước”"
 
 #: lib/ext2fs/ext2_err.c:137
 msgid "No 'up' extent"
-msgstr "Không có extent 'lên'"
+msgstr "Không có extent “lên”"
 
 #: lib/ext2fs/ext2_err.c:138
 msgid "No 'down' extent"
-msgstr "Không có extent 'xuống'"
+msgstr "Không có extent “xuống”"
 
 #: lib/ext2fs/ext2_err.c:139
 msgid "No current node"
@@ -6446,12 +6358,11 @@ msgstr "Kênh I/O không hỗ trợ số khối 64-bít"
 
 #: lib/ext2fs/ext2_err.c:147
 msgid "Can't check if filesystem is mounted due to missing mtab file"
-msgstr ""
-"Không thể kiểm tra nếu hệ thống tệp tin được gắn bởi vì mất tệp tin mtab"
+msgstr "Không thể kiểm tra nếu hệ thống tập tin được gắn bởi vì mất tập tin mtab"
 
 #: lib/ext2fs/ext2_err.c:148
 msgid "Filesystem too large to use legacy bitmaps"
-msgstr "Há»\87 thá»\91ng tá»\87p tin quá lớn để có thể sử dụng mảng kiểu cũ"
+msgstr "Há»\87 thá»\91ng tập tin quá lớn để có thể sử dụng mảng kiểu cũ"
 
 #: lib/ext2fs/ext2_err.c:149
 msgid "MMP: invalid magic number"
@@ -6467,7 +6378,7 @@ msgstr "MMP: fsck đang chạy"
 
 #: lib/ext2fs/ext2_err.c:152
 msgid "MMP: block number beyond filesystem range"
-msgstr "MMP: sá»\91 khá»\91i nằm xa ngoài vùng của há»\87 thá»\91ng tá»\87p tin"
+msgstr "MMP: sá»\91 khá»\91i nằm xa ngoài vùng của há»\87 thá»\91ng tập tin"
 
 #: lib/ext2fs/ext2_err.c:153
 msgid "MMP: undergoing an unknown operation"
@@ -6475,7 +6386,7 @@ msgstr "MMP: trải qua một thao tác chưa được biết đến"
 
 #: lib/ext2fs/ext2_err.c:154
 msgid "MMP: filesystem still in use"
-msgstr "MMP: há»\87 thá»\91ng tá»\87p tin vẫn đang được sử dụng"
+msgstr "MMP: há»\87 thá»\91ng tập tin vẫn đang được sử dụng"
 
 #: lib/ext2fs/ext2_err.c:155
 msgid "MMP: open with O_DIRECT failed"
@@ -6531,7 +6442,7 @@ msgstr "Tham số không hợp lệ được chuyển qua cho thư viện profil
 
 #: e2fsck/prof_err.c:23
 msgid "Attempt to modify read-only profile"
-msgstr "Thá»­ viết vào há»\87 thá»\91ng tá»\87p tin profile chỉ đọc"
+msgstr "Thá»­ viết vào há»\87 thá»\91ng tập tin profile chỉ đọc"
 
 #: e2fsck/prof_err.c:24
 msgid "Profile section header not at top level"
@@ -6630,7 +6541,7 @@ msgstr "Giá trị số mầu nhiệm sai trong profile_file_data_t"
 #~ msgstr "cỡ đoạn không hợp lệ — %s"
 
 #~ msgid "Warning: fragments not supported.  Ignoring -f option\n"
-#~ msgstr "Cảnh báo: không hỗ trợ đoạn nên bỏ qua tùy chọn « -f »\n"
+#~ msgstr "Cảnh báo: không hỗ trợ đoạn nên bỏ qua tùy chọn “-f”\n"
 
 #~ msgid "Calling BLKDISCARD from %llu to %llu "
 #~ msgstr "Đang gọi BLKDISCARD từ %llu đến %llu "
index b2739ac..a06b642 100644 (file)
@@ -16,7 +16,8 @@ PROGS=                resize2fs
 TEST_PROGS=    test_extent
 MANPAGES=      resize2fs.8
 
-RESIZE_OBJS= extent.o resize2fs.o main.o online.o sim_progress.o 
+RESIZE_OBJS= extent.o resize2fs.o main.o online.o resource_track.o \
+               sim_progress.o
 
 TEST_EXTENT_OBJS= extent.o test_extent.o
 
@@ -24,6 +25,7 @@ SRCS= $(srcdir)/extent.c \
        $(srcdir)/resize2fs.c \
        $(srcdir)/main.c \
        $(srcdir)/online.c \
+       $(srcdir)/resource_track.c \
        $(srcdir)/sim_progress.c
 
 LIBS= $(LIBE2P) $(LIBEXT2FS) $(LIBCOM_ERR) $(LIBINTL)
@@ -144,35 +146,48 @@ source_tar_file: $(top_srcdir)/.exclude-file
 # Makefile dependencies follow.  This must be the last section in
 # the Makefile.in file
 #
-extent.o: $(srcdir)/extent.c $(srcdir)/resize2fs.h \
+extent.o: $(srcdir)/extent.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/resize2fs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h \
  $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(top_srcdir)/lib/e2p/e2p.h
-resize2fs.o: $(srcdir)/resize2fs.c $(srcdir)/resize2fs.h \
+resize2fs.o: $(srcdir)/resize2fs.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/resize2fs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h \
  $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(top_srcdir)/lib/e2p/e2p.h
-main.o: $(srcdir)/main.c $(top_srcdir)/lib/e2p/e2p.h \
+main.o: $(srcdir)/main.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/e2p/e2p.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(srcdir)/resize2fs.h $(top_srcdir)/lib/ext2fs/ext2fs.h \
  $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \
  $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \
  $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(top_srcdir)/version.h
-online.o: $(srcdir)/online.c $(srcdir)/resize2fs.h \
+online.o: $(srcdir)/online.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/resize2fs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
  $(top_builddir)/lib/ext2fs/ext2_err.h \
  $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
  $(top_srcdir)/lib/e2p/e2p.h
-sim_progress.o: $(srcdir)/sim_progress.c $(srcdir)/resize2fs.h \
+resource_track.o: $(srcdir)/resource_track.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/resize2fs.h \
+ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
+ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
+ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
+ $(top_builddir)/lib/ext2fs/ext2_err.h \
+ $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \
+ $(top_srcdir)/lib/e2p/e2p.h
+sim_progress.o: $(srcdir)/sim_progress.c $(top_builddir)/lib/config.h \
+ $(top_builddir)/lib/dirpaths.h $(srcdir)/resize2fs.h \
  $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \
  $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \
  $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \
index e6604f2..b648a15 100644 (file)
@@ -102,7 +102,7 @@ static void determine_fs_stride(ext2_filsys fs)
 {
        unsigned int    group;
        unsigned long long sum;
-       unsigned int    has_sb, prev_has_sb, num;
+       unsigned int    has_sb, prev_has_sb = 0, num;
        int             i_stride, b_stride;
 
        if (fs->stride)
@@ -147,6 +147,18 @@ static void determine_fs_stride(ext2_filsys fs)
 #endif
 }
 
+static void bigalloc_check(ext2_filsys fs, int force)
+{
+       if (!force && EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+                               EXT4_FEATURE_RO_COMPAT_BIGALLOC)) {
+               fprintf(stderr, _("\nResizing bigalloc file systems has "
+                                 "not been fully tested.  Proceed\n"
+                                 "at your own risk!  Use the force option "
+                                 "if you want to go ahead anyway.\n\n"));
+               exit(1);
+       }
+}
+
 int main (int argc, char ** argv)
 {
        errcode_t       retval;
@@ -316,25 +328,6 @@ int main (int argc, char ** argv)
                exit(1);
        }
 
-       /*
-        * XXXX   The combination of flex_bg and !resize_inode causes
-        * major problems for resize2fs, since when the group descriptors
-        * grow in size this can potentially require multiple inode
-        * tables to be moved aside to make room, and resize2fs chokes
-        * rather badly in this scenario.  It's a rare combination,
-        * except when a filesystem is expanded more than a certain
-        * size, so for now, we'll just prohibit that combination.
-        * This is something we should fix eventually, though.
-        */
-       if ((fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) &&
-           !(fs->super->s_feature_compat & EXT2_FEATURE_COMPAT_RESIZE_INODE)) {
-               com_err(program_name, 0, _("%s: The combination of flex_bg "
-                                          "and\n\t!resize_inode features "
-                                          "is not supported by resize2fs.\n"),
-                       device_name);
-               exit(1);
-       }
-
        min_size = calculate_minimum_resize_size(fs);
 
        if (print_min_size) {
@@ -385,19 +378,23 @@ int main (int argc, char ** argv)
                        exit(1);
                }
        } else {
-               /* Take down devices exactly 16T to 2^32-1 blocks */
-               if (max_size == (1ULL << 32))
-                       max_size--;
-               else if (max_size > (1ULL << 32)) {
-                       com_err(program_name, 0, _("New size too large to be "
-                               "expressed in 32 bits\n"));
-                       exit(1);
-               }
                new_size = max_size;
                /* Round down to an even multiple of a pagesize */
                if (sys_page_size > fs->blocksize)
                        new_size &= ~((sys_page_size / fs->blocksize)-1);
        }
+       if (!EXT2_HAS_INCOMPAT_FEATURE(fs->super,
+                                      EXT4_FEATURE_INCOMPAT_64BIT)) {
+               /* Take 16T down to 2^32-1 blocks */
+               if (new_size == (1ULL << 32))
+                       new_size--;
+               else if (new_size > (1ULL << 32)) {
+                       com_err(program_name, 0,
+                               _("New size too large to be "
+                                 "expressed in 32 bits\n"));
+                       exit(1);
+               }
+       }
 
        if (!force && new_size < min_size) {
                com_err(program_name, 0,
@@ -443,6 +440,7 @@ int main (int argc, char ** argv)
                exit(0);
        }
        if (mount_flags & EXT2_MF_MOUNTED) {
+               bigalloc_check(fs, force);
                retval = online_resize_fs(fs, mtpt, &new_size, flags);
        } else {
                if (!force && ((fs->super->s_lastcheck < fs->super->s_mtime) ||
@@ -453,6 +451,7 @@ int main (int argc, char ** argv)
                                device_name);
                        exit(1);
                }
+               bigalloc_check(fs, force);
                printf(_("Resizing the filesystem on "
                         "%s to %llu (%dk) blocks.\n"),
                       device_name, new_size, fs->blocksize / 1024);
index 966ea1e..2d34640 100644 (file)
@@ -21,6 +21,33 @@ extern char *program_name;
 
 #define MAX_32_NUM ((((unsigned long long) 1) << 32) - 1)
 
+#ifdef __linux__
+static int parse_version_number(const char *s)
+{
+       int     major, minor, rev;
+       char    *endptr;
+       const char *cp = s;
+
+       if (!s)
+               return 0;
+       major = strtol(cp, &endptr, 10);
+       if (cp == endptr || *endptr != '.')
+               return 0;
+       cp = endptr + 1;
+       minor = strtol(cp, &endptr, 10);
+       if (cp == endptr || *endptr != '.')
+               return 0;
+       cp = endptr + 1;
+       rev = strtol(cp, &endptr, 10);
+       if (cp == endptr)
+               return 0;
+       return ((((major * 256) + minor) * 256) + rev);
+}
+
+#define VERSION_CODE(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+
+#endif
+
 errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
                           blk64_t *new_size, int flags EXT2FS_ATTR((unused)))
 {
@@ -36,6 +63,18 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
        blk_t                   size;
        int                     fd, overhead;
        int                     use_old_ioctl = 1;
+       int                     no_meta_bg_resize = 0;
+       int                     no_resize_ioctl = 0;
+
+       if (getenv("RESIZE2FS_KERNEL_VERSION")) {
+               char *version_to_emulate = getenv("RESIZE2FS_KERNEL_VERSION");
+               int kvers = parse_version_number(version_to_emulate);
+
+               if (kvers < VERSION_CODE(3, 7, 0))
+                       no_meta_bg_resize = 1;
+               if (kvers < VERSION_CODE(3, 3, 0))
+                       no_resize_ioctl = 1;
+       }
 
        printf(_("Filesystem at %s is mounted on %s; "
                 "on-line resizing required\n"), fs->device_name, mtpt);
@@ -56,12 +95,35 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
                EXT2_DESC_PER_BLOCK(fs->super));
        printf("old_desc_blocks = %lu, new_desc_blocks = %lu\n",
               fs->desc_blocks, new_desc_blocks);
-       if (!(fs->super->s_feature_compat &
-             EXT2_FEATURE_COMPAT_RESIZE_INODE) &&
-           new_desc_blocks != fs->desc_blocks) {
-               com_err(program_name, 0,
-                       _("Filesystem does not support online resizing"));
-               exit(1);
+
+       /*
+        * Do error checking to make sure the resize will be successful.
+        */
+       if ((access("/sys/fs/ext4/features/meta_bg_resize", R_OK) != 0) ||
+           no_meta_bg_resize) {
+               if (!EXT2_HAS_COMPAT_FEATURE(fs->super,
+                                       EXT2_FEATURE_COMPAT_RESIZE_INODE) &&
+                   (new_desc_blocks != fs->desc_blocks)) {
+                       com_err(program_name, 0,
+                               _("Filesystem does not support online resizing"));
+                       exit(1);
+               }
+
+               if (EXT2_HAS_COMPAT_FEATURE(fs->super,
+                                       EXT2_FEATURE_COMPAT_RESIZE_INODE) &&
+                   new_desc_blocks > (fs->desc_blocks +
+                                      fs->super->s_reserved_gdt_blocks)) {
+                       com_err(program_name, 0,
+                               _("Not enough reserved gdt blocks for resizing"));
+                       exit(1);
+               }
+
+               if ((ext2fs_blocks_count(sb) > MAX_32_NUM) ||
+                   (*new_size > MAX_32_NUM)) {
+                       com_err(program_name, 0,
+                               _("Kernel does not support resizing a file system this large"));
+                       exit(1);
+               }
        }
 
        fd = open(mtpt, O_RDONLY);
@@ -71,7 +133,9 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
                exit(1);
        }
 
-       if (ioctl(fd, EXT4_IOC_RESIZE_FS, new_size)) {
+       if (no_resize_ioctl) {
+               printf(_("Old resize interface requested.\n"));
+       } else if (ioctl(fd, EXT4_IOC_RESIZE_FS, new_size)) {
                /*
                 * If kernel does not support EXT4_IOC_RESIZE_FS, use the
                 * old online resize. Note that the old approach does not
@@ -101,13 +165,6 @@ errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
                return 0;
        }
 
-       if ((ext2fs_blocks_count(sb) > MAX_32_NUM) ||
-           (*new_size > MAX_32_NUM)) {
-               com_err(program_name, 0,
-                       _("Kernel does not support resizing a file system "
-                         "this large"));
-               exit(1);
-       }
        size = ext2fs_blocks_count(sb);
 
        if (ioctl(fd, EXT2_IOC_GROUP_EXTEND, &size)) {
index 9ff6e0a..735fc91 100644 (file)
@@ -99,6 +99,8 @@ from the following list:
        4       \-\ Debug inode relocations
 .br
        8       \-\ Debug moving the inode table
+.br
+       16      \-\ Print timing information
 .TP 
 .B \-f
 Forces resize2fs to proceed with the filesystem resize operation, overriding
index dc2805d..204b10a 100644 (file)
@@ -51,6 +51,8 @@ static errcode_t move_itables(ext2_resize_t rfs);
 static errcode_t fix_resize_inode(ext2_filsys fs);
 static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs);
 static errcode_t fix_sb_journal_backup(ext2_filsys fs);
+static errcode_t mark_table_blocks(ext2_filsys fs,
+                                  ext2fs_block_bitmap bmap);
 
 /*
  * Some helper CPP macros
@@ -62,9 +64,16 @@ static errcode_t fix_sb_journal_backup(ext2_filsys fs);
                                 ((blk) < (ext2fs_inode_table_loc((fs), (i)) + \
                                           (fs)->inode_blocks_per_group)))
 
-#define META_OVERHEAD(fs) (2 + (fs)->inode_blocks_per_group)
-#define SUPER_OVERHEAD(fs) (1 + (fs)->desc_blocks +\
-                           (fs)->super->s_reserved_gdt_blocks)
+/* Some bigalloc helper macros which are more succint... */
+#define B2C(x) EXT2FS_B2C(fs, (x))
+#define C2B(x) EXT2FS_C2B(fs, (x))
+#define EQ_CLSTR(x, y) (B2C(x) == B2C(y))
+#define LE_CLSTR(x, y) (B2C(x) <= B2C(y))
+#define LT_CLSTR(x, y) (B2C(x) <  B2C(y))
+#define GE_CLSTR(x, y) (B2C(x) >= B2C(y))
+#define GT_CLSTR(x, y) (B2C(x) >  B2C(y))
+
+int lazy_itable_init;
 
 /*
  * This is the top-level routine which does the dirty deed....
@@ -76,14 +85,7 @@ errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags,
 {
        ext2_resize_t   rfs;
        errcode_t       retval;
-
-       retval = ext2fs_read_bitmaps(fs);
-       if (retval)
-               return retval;
-
-       fs->super->s_state |= EXT2_ERROR_FS;
-       ext2fs_mark_super_dirty(fs);
-       ext2fs_flush(fs);
+       struct resource_track   rtrack, overall_track;
 
        /*
         * Create the data structure
@@ -91,32 +93,53 @@ errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags,
        retval = ext2fs_get_mem(sizeof(struct ext2_resize_struct), &rfs);
        if (retval)
                return retval;
-       memset(rfs, 0, sizeof(struct ext2_resize_struct));
 
-       fix_uninit_block_bitmaps(fs);
+       memset(rfs, 0, sizeof(struct ext2_resize_struct));
        fs->priv_data = rfs;
        rfs->old_fs = fs;
        rfs->flags = flags;
        rfs->itable_buf  = 0;
        rfs->progress = progress;
+
+       init_resource_track(&overall_track, "overall resize2fs", fs->io);
+       init_resource_track(&rtrack, "read_bitmaps", fs->io);
+       retval = ext2fs_read_bitmaps(fs);
+       if (retval)
+               goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
+
+       fs->super->s_state |= EXT2_ERROR_FS;
+       ext2fs_mark_super_dirty(fs);
+       ext2fs_flush(fs);
+
+       init_resource_track(&rtrack, "fix_uninit_block_bitmaps 1", fs->io);
+       fix_uninit_block_bitmaps(fs);
+       print_resource_track(rfs, &rtrack, fs->io);
        retval = ext2fs_dup_handle(fs, &rfs->new_fs);
        if (retval)
                goto errout;
 
+       init_resource_track(&rtrack, "adjust_superblock", fs->io);
        retval = adjust_superblock(rfs, *new_size);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
+
 
+       init_resource_track(&rtrack, "fix_uninit_block_bitmaps 2", fs->io);
        fix_uninit_block_bitmaps(rfs->new_fs);
+       print_resource_track(rfs, &rtrack, fs->io);
        /* Clear the block bitmap uninit flag for the last block group */
        ext2fs_bg_flags_clear(rfs->new_fs, rfs->new_fs->group_desc_count - 1,
                             EXT2_BG_BLOCK_UNINIT);
 
        *new_size = ext2fs_blocks_count(rfs->new_fs->super);
 
+       init_resource_track(&rtrack, "blocks_to_move", fs->io);
        retval = blocks_to_move(rfs);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
 
 #ifdef RESIZE2FS_DEBUG
        if (rfs->flags & RESIZE_DEBUG_BMOVE)
@@ -126,36 +149,52 @@ errcode_t resize_fs(ext2_filsys fs, blk64_t *new_size, int flags,
                       rfs->needed_blocks);
 #endif
 
+       init_resource_track(&rtrack, "block_mover", fs->io);
        retval = block_mover(rfs);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
 
+       init_resource_track(&rtrack, "inode_scan_and_fix", fs->io);
        retval = inode_scan_and_fix(rfs);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
 
+       init_resource_track(&rtrack, "inode_ref_fix", fs->io);
        retval = inode_ref_fix(rfs);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
 
+       init_resource_track(&rtrack, "move_itables", fs->io);
        retval = move_itables(rfs);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
 
+       init_resource_track(&rtrack, "calculate_summary_stats", fs->io);
        retval = ext2fs_calculate_summary_stats(rfs->new_fs);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
 
+       init_resource_track(&rtrack, "fix_resize_inode", fs->io);
        retval = fix_resize_inode(rfs->new_fs);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
 
+       init_resource_track(&rtrack, "fix_sb_journal_backup", fs->io);
        retval = fix_sb_journal_backup(rfs->new_fs);
        if (retval)
                goto errout;
+       print_resource_track(rfs, &rtrack, fs->io);
 
        rfs->new_fs->super->s_state &= ~EXT2_ERROR_FS;
        rfs->new_fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
+
+       print_resource_track(rfs, &overall_track, fs->io);
        retval = ext2fs_close(rfs->new_fs);
        if (retval)
                goto errout;
@@ -187,9 +226,9 @@ errout:
  */
 static void fix_uninit_block_bitmaps(ext2_filsys fs)
 {
-       blk64_t         i, blk, super_blk, old_desc_blk, new_desc_blk;
-       int             old_desc_blocks;
+       blk64_t         blk, lblk;
        dgrp_t          g;
+       int             i;
 
        if (!(EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
                                         EXT4_FEATURE_RO_COMPAT_GDT_CSUM)))
@@ -199,35 +238,20 @@ static void fix_uninit_block_bitmaps(ext2_filsys fs)
                if (!(ext2fs_bg_flags_test(fs, g, EXT2_BG_BLOCK_UNINIT)))
                        continue;
 
-               blk = (g * fs->super->s_blocks_per_group) +
-                       fs->super->s_first_data_block;
-
-               ext2fs_super_and_bgd_loc2(fs, g, &super_blk,
-                                         &old_desc_blk, &new_desc_blk, 0);
-
-               if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
-                       old_desc_blocks = fs->super->s_first_meta_bg;
-               else
-                       old_desc_blocks = fs->desc_blocks +
-                               fs->super->s_reserved_gdt_blocks;
-
-               for (i=0; i < fs->super->s_blocks_per_group; i++, blk++) {
-                       if (blk >= ext2fs_blocks_count(fs->super))
-                               break;
-                       if ((blk == super_blk) ||
-                           (old_desc_blk && old_desc_blocks &&
-                            (blk >= old_desc_blk) &&
-                            (blk < old_desc_blk + old_desc_blocks)) ||
-                           (new_desc_blk && (blk == new_desc_blk)) ||
-                           (blk == ext2fs_block_bitmap_loc(fs, g)) ||
-                           (blk == ext2fs_inode_bitmap_loc(fs, g)) ||
-                           (blk >= ext2fs_inode_table_loc(fs, g) &&
-                            (blk < ext2fs_inode_table_loc(fs, g)
-                             + fs->inode_blocks_per_group)))
-                               ext2fs_fast_mark_block_bitmap2(fs->block_map, blk);
-                       else
-                               ext2fs_fast_unmark_block_bitmap2(fs->block_map, blk);
-               }
+               blk = ext2fs_group_first_block2(fs, g);
+               lblk = ext2fs_group_last_block2(fs, g);
+               ext2fs_unmark_block_bitmap_range2(fs->block_map, blk,
+                                                 lblk - blk + 1);
+
+               ext2fs_reserve_super_and_bgd(fs, g, fs->block_map);
+               ext2fs_mark_block_bitmap2(fs->block_map,
+                                         ext2fs_block_bitmap_loc(fs, g));
+               ext2fs_mark_block_bitmap2(fs->block_map,
+                                         ext2fs_inode_bitmap_loc(fs, g));
+               for (i = 0, blk = ext2fs_inode_table_loc(fs, g);
+                    i < (unsigned int) fs->inode_blocks_per_group;
+                    i++, blk++)
+                       ext2fs_mark_block_bitmap2(fs->block_map, blk);
        }
 }
 
@@ -284,9 +308,6 @@ static void free_gdp_blocks(ext2_filsys fs,
 /*
  * This routine is shared by the online and offline resize routines.
  * All of the information which is adjusted in memory is done here.
- *
- * The reserve_blocks parameter is only needed when shrinking the
- * filesystem.
  */
 errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs,
                         ext2fs_block_bitmap reserve_blocks, blk64_t new_size)
@@ -296,8 +317,8 @@ errcode_t adjust_fs_info(ext2_filsys fs, ext2_filsys old_fs,
        blk64_t         rem;
        blk64_t         blk, group_block;
        blk64_t         real_end;
-       blk64_t         adj, old_numblocks, numblocks, adjblocks;
-       unsigned long   i, j, old_desc_blocks, max_group;
+       blk64_t         old_numblocks, numblocks, adjblocks;
+       unsigned long   i, j, old_desc_blocks;
        unsigned int    meta_bg, meta_bg_size;
        int             has_super, csum_flag;
        unsigned long long new_inodes;  /* u64 to check for overflow */
@@ -385,12 +406,21 @@ retry:
        real_end = (((blk64_t) EXT2_BLOCKS_PER_GROUP(fs->super) *
                     fs->group_desc_count)) - 1 +
                fs->super->s_first_data_block;
-       retval = ext2fs_resize_block_bitmap2(ext2fs_blocks_count(fs->super)-1,
-                                           real_end, fs->block_map);
-
+       retval = ext2fs_resize_block_bitmap2(new_size - 1,
+                                            real_end, fs->block_map);
        if (retval) goto errout;
 
        /*
+        * If we are growing the file system, also grow the size of
+        * the reserve_blocks bitmap
+        */
+       if (reserve_blocks && new_size > ext2fs_blocks_count(old_fs->super)) {
+               retval = ext2fs_resize_block_bitmap2(new_size - 1,
+                                                    real_end, reserve_blocks);
+               if (retval) goto errout;
+       }
+
+       /*
         * Reallocate the group descriptors as necessary.
         */
        if (old_fs->desc_blocks != fs->desc_blocks) {
@@ -479,18 +509,26 @@ retry:
        /*
         * Initialize the new block group descriptors
         */
-       group_block = fs->super->s_first_data_block +
-               old_fs->group_desc_count * fs->super->s_blocks_per_group;
-
+       group_block = ext2fs_group_first_block2(fs,
+                                               old_fs->group_desc_count);
        csum_flag = EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
                                               EXT4_FEATURE_RO_COMPAT_GDT_CSUM);
-       adj = old_fs->group_desc_count;
-       max_group = fs->group_desc_count - adj;
+       if (access("/sys/fs/ext4/features/lazy_itable_init", F_OK) == 0)
+               lazy_itable_init = 1;
        if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
                old_desc_blocks = fs->super->s_first_meta_bg;
        else
                old_desc_blocks = fs->desc_blocks +
                        fs->super->s_reserved_gdt_blocks;
+
+       /*
+        * If we changed the number of block_group descriptor blocks,
+        * we need to make sure they are all marked as reserved in the
+        * file systems's block allocation map.
+        */
+       for (i = 0; i < old_fs->group_desc_count; i++)
+               ext2fs_reserve_super_and_bgd(fs, i, fs->block_map);
+
        for (i = old_fs->group_desc_count;
             i < fs->group_desc_count; i++) {
                memset(ext2fs_group_desc(fs, fs->group_desc, i), 0,
@@ -498,8 +536,14 @@ retry:
                adjblocks = 0;
 
                ext2fs_bg_flags_zap(fs, i);
-               if (csum_flag)
-                       ext2fs_bg_flags_set(fs, i, EXT2_BG_INODE_UNINIT | EXT2_BG_INODE_ZEROED);
+               if (csum_flag) {
+                       ext2fs_bg_flags_set(fs, i, EXT2_BG_INODE_UNINIT);
+                       if (!lazy_itable_init)
+                               ext2fs_bg_flags_set(fs, i,
+                                                   EXT2_BG_INODE_ZEROED);
+                       ext2fs_bg_itable_unused_set(fs, i,
+                                       fs->super->s_inodes_per_group);
+               }
 
                numblocks = ext2fs_group_blocks_count(fs, i);
                if ((i < fs->group_desc_count - 1) && csum_flag)
@@ -551,6 +595,17 @@ retry:
        }
        retval = 0;
 
+       /*
+        * Mark all of the metadata blocks as reserved so they won't
+        * get allocated by the call to ext2fs_allocate_group_table()
+        * in blocks_to_move(), where we allocate new blocks to
+        * replace those allocation bitmap and inode table blocks
+        * which have to get relocated to make space for an increased
+        * number of the block group descriptors.
+        */
+       if (reserve_blocks)
+               mark_table_blocks(fs, reserve_blocks);
+
 errout:
        return (retval);
 }
@@ -612,7 +667,19 @@ static errcode_t adjust_superblock(ext2_resize_t rfs, blk64_t new_size)
        }
 
        /*
-        * Initialize the new block group descriptors
+        * If we are using uninit_bg (aka GDT_CSUM) and the kernel
+        * supports lazy inode initialization, we can skip
+        * initializing the inode table.
+        */
+       if (lazy_itable_init &&
+           EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+                                      EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
+               retval = 0;
+               goto errout;
+       }
+
+       /*
+        * Initialize the inode table
         */
        retval = ext2fs_get_array(fs->blocksize, fs->inode_blocks_per_group,
                                &rfs->itable_buf);
@@ -620,9 +687,8 @@ static errcode_t adjust_superblock(ext2_resize_t rfs, blk64_t new_size)
                goto errout;
 
        memset(rfs->itable_buf, 0, fs->blocksize * fs->inode_blocks_per_group);
-       group_block = fs->super->s_first_data_block +
-               rfs->old_fs->group_desc_count * fs->super->s_blocks_per_group;
-
+       group_block = ext2fs_group_first_block2(fs,
+                                               rfs->old_fs->group_desc_count);
        adj = rfs->old_fs->group_desc_count;
        max_group = fs->group_desc_count - adj;
        if (rfs->progress) {
@@ -677,40 +743,33 @@ errout:
 static errcode_t mark_table_blocks(ext2_filsys fs,
                                   ext2fs_block_bitmap bmap)
 {
-       blk64_t                 b;
-       unsigned int            j;
        dgrp_t                  i;
-       unsigned long           meta_bg_size;
-       unsigned int            old_desc_blocks;
+       blk64_t                 blk;
 
-       meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super);
-       if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
-               old_desc_blocks = fs->super->s_first_meta_bg;
-       else
-               old_desc_blocks = fs->desc_blocks +
-                       fs->super->s_reserved_gdt_blocks;
        for (i = 0; i < fs->group_desc_count; i++) {
                ext2fs_reserve_super_and_bgd(fs, i, bmap);
 
                /*
                 * Mark the blocks used for the inode table
                 */
-               for (j = 0, b = ext2fs_inode_table_loc(fs, i);
-                    j < (unsigned int) fs->inode_blocks_per_group;
-                    j++, b++)
-                       ext2fs_mark_block_bitmap2(bmap, b);
+               blk = ext2fs_inode_table_loc(fs, i);
+               if (blk)
+                       ext2fs_mark_block_bitmap_range2(bmap, blk,
+                                               fs->inode_blocks_per_group);
 
                /*
                 * Mark block used for the block bitmap
                 */
-               ext2fs_mark_block_bitmap2(bmap,
-                                        ext2fs_block_bitmap_loc(fs, i));
+               blk = ext2fs_block_bitmap_loc(fs, i);
+               if (blk)
+                       ext2fs_mark_block_bitmap2(bmap, blk);
 
                /*
                 * Mark block used for the inode bitmap
                 */
-               ext2fs_mark_block_bitmap2(bmap,
-                                        ext2fs_inode_bitmap_loc(fs, i));
+               blk = ext2fs_inode_bitmap_loc(fs, i);
+               if (blk)
+                       ext2fs_mark_block_bitmap2(bmap, blk);
        }
        return 0;
 }
@@ -737,14 +796,41 @@ static void mark_fs_metablock(ext2_resize_t rfs,
        if (IS_BLOCK_BM(fs, group, blk)) {
                ext2fs_block_bitmap_loc_set(fs, group, 0);
                rfs->needed_blocks++;
-       } else if (IS_INODE_BM(fs, group, blk)) {
+               return;
+       }
+       if (IS_INODE_BM(fs, group, blk)) {
                ext2fs_inode_bitmap_loc_set(fs, group, 0);
                rfs->needed_blocks++;
-       } else if (IS_INODE_TB(fs, group, blk)) {
+               return;
+       }
+       if (IS_INODE_TB(fs, group, blk)) {
                ext2fs_inode_table_loc_set(fs, group, 0);
                rfs->needed_blocks++;
-       } else if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
-                                             EXT4_FEATURE_RO_COMPAT_GDT_CSUM) &&
+               return;
+       }
+       if (fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) {
+               dgrp_t i;
+
+               for (i=0; i < rfs->old_fs->group_desc_count; i++) {
+                       if (IS_BLOCK_BM(fs, i, blk)) {
+                               ext2fs_block_bitmap_loc_set(fs, i, 0);
+                               rfs->needed_blocks++;
+                               return;
+                       }
+                       if (IS_INODE_BM(fs, i, blk)) {
+                               ext2fs_inode_bitmap_loc_set(fs, i, 0);
+                               rfs->needed_blocks++;
+                               return;
+                       }
+                       if (IS_INODE_TB(fs, i, blk)) {
+                               ext2fs_inode_table_loc_set(fs, i, 0);
+                               rfs->needed_blocks++;
+                               return;
+                       }
+               }
+       }
+       if (EXT2_HAS_RO_COMPAT_FEATURE(fs->super,
+                                      EXT4_FEATURE_RO_COMPAT_GDT_CSUM) &&
                   (ext2fs_bg_flags_test(fs, group, EXT2_BG_BLOCK_UNINIT))) {
                /*
                 * If the block bitmap is uninitialized, which means
@@ -770,11 +856,12 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
        dgrp_t          i, max_groups, g;
        blk64_t         blk, group_blk;
        blk64_t         old_blocks, new_blocks;
+       blk64_t         new_size;
        unsigned int    meta_bg, meta_bg_size;
        errcode_t       retval;
        ext2_filsys     fs, old_fs;
        ext2fs_block_bitmap     meta_bmap;
-       __u32           save_incompat_flag;
+       int             flex_bg;
 
        fs = rfs->new_fs;
        old_fs = rfs->old_fs;
@@ -798,6 +885,32 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
        fs = rfs->new_fs;
 
        /*
+        * If we're shrinking the filesystem, we need to move any group's
+        * bitmaps which are beyond the end of the new filesystem.
+        */
+       new_size = ext2fs_blocks_count(fs->super);
+       if (new_size < ext2fs_blocks_count(old_fs->super)) {
+               for (g = 0; g < fs->group_desc_count; g++) {
+                       /*
+                        * ext2fs_allocate_group_table re-allocates bitmaps
+                        * which are set to block 0.
+                        */
+                       if (ext2fs_block_bitmap_loc(fs, g) >= new_size) {
+                               ext2fs_block_bitmap_loc_set(fs, g, 0);
+                               retval = ext2fs_allocate_group_table(fs, g, 0);
+                               if (retval)
+                                       return retval;
+                       }
+                       if (ext2fs_inode_bitmap_loc(fs, g) >= new_size) {
+                               ext2fs_inode_bitmap_loc_set(fs, g, 0);
+                               retval = ext2fs_allocate_group_table(fs, g, 0);
+                               if (retval)
+                                       return retval;
+                       }
+               }
+       }
+
+       /*
         * If we're shrinking the filesystem, we need to move all of
         * the blocks that don't fit any more
         */
@@ -811,8 +924,7 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
                         * The block bitmap is uninitialized, so skip
                         * to the next block group.
                         */
-                       blk = ((g+1) * fs->super->s_blocks_per_group) +
-                               fs->super->s_first_data_block - 1;
+                       blk = ext2fs_group_first_block2(fs, g+1) - 1;
                        continue;
                }
                if (ext2fs_test_block_bitmap2(old_fs->block_map, blk) &&
@@ -866,6 +978,9 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
         * gets interesting....
         */
        meta_bg_size = EXT2_DESC_PER_BLOCK(fs->super);
+       flex_bg = fs->super->s_feature_incompat &
+               EXT4_FEATURE_INCOMPAT_FLEX_BG;
+       /* first reserve all of the existing fs meta blocks */
        for (i = 0; i < max_groups; i++) {
                has_super = ext2fs_bg_has_super(fs, i);
                if (has_super)
@@ -891,52 +1006,51 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
                                                  group_blk + has_super);
                }
 
-               if (ext2fs_inode_table_loc(fs, i) &&
-                   ext2fs_inode_bitmap_loc(fs, i) &&
-                   ext2fs_block_bitmap_loc(fs, i))
-                       goto next_group;
-
                /*
                 * Reserve the existing meta blocks that we know
                 * aren't to be moved.
+                *
+                * For flex_bg file systems, in order to avoid
+                * overwriting fs metadata (especially inode table
+                * blocks) belonging to a different block group when
+                * we are relocating the inode tables, we need to
+                * reserve all existing fs metadata blocks.
                 */
                if (ext2fs_block_bitmap_loc(fs, i))
                        ext2fs_mark_block_bitmap2(rfs->reserve_blocks,
                                 ext2fs_block_bitmap_loc(fs, i));
+               else if (flex_bg && i < old_fs->group_desc_count)
+                       ext2fs_mark_block_bitmap2(rfs->reserve_blocks,
+                                ext2fs_block_bitmap_loc(old_fs, i));
+
                if (ext2fs_inode_bitmap_loc(fs, i))
                        ext2fs_mark_block_bitmap2(rfs->reserve_blocks,
                                 ext2fs_inode_bitmap_loc(fs, i));
+               else if (flex_bg && i < old_fs->group_desc_count)
+                       ext2fs_mark_block_bitmap2(rfs->reserve_blocks,
+                                ext2fs_inode_bitmap_loc(old_fs, i));
+
                if (ext2fs_inode_table_loc(fs, i))
-                       for (blk = ext2fs_inode_table_loc(fs, i), j=0;
-                            j < fs->inode_blocks_per_group ; j++, blk++)
-                               ext2fs_mark_block_bitmap2(rfs->reserve_blocks,
-                                                        blk);
+                       ext2fs_mark_block_bitmap_range2(rfs->reserve_blocks,
+                                       ext2fs_inode_table_loc(fs, i),
+                                       fs->inode_blocks_per_group);
+               else if (flex_bg && i < old_fs->group_desc_count)
+                       ext2fs_mark_block_bitmap_range2(rfs->reserve_blocks,
+                                       ext2fs_inode_table_loc(old_fs, i),
+                                       old_fs->inode_blocks_per_group);
+
+               group_blk += rfs->new_fs->super->s_blocks_per_group;
+       }
+
+       /* Allocate the missing data structures */
+       for (i = 0; i < max_groups; i++) {
+               if (ext2fs_inode_table_loc(fs, i) &&
+                   ext2fs_inode_bitmap_loc(fs, i) &&
+                   ext2fs_block_bitmap_loc(fs, i))
+                       continue;
 
-               /*
-                * Allocate the missing data structures
-                *
-                * XXX We have a problem with FLEX_BG and off-line
-                * resizing where we are growing the size of the
-                * filesystem.  ext2fs_allocate_group_table() will try
-                * to reserve the inode table in the desired flex_bg
-                * location.  However, passing rfs->reserve_blocks
-                * doesn't work since it only has reserved the blocks
-                * that will be used in the new block group -- and
-                * with flex_bg, we can and will allocate the tables
-                * outside of the block group.  And we can't pass in
-                * the fs->block_map because it doesn't handle
-                * overlapping inode table movements right.  So for
-                * now, we temporarily disable flex_bg to force
-                * ext2fs_allocate_group_tables() to allocate the bg
-                * metadata in side the block group, and the restore
-                * it afterwards.  Ugly, until we can fix this up
-                * right later.
-                */
-               save_incompat_flag = fs->super->s_feature_incompat;
-               fs->super->s_feature_incompat &= ~EXT4_FEATURE_INCOMPAT_FLEX_BG;
                retval = ext2fs_allocate_group_table(fs, i,
                                                     rfs->reserve_blocks);
-               fs->super->s_feature_incompat = save_incompat_flag;
                if (retval)
                        goto errout;
 
@@ -969,7 +1083,7 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
                 * block relocation phase.
                 */
                if (ext2fs_inode_table_loc(fs, i) == ext2fs_inode_table_loc(old_fs, i))
-                       goto next_group; /* inode table not moved */
+                       continue;       /* inode table not moved */
 
                rfs->needed_blocks += fs->inode_blocks_per_group;
 
@@ -994,9 +1108,6 @@ static errcode_t blocks_to_move(ext2_resize_t rfs)
                for (blk = ext2fs_inode_table_loc(rfs->old_fs, i), j=0;
                     j < fs->inode_blocks_per_group ; j++, blk++)
                        ext2fs_mark_block_bitmap2(rfs->reserve_blocks, blk);
-
-       next_group:
-               group_blk += rfs->new_fs->super->s_blocks_per_group;
        }
        retval = 0;
 
@@ -1126,8 +1237,9 @@ static errcode_t block_mover(ext2_resize_t rfs)
         */
        to_move = moved = 0;
        init_block_alloc(rfs);
-       for (blk = old_fs->super->s_first_data_block;
-            blk < ext2fs_blocks_count(old_fs->super); blk++) {
+       for (blk = B2C(old_fs->super->s_first_data_block);
+            blk < ext2fs_blocks_count(old_fs->super);
+            blk += EXT2FS_CLUSTER_RATIO(fs)) {
                if (!ext2fs_test_block_bitmap2(old_fs->block_map, blk))
                        continue;
                if (!ext2fs_test_block_bitmap2(rfs->move_blocks, blk))
@@ -1144,7 +1256,7 @@ static errcode_t block_mover(ext2_resize_t rfs)
                        goto errout;
                }
                ext2fs_block_alloc_stats2(fs, new_blk, +1);
-               ext2fs_add_extent_entry(rfs->bmap, blk, new_blk);
+               ext2fs_add_extent_entry(rfs->bmap, B2C(blk), B2C(new_blk));
                to_move++;
        }
 
@@ -1174,6 +1286,9 @@ static errcode_t block_mover(ext2_resize_t rfs)
                if (retval) goto errout;
                if (!size)
                        break;
+               old_blk = C2B(old_blk);
+               new_blk = C2B(new_blk);
+               size = C2B(size);
 #ifdef RESIZE2FS_DEBUG
                if (rfs->flags & RESIZE_DEBUG_BMOVE)
                        printf("Moving %llu blocks %llu->%llu\n",
@@ -1224,6 +1339,20 @@ errout:
  */
 
 
+/*
+ * The extent translation table is stored in clusters so we need to
+ * take special care when mapping a source block number to its
+ * destination block number.
+ */
+__u64 extent_translate(ext2_filsys fs, ext2_extent extent, __u64 old_loc)
+{
+       __u64 new_block = C2B(ext2fs_extent_translate(extent, B2C(old_loc)));
+
+       if (new_block != 0)
+               new_block += old_loc & (EXT2FS_CLUSTER_RATIO(fs) - 1);
+       return new_block;
+}
+
 struct process_block_struct {
        ext2_resize_t           rfs;
        ext2_ino_t              ino;
@@ -1246,7 +1375,7 @@ static int process_block(ext2_filsys fs, blk64_t  *block_nr,
        pb = (struct process_block_struct *) priv_data;
        block = *block_nr;
        if (pb->rfs->bmap) {
-               new_block = ext2fs_extent_translate(pb->rfs->bmap, block);
+               new_block = extent_translate(fs, pb->rfs->bmap, block);
                if (new_block) {
                        *block_nr = new_block;
                        ret |= BLOCK_CHANGED;
@@ -1372,7 +1501,7 @@ static errcode_t inode_scan_and_fix(ext2_resize_t rfs)
                pb.changed = 0;
 
                if (ext2fs_file_acl_block(rfs->old_fs, inode) && rfs->bmap) {
-                       new_block = ext2fs_extent_translate(rfs->bmap,
+                       new_block = extent_translate(rfs->old_fs, rfs->bmap,
                                ext2fs_file_acl_block(rfs->old_fs, inode));
                        if (new_block) {
                                ext2fs_file_acl_block_set(rfs->old_fs, inode,
@@ -1708,7 +1837,7 @@ static errcode_t fix_resize_inode(ext2_filsys fs)
 {
        struct ext2_inode       inode;
        errcode_t               retval;
-       char *                  block_buf;
+       char                    *block_buf = NULL;
 
        if (!(fs->super->s_feature_compat &
              EXT2_FEATURE_COMPAT_RESIZE_INODE))
@@ -1761,7 +1890,8 @@ static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
        ext2_ino_t      ino;
        unsigned int    group = 0;
        unsigned int    count = 0;
-       int             total_free = 0;
+       blk64_t         total_blocks_free = 0;
+       int             total_inodes_free = 0;
        int             group_free = 0;
        int             uninit = 0;
        blk64_t         super_blk, old_desc_blk, new_desc_blk;
@@ -1778,26 +1908,27 @@ static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
        else
                old_desc_blocks = fs->desc_blocks +
                        fs->super->s_reserved_gdt_blocks;
-       for (blk = fs->super->s_first_data_block;
-            blk < ext2fs_blocks_count(fs->super); blk++) {
+       for (blk = B2C(fs->super->s_first_data_block);
+            blk < ext2fs_blocks_count(fs->super);
+            blk += EXT2FS_CLUSTER_RATIO(fs)) {
                if ((uninit &&
-                    !((blk == super_blk) ||
+                    !(EQ_CLSTR(blk, super_blk) ||
                       ((old_desc_blk && old_desc_blocks &&
-                        (blk >= old_desc_blk) &&
-                        (blk < old_desc_blk + old_desc_blocks))) ||
-                      ((new_desc_blk && (blk == new_desc_blk))) ||
-                      (blk == ext2fs_block_bitmap_loc(fs, group)) ||
-                      (blk == ext2fs_inode_bitmap_loc(fs, group)) ||
-                      ((blk >= ext2fs_inode_table_loc(fs, group) &&
-                        (blk < ext2fs_inode_table_loc(fs, group)
-                         + fs->inode_blocks_per_group))))) ||
+                        GE_CLSTR(blk, old_desc_blk) &&
+                        LT_CLSTR(blk, old_desc_blk + old_desc_blocks))) ||
+                      ((new_desc_blk && EQ_CLSTR(blk, new_desc_blk))) ||
+                      EQ_CLSTR(blk, ext2fs_block_bitmap_loc(fs, group)) ||
+                      EQ_CLSTR(blk, ext2fs_inode_bitmap_loc(fs, group)) ||
+                      ((GE_CLSTR(blk, ext2fs_inode_table_loc(fs, group)) &&
+                        LT_CLSTR(blk, ext2fs_inode_table_loc(fs, group)
+                                 + fs->inode_blocks_per_group))))) ||
                    (!ext2fs_fast_test_block_bitmap2(fs->block_map, blk))) {
                        group_free++;
-                       total_free++;
+                       total_blocks_free++;
                }
                count++;
-               if ((count == fs->super->s_blocks_per_group) ||
-                   (blk == ext2fs_blocks_count(fs->super)-1)) {
+               if ((count == fs->super->s_clusters_per_group) ||
+                   EQ_CLSTR(blk, ext2fs_blocks_count(fs->super)-1)) {
                        ext2fs_bg_free_blocks_count_set(fs, group, group_free);
                        ext2fs_group_desc_csum_set(fs, group);
                        group++;
@@ -1817,13 +1948,13 @@ static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
                                        fs->super->s_reserved_gdt_blocks;
                }
        }
-       ext2fs_free_blocks_count_set(fs->super, total_free);
+       total_blocks_free = C2B(total_blocks_free);
+       ext2fs_free_blocks_count_set(fs->super, total_blocks_free);
 
        /*
         * Next, calculate the inode statistics
         */
        group_free = 0;
-       total_free = 0;
        count = 0;
        group = 0;
 
@@ -1833,7 +1964,7 @@ static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
                if (uninit ||
                    !ext2fs_fast_test_inode_bitmap2(fs->inode_map, ino)) {
                        group_free++;
-                       total_free++;
+                       total_inodes_free++;
                }
                count++;
                if ((count == fs->super->s_inodes_per_group) ||
@@ -1848,7 +1979,7 @@ static errcode_t ext2fs_calculate_summary_stats(ext2_filsys fs)
                        uninit = ext2fs_bg_flags_test(fs, group, EXT2_BG_INODE_UNINIT);
                }
        }
-       fs->super->s_free_inodes_count = total_free;
+       fs->super->s_free_inodes_count = total_inodes_free;
        ext2fs_mark_super_dirty(fs);
        return 0;
 }
@@ -1880,6 +2011,27 @@ static errcode_t fix_sb_journal_backup(ext2_filsys fs)
        return 0;
 }
 
+static int calc_group_overhead(ext2_filsys fs, blk64_t grp,
+                              int old_desc_blocks)
+{
+       blk64_t super_blk, old_desc_blk, new_desc_blk;
+       int overhead;
+
+       /* inode table blocks plus allocation bitmaps */
+       overhead = fs->inode_blocks_per_group + 2;
+
+       ext2fs_super_and_bgd_loc2(fs, grp, &super_blk,
+                                 &old_desc_blk, &new_desc_blk, 0);
+       if ((grp == 0) || super_blk)
+               overhead++;
+       if (old_desc_blk)
+               overhead += old_desc_blocks;
+       else if (new_desc_blk)
+               overhead++;
+       return overhead;
+}
+
+
 /*
  * calcluate the minimum number of blocks the given fs can be resized to
  */
@@ -1889,7 +2041,7 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs)
        blk64_t blks_needed, groups, data_blocks;
        blk64_t grp, data_needed, last_start;
        blk64_t overhead = 0;
-       int num_of_superblocks = 0;
+       int old_desc_blocks;
        int extra_groups = 0;
        int flexbg_size = 1 << fs->super->s_log_groups_per_flex;
 
@@ -1906,28 +2058,29 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs)
                                   EXT2_BLOCKS_PER_GROUP(fs->super));
 
        /*
-        * we need to figure out how many backup superblocks we have so we can
-        * account for that in the metadata
+        * number of old-style block group descriptor blocks
         */
-       for (grp = 0; grp < fs->group_desc_count; grp++) {
-               if (ext2fs_bg_has_super(fs, grp))
-                       num_of_superblocks++;
-       }
+       if (fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG)
+               old_desc_blocks = fs->super->s_first_meta_bg;
+       else
+               old_desc_blocks = fs->desc_blocks +
+                       fs->super->s_reserved_gdt_blocks;
 
        /* calculate how many blocks are needed for data */
        data_needed = ext2fs_blocks_count(fs->super) -
                ext2fs_free_blocks_count(fs->super);
-       data_needed -= SUPER_OVERHEAD(fs) * num_of_superblocks;
-       data_needed -= META_OVERHEAD(fs) * fs->group_desc_count;
 
+       for (grp = 0; grp < fs->group_desc_count; grp++)
+               data_needed -= calc_group_overhead(fs, grp, old_desc_blocks);
+
+       /*
+        * For ext4 we need to allow for up to a flex_bg worth of
+        * inode tables of slack space so the resize operation can be
+        * guaranteed to finish.
+        */
        if (fs->super->s_feature_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) {
-               /*
-                * For ext4 we need to allow for up to a flex_bg worth
-                * of inode tables of slack space so the resize
-                * operation can be guaranteed to finish.
-                */
                extra_groups = flexbg_size - (groups & (flexbg_size - 1));
-               data_needed += META_OVERHEAD(fs) * extra_groups;
+               data_needed += fs->inode_blocks_per_group * extra_groups;
                extra_groups = groups % flexbg_size;
        }
 
@@ -1938,10 +2091,7 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs)
        data_blocks = groups * EXT2_BLOCKS_PER_GROUP(fs->super);
        last_start = 0;
        for (grp = 0; grp < groups; grp++) {
-               overhead = META_OVERHEAD(fs);
-
-               if (ext2fs_bg_has_super(fs, grp))
-                       overhead += SUPER_OVERHEAD(fs);
+               overhead = calc_group_overhead(fs, grp, old_desc_blocks);
 
                /*
                 * we want to keep track of how much data we can store in
@@ -1970,15 +2120,12 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs)
                data_blocks += extra_grps * EXT2_BLOCKS_PER_GROUP(fs->super);
 
                /* ok we have to account for the last group */
-               overhead = META_OVERHEAD(fs);
-               if (ext2fs_bg_has_super(fs, groups-1))
-                       overhead += SUPER_OVERHEAD(fs);
+               overhead = calc_group_overhead(fs, groups-1, old_desc_blocks);
                last_start += EXT2_BLOCKS_PER_GROUP(fs->super) - overhead;
 
                for (grp = groups; grp < groups+extra_grps; grp++) {
-                       overhead = META_OVERHEAD(fs);
-                       if (ext2fs_bg_has_super(fs, grp))
-                               overhead += SUPER_OVERHEAD(fs);
+                       overhead = calc_group_overhead(fs, grp,
+                                                      old_desc_blocks);
 
                        /*
                         * again, we need to see how much data we cram into
@@ -2003,13 +2150,14 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs)
                         */
                        extra_groups = flexbg_size -
                                                (groups & (flexbg_size - 1));
-                       data_needed += META_OVERHEAD(fs) * extra_groups;
+                       data_needed += (fs->inode_blocks_per_group *
+                                       extra_groups);
                        extra_groups = groups % flexbg_size;
                }
        }
 
        /* now for the fun voodoo */
-       overhead = META_OVERHEAD(fs);
+       overhead = calc_group_overhead(fs, groups-1, old_desc_blocks);
 
        /*
         * if this is the case then the last group is going to have data in it
@@ -2031,8 +2179,6 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs)
        } else
                overhead += 50;
 
-       if (ext2fs_bg_has_super(fs, groups-1))
-               overhead += SUPER_OVERHEAD(fs);
        overhead += fs->super->s_first_data_block;
 
        /*
index 2184759..d425491 100644 (file)
@@ -76,11 +76,26 @@ typedef struct ext2_sim_progress *ext2_sim_progmeter;
 #define RESIZE_DEBUG_BMOVE             0x0002
 #define RESIZE_DEBUG_INODEMAP          0x0004
 #define RESIZE_DEBUG_ITABLEMOVE                0x0008
+#define RESIZE_DEBUG_RTRACK            0x0010
 
 #define RESIZE_PERCENT_COMPLETE                0x0100
 #define RESIZE_VERBOSE                 0x0200
 
 /*
+ * This structure is used for keeping track of how much resources have
+ * been used for a particular resize2fs pass.
+ */
+struct resource_track {
+       const char *desc;
+       struct timeval time_start;
+       struct timeval user_start;
+       struct timeval system_start;
+       void    *brk_start;
+       unsigned long long bytes_read;
+       unsigned long long bytes_written;
+};
+
+/*
  * The core state structure for the ext2 resizer
  */
 typedef struct ext2_resize_struct *ext2_resize_t;
@@ -148,6 +163,13 @@ extern errcode_t ext2fs_iterate_extent(ext2_extent extent, __u64 *old_loc,
 extern errcode_t online_resize_fs(ext2_filsys fs, const char *mtpt,
                                  blk64_t *new_size, int flags);
 
+/* resource_track.c */
+extern void init_resource_track(struct resource_track *track, const char *desc,
+                               io_channel channel);
+extern void print_resource_track(ext2_resize_t rfs,
+                                struct resource_track *track,
+                                io_channel channel);
+
 /* sim_progress.c */
 extern errcode_t ext2fs_progress_init(ext2_sim_progmeter *ret_prog,
                                      const char *label,
diff --git a/resize/resource_track.c b/resize/resource_track.c
new file mode 100644 (file)
index 0000000..f0efe11
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * resource_track.c --- resource tracking
+ *
+ * Copyright (C) 2013 by Theodore Ts'o
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+
+#include "config.h"
+#include "resize2fs.h"
+#include <time.h>
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+#include <sys/resource.h>
+
+void init_resource_track(struct resource_track *track, const char *desc,
+                        io_channel channel)
+{
+#ifdef HAVE_GETRUSAGE
+       struct rusage r;
+#endif
+       io_stats io_start = 0;
+
+       track->desc = desc;
+       track->brk_start = sbrk(0);
+       gettimeofday(&track->time_start, 0);
+#ifdef HAVE_GETRUSAGE
+#ifdef sun
+       memset(&r, 0, sizeof(struct rusage));
+#endif
+       getrusage(RUSAGE_SELF, &r);
+       track->user_start = r.ru_utime;
+       track->system_start = r.ru_stime;
+#else
+       track->user_start.tv_sec = track->user_start.tv_usec = 0;
+       track->system_start.tv_sec = track->system_start.tv_usec = 0;
+#endif
+       track->bytes_read = 0;
+       track->bytes_written = 0;
+       if (channel && channel->manager && channel->manager->get_stats)
+               channel->manager->get_stats(channel, &io_start);
+       if (io_start) {
+               track->bytes_read = io_start->bytes_read;
+               track->bytes_written = io_start->bytes_written;
+       }
+}
+
+static float timeval_subtract(struct timeval *tv1,
+                             struct timeval *tv2)
+{
+       return ((tv1->tv_sec - tv2->tv_sec) +
+               ((float) (tv1->tv_usec - tv2->tv_usec)) / 1000000);
+}
+
+void print_resource_track(ext2_resize_t rfs, struct resource_track *track,
+                         io_channel channel)
+{
+#ifdef HAVE_GETRUSAGE
+       struct rusage r;
+#endif
+#ifdef HAVE_MALLINFO
+       struct mallinfo malloc_info;
+#endif
+       struct timeval time_end;
+
+       if ((rfs->flags & RESIZE_DEBUG_RTRACK) == 0)
+               return;
+
+       gettimeofday(&time_end, 0);
+
+       if (track->desc)
+               printf("%s: ", track->desc);
+
+#ifdef HAVE_MALLINFO
+#define kbytes(x)      (((unsigned long)(x) + 1023) / 1024)
+
+       malloc_info = mallinfo();
+       printf("Memory used: %luk/%luk (%luk/%luk), ",
+               kbytes(malloc_info.arena), kbytes(malloc_info.hblkhd),
+               kbytes(malloc_info.uordblks), kbytes(malloc_info.fordblks));
+#else
+       printf("Memory used: %lu, ",
+               (unsigned long) (((char *) sbrk(0)) -
+                                ((char *) track->brk_start)));
+#endif
+#ifdef HAVE_GETRUSAGE
+       getrusage(RUSAGE_SELF, &r);
+
+       printf("time: %5.2f/%5.2f/%5.2f\n",
+               timeval_subtract(&time_end, &track->time_start),
+               timeval_subtract(&r.ru_utime, &track->user_start),
+               timeval_subtract(&r.ru_stime, &track->system_start));
+#else
+       printf("elapsed time: %6.3f\n",
+               timeval_subtract(&time_end, &track->time_start));
+#endif
+#define mbytes(x)      (((x) + 1048575) / 1048576)
+       if (channel && channel->manager && channel->manager->get_stats) {
+               io_stats delta = 0;
+               unsigned long long bytes_read = 0;
+               unsigned long long bytes_written = 0;
+
+               channel->manager->get_stats(channel, &delta);
+               if (delta) {
+                       bytes_read = delta->bytes_read - track->bytes_read;
+                       bytes_written = delta->bytes_written -
+                               track->bytes_written;
+                       if (bytes_read == 0 && bytes_written == 0)
+                               goto skip_io;
+                       if (track->desc)
+                               printf("%s: ", track->desc);
+                       printf("I/O read: %lluMB, write: %lluMB, "
+                              "rate: %.2fMB/s\n",
+                              mbytes(bytes_read),
+                              mbytes(bytes_written),
+                              (double)mbytes(bytes_read + bytes_written) /
+                              timeval_subtract(&time_end, &track->time_start));
+               }
+       }
+skip_io:
+       fflush(stdout);
+}
+
diff --git a/resize/test-resize b/resize/test-resize
new file mode 100755 (executable)
index 0000000..3766f4f
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+FS=/bigscratch/testfs
+FEATURE="-O 64bit"
+
+RESIZE2FS=/tmp/resize2fs.static
+MKE2FS=mke2fs
+DUMPE2FS=dumpe2fs
+E2FSCK=e2fsck
+
+/bin/rm -f $FS ; touch $FS
+truncate -s 8T $FS
+$MKE2FS -F -t ext4 $FEATURE $FS
+$E2FSCK -FY $FS
+$DUMPE2FS $FS > /tmp/d1
+
+truncate -s 20T $FS
+time $RESIZE2FS -d 31 -p $FS > /tmp/r1
+$DUMPE2FS $FS > /tmp/d2
+$E2FSCK -fy $FS
+$DUMPE2FS $FS > /tmp/d3
+
+truncate -s 21T $FS
+time $RESIZE2FS -d 31 -p $FS > /tmp/r2
+$DUMPE2FS $FS > /tmp/d4
+$E2FSCK -fy $FS
+$DUMPE2FS $FS > /tmp/d5
index 9b687eb..39727ba 100644 (file)
@@ -24,19 +24,19 @@ echo "debugfs -R ''write $TEST_DATA test_data'' -w test.img" > $OUT.new
 $DEBUGFS -R "write $TEST_DATA test_data" -w $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '2d' $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 echo e2fsck $VERIFY_FSCK_OPT -N test_filesys > $OUT.new
 $FSCK $VERIFY_FSCK_OPT -N test_filesys $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '2d' $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 echo "debugfs -R ''dump test_data $VERIFY_DATA'' test.img" > $OUT.new
 $DEBUGFS -R "dump test_data $VERIFY_DATA" $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '2d' $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 echo "cmp $TEST_DATA $VERIFY_DATA" >> $OUT
 cmp $TEST_DATA $VERIFY_DATA >>$OUT
diff --git a/tests/d_special_files/expect b/tests/d_special_files/expect
new file mode 100644 (file)
index 0000000..2b2dbfa
--- /dev/null
@@ -0,0 +1,85 @@
+debugfs create special files
+mke2fs -Fq -b 1024 test.img 512
+Exit status is 0
+debugfs -R ''stat foo'' -w test.img
+Inode: 12   Type: symlink    Mode:  0777   Flags: 0x0
+Generation: 0    Version: 0x00000000
+User:     0   Group:     0   Size: 3
+File ACL: 0    Directory ACL: 0
+Links: 1   Blockcount: 0
+Fragment:  Address: 0    Number: 0    Size: 0
+ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+atime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+mtime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+Fast_link_dest: bar
+Exit status is 0
+debugfs -R ''stat foo2'' -w test.img
+Inode: 13   Type: symlink    Mode:  0777   Flags: 0x0
+Generation: 0    Version: 0x00000000
+User:     0   Group:     0   Size: 80
+File ACL: 0    Directory ACL: 0
+Links: 1   Blockcount: 2
+Fragment:  Address: 0    Number: 0    Size: 0
+ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+atime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+mtime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+BLOCKS:
+(0):28
+TOTAL: 1
+
+Exit status is 0
+debugfs -R ''block_dump 28'' -w test.img
+0000  3132 3334 3536 3738 3930 3132 3334 3536  1234567890123456
+0020  3738 3930 3132 3334 3536 3738 3930 3132  7890123456789012
+0040  3334 3536 3738 3930 3132 3334 3536 3738  3456789012345678
+0060  3930 3132 3334 3536 3738 3930 3132 3334  9012345678901234
+0100  3536 3738 3930 3132 3334 3536 3738 3930  5678901234567890
+0120  0000 0000 0000 0000 0000 0000 0000 0000  ................
+*
+
+Exit status is 0
+debugfs -R ''stat pipe'' -w test.img
+Inode: 14   Type: FIFO    Mode:  0000   Flags: 0x0
+Generation: 0    Version: 0x00000000
+User:     0   Group:     0   Size: 0
+File ACL: 0    Directory ACL: 0
+Links: 1   Blockcount: 0
+Fragment:  Address: 0    Number: 0    Size: 0
+ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+atime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+mtime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+BLOCKS:
+
+Exit status is 0
+debugfs -R ''stat sda'' -w test.img
+Inode: 15   Type: block special    Mode:  0000   Flags: 0x0
+Generation: 0    Version: 0x00000000
+User:     0   Group:     0   Size: 0
+File ACL: 0    Directory ACL: 0
+Links: 1   Blockcount: 0
+Fragment:  Address: 0    Number: 0    Size: 0
+ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+atime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+mtime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+Device major/minor number: 08:00 (hex 08:00)
+Exit status is 0
+debugfs -R ''stat null'' -w test.img
+Inode: 16   Type: character special    Mode:  0000   Flags: 0x0
+Generation: 0    Version: 0x00000000
+User:     0   Group:     0   Size: 0
+File ACL: 0    Directory ACL: 0
+Links: 1   Blockcount: 0
+Fragment:  Address: 0    Number: 0    Size: 0
+ctime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+atime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+mtime: 0x50f560e0 -- Tue Jan 15 14:00:00 2013
+Device major/minor number: 01:03 (hex 01:03)
+Exit status is 0
+e2fsck -yf -N test_filesys
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 16/64 files (0.0% non-contiguous), 29/512 blocks
+Exit status is 0
diff --git a/tests/d_special_files/name b/tests/d_special_files/name
new file mode 100644 (file)
index 0000000..98d10d2
--- /dev/null
@@ -0,0 +1 @@
+create special files in debugfs
diff --git a/tests/d_special_files/script b/tests/d_special_files/script
new file mode 100644 (file)
index 0000000..1a1999a
--- /dev/null
@@ -0,0 +1,94 @@
+if test -x $DEBUGFS_EXE; then
+
+OUT=$test_name.log
+EXP=$test_dir/expect
+VERIFY_FSCK_OPT=-yf
+
+TEST_DATA=$test_name.tmp
+VERIFY_DATA=$test_name.ver.tmp
+
+echo "debugfs create special files" > $OUT
+
+dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
+
+echo "mke2fs -Fq -b 1024 test.img 512" >> $OUT
+
+$MKE2FS -Fq $TMPFILE 512 > /dev/null 2>&1
+status=$?
+echo Exit status is $status >> $OUT
+
+$DEBUGFS -w $TMPFILE << EOF > /dev/null 2>&1
+set_current_time 201301151400
+set_super_value lastcheck 0
+set_super_value hash_seed null
+set_super_value mkfs_time 0
+symlink foo bar
+symlink foo2 12345678901234567890123456789012345678901234567890123456789012345678901234567890
+mknod pipe p
+mknod sda b 8 0
+mknod null c 1 3
+EOF
+
+echo "debugfs -R ''stat foo'' -w test.img" > $OUT.new
+$DEBUGFS -R "stat foo" -w $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
+echo "debugfs -R ''stat foo2'' -w test.img" > $OUT.new
+$DEBUGFS -R "stat foo2" -w $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
+echo "debugfs -R ''block_dump 28'' -w test.img" > $OUT.new
+$DEBUGFS -R "block_dump 28" -w $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
+echo "debugfs -R ''stat pipe'' -w test.img" > $OUT.new
+$DEBUGFS -R "stat pipe" -w $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
+echo "debugfs -R ''stat sda'' -w test.img" > $OUT.new
+$DEBUGFS -R "stat sda" -w $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
+echo "debugfs -R ''stat null'' -w test.img" > $OUT.new
+$DEBUGFS -R "stat null" -w $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
+echo e2fsck $VERIFY_FSCK_OPT -N test_filesys > $OUT.new
+$FSCK $VERIFY_FSCK_OPT -N test_filesys $TMPFILE >> $OUT.new 2>&1
+status=$?
+echo Exit status is $status >> $OUT.new
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
+
+#
+# Do the verification
+#
+
+rm -f $TMPFILE $OUT.new
+cmp -s $OUT $EXP
+status=$?
+
+if [ "$status" = 0 ] ; then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       diff $DIFF_OPTS $EXP $OUT > $test_name.failed
+fi
+
+unset VERIFY_FSCK_OPT NATIVE_FSCK_OPT OUT EXP TEST_DATA VERIFY_DATA
+
+else #if test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped"
+fi 
diff --git a/tests/f_extent_interior_start_lblk/expect.1 b/tests/f_extent_interior_start_lblk/expect.1
new file mode 100644 (file)
index 0000000..f5b7d46
--- /dev/null
@@ -0,0 +1,12 @@
+Pass 1: Checking inodes, blocks, and sizes
+Interior extent node level 0 of inode 12:
+Logical start 0 does not match logical start 2 at next level.  Fix? yes
+
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/16 files (0.0% non-contiguous), 29/100 blocks
+Exit status is 1
diff --git a/tests/f_extent_interior_start_lblk/expect.2 b/tests/f_extent_interior_start_lblk/expect.2
new file mode 100644 (file)
index 0000000..06c6082
--- /dev/null
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 12/16 files (0.0% non-contiguous), 29/100 blocks
+Exit status is 0
diff --git a/tests/f_extent_interior_start_lblk/image.gz b/tests/f_extent_interior_start_lblk/image.gz
new file mode 100644 (file)
index 0000000..0ed7128
Binary files /dev/null and b/tests/f_extent_interior_start_lblk/image.gz differ
diff --git a/tests/f_extent_interior_start_lblk/name b/tests/f_extent_interior_start_lblk/name
new file mode 100644 (file)
index 0000000..fbd5f58
--- /dev/null
@@ -0,0 +1 @@
+incorrect starting lblk in an interior node
diff --git a/tests/f_extent_oobounds/expect.1 b/tests/f_extent_oobounds/expect.1
new file mode 100644 (file)
index 0000000..3164ea0
--- /dev/null
@@ -0,0 +1,24 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 12, end of extent exceeds allowed value
+       (logical block 15, physical block 200, len 30)
+Clear? yes
+
+Inode 12, i_blocks is 154, should be 94.  Fix? yes
+
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+Block bitmap differences:  -(200--229)
+Fix? yes
+
+Free blocks count wrong for group #0 (156, counted=186).
+Fix? yes
+
+Free blocks count wrong (156, counted=186).
+Fix? yes
+
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/32 files (8.3% non-contiguous), 70/256 blocks
+Exit status is 1
diff --git a/tests/f_extent_oobounds/expect.2 b/tests/f_extent_oobounds/expect.2
new file mode 100644 (file)
index 0000000..22c4f2c
--- /dev/null
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 12/32 files (8.3% non-contiguous), 70/256 blocks
+Exit status is 0
diff --git a/tests/f_extent_oobounds/script b/tests/f_extent_oobounds/script
new file mode 100644 (file)
index 0000000..31ac6c9
--- /dev/null
@@ -0,0 +1,42 @@
+if test -x $DEBUGFS_EXE; then
+
+SKIP_GUNZIP="true"
+TEST_DATA="$test_name.tmp"
+
+dd if=/dev/zero of=$TMPFILE bs=1k count=256 > /dev/null 2>&1
+mke2fs -Ft ext4 $TMPFILE > /dev/null 2>&1
+debugfs -w $TMPFILE << EOF  > /dev/null 2>&1
+write /dev/null testfile
+extent_open testfile
+  insert_node 0 15 100
+  insert_node --after 15 15 115
+  insert_node --after 30 15 130
+  insert_node --after 45 15 145
+  split
+  down
+  split
+  root
+  down
+  next
+  replace_node 15 30 200
+  extent_close
+set_inode_field testfile i_size 61400
+set_inode_field testfile i_blocks 154
+setb 100 15
+setb 130 30
+setb 200 30
+set_bg 0 free_blocks_count 156
+set_bg 0 bg_checksum calc
+set_super_value free_blocks_count 156
+q
+EOF
+
+. $cmd_dir/run_e2fsck
+
+rm -f $TEST_DATA
+
+unset E2FSCK_TIME TEST_DATA
+
+else #if test -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped"
+fi
diff --git a/tests/f_invalid_extent_symlink/expect.1 b/tests/f_invalid_extent_symlink/expect.1
new file mode 100644 (file)
index 0000000..7bda0b7
--- /dev/null
@@ -0,0 +1,12 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Symlink /a (inode #12) is invalid.
+Clear? yes
+
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 11/16 files (9.1% non-contiguous), 21/100 blocks
+Exit status is 1
diff --git a/tests/f_invalid_extent_symlink/expect.2 b/tests/f_invalid_extent_symlink/expect.2
new file mode 100644 (file)
index 0000000..41ceefb
--- /dev/null
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 11/16 files (0.0% non-contiguous), 21/100 blocks
+Exit status is 0
diff --git a/tests/f_invalid_extent_symlink/image.gz b/tests/f_invalid_extent_symlink/image.gz
new file mode 100644 (file)
index 0000000..d4a6eef
Binary files /dev/null and b/tests/f_invalid_extent_symlink/image.gz differ
diff --git a/tests/f_invalid_extent_symlink/name b/tests/f_invalid_extent_symlink/name
new file mode 100644 (file)
index 0000000..3792aac
--- /dev/null
@@ -0,0 +1 @@
+extent-mapped symlink with two blocks
index 29b180f..b7de48e 100644 (file)
@@ -1,4 +1,3 @@
-
 Journal starts at block 1, transaction 2
 Found expected sequence 2, type 1 (descriptor block) at block 1
 Dumping descriptor block, sequence 2, at block 1:
index 4056f0d..9fb4366 100644 (file)
@@ -1,4 +1,4 @@
-PREP_CMD='$DEBUGFS -R "logdump -a" $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs > $test_name.0.log'
+PREP_CMD='$DEBUGFS -R "logdump -a" $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed > $test_name.0.log'
 PASS_ZERO=true
 
 . $cmd_dir/run_e2fsck
index 1b21057..2007f03 100644 (file)
@@ -1,4 +1,3 @@
-
 Journal starts at block 67, transaction 32
 Found expected sequence 32, type 5 (revoke table) at block 67
 Dumping revoke block, sequence 32, at block 67:
index 4056f0d..9fb4366 100644 (file)
@@ -1,4 +1,4 @@
-PREP_CMD='$DEBUGFS -R "logdump -a" $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs > $test_name.0.log'
+PREP_CMD='$DEBUGFS -R "logdump -a" $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed > $test_name.0.log'
 PASS_ZERO=true
 
 . $cmd_dir/run_e2fsck
index 7dae17d..6dad72a 100644 (file)
@@ -1,4 +1,3 @@
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index dd1ffd6..ef5006a 100644 (file)
@@ -1,4 +1,4 @@
-AFTER_CMD='$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs > $test_name.0.log'
+AFTER_CMD='$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed > $test_name.0.log'
 PASS_ZERO=true
 
 . $cmd_dir/run_e2fsck
index 1b0ff79..d921672 100644 (file)
@@ -19,10 +19,18 @@ if [ "$status" != 0 ] ; then
        return $status
 fi
 
+kill_debugfs() {
+       trap 0
+       PID=$(ps -o pid,command | grep -v awk |
+               awk "/debugfs -w $TMPFILE/ { print \$1 }")
+       [ "x$PID" != "x" ] && kill -9 $PID
+}
+
 # this will cause debugfs to create the $test_name.mark file once it has
 # passed the MMP startup, then continue reading input until it is killed
 MARKFILE=$test_name.new
 rm -f $MARKFILE
+trap kill_debugfs EXIT
 echo "set mmp sequence to EXT2_MMP_SEQ_FSCK..." >> $test_name.log
 ( { echo dump_mmp; echo "dump_inode <2> $MARKFILE"; cat /dev/zero; } |
        $DEBUGFS -w $TMPFILE >> $test_name.log 2>&1 & ) > /dev/null 2>&1 &
@@ -32,7 +40,7 @@ while [ ! -e $MARKFILE ]; do
 done
 rm -f $MARKFILE
 echo "kill debugfs abruptly (simulates e2fsck failure) ..." >> $test_name.log
-killall -9 debugfs >> $test_name.log
+kill_debugfs
 
 
 echo "e2fsck (should fail mmp_seq = EXT2_MMP_SEQ_FSCK) ..." >> $test_name.log
index 33cdd65..814a688 100644 (file)
@@ -1,2 +1,3 @@
+test_filesys: Truncating orphaned inode 12 (uid=0, gid=0, mode=0100644, size=0)
 test_filesys: clean, 12/16 files, 21/100 blocks
 Exit status is 0
index c65209d..dd20572 100644 (file)
@@ -1,3 +1,4 @@
+test_filesys: Note: if several inode or block bitmap blocks or part
 of the inode table require relocation, you may wish to try
 running e2fsck with the '-b 8193' option first.  The problem
 may lie only with the primary block group descriptors, and
index 84618d4..3fffe44 100644 (file)
@@ -14,9 +14,9 @@ Maximum filesystem blocks=8421376
 Superblock backups stored on blocks: 
        1025, 3073, 5121, 7169, 9217
 
-Allocating group tables:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone                            
-Writing inode tables:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone                            
-Writing superblocks and filesystem accounting information:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone
+Allocating group tables:      \b\b\b\b\bdone                            
+Writing inode tables:      \b\b\b\b\bdone                            
+Writing superblocks and filesystem accounting information:      \b\b\b\b\bdone
 
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
index 840432d..190871b 100644 (file)
@@ -15,15 +15,13 @@ cp /dev/null $OUT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
 echo mke2fs -F -O resize_inode -o Linux -b 1024 -g 1024 test.img 16384 > $OUT
-$MKE2FS -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 16384 2>&1 \
-       | sed -e '1d' | grep -v "automatically checked" | 
-       grep -v 'Discarding device blocks' |
-       grep -v "whichever comes first" >> $OUT 
+$MKE2FS -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 16384 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 rm -f $OUT.new
 
 echo ----------------------------------------------- >> $OUT
@@ -33,18 +31,18 @@ echo "debugfs -R ''set_inode_field <7> block[2] 42'' -w test.img" > $OUT.new
 $DEBUGFS -R "set_inode_field <7> block[2] 42" -w $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '2d' $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 echo ----------------------------------------------- >> $OUT
@@ -54,18 +52,18 @@ echo "debugfs -R ''clri <7>'' -w test.img" > $OUT.new
 $DEBUGFS -R "clri <7>" -w $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '2d' $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 echo ----------------------------------------------- >> $OUT
@@ -75,18 +73,18 @@ echo "debugfs -R ''set_inode_field <7> bmap[524] 57'' -w test.img" > $OUT.new
 $DEBUGFS -R "set_inode_field <7> bmap[524] 57" -w $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '2d' $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 echo ----------------------------------------------- >> $OUT
@@ -96,12 +94,12 @@ echo "debugfs -R ''set_super_value reserved_gdt_blocks 15679'' -w test.img" > $O
 $DEBUGFS -R "set_super_value reserved_gdt_blocks 15679" -w $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '2d' $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 echo ----------------------------------------------- >> $OUT
@@ -111,18 +109,18 @@ echo "debugfs -R ''set_super_value reserved_gdt_blocks 32'' -w test.img" > $OUT.
 $DEBUGFS -R "set_super_value reserved_gdt_blocks 32" -w $TMPFILE >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '2d' $OUT.new >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed $OUT.new >> $OUT
 rm -f $OUT.new
 
 
diff --git a/tests/f_toobig_extent_dir/expect.1 b/tests/f_toobig_extent_dir/expect.1
new file mode 100644 (file)
index 0000000..610ca3f
--- /dev/null
@@ -0,0 +1,12 @@
+Pass 1: Checking inodes, blocks, and sizes
+Inode 12 is too big.  Truncate? yes
+
+Block #4294967281 (90) causes directory to be too big.  CLEARED.
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+
+test_filesys: ***** FILE SYSTEM WAS MODIFIED *****
+test_filesys: 12/56 files (0.0% non-contiguous), 28/400 blocks
+Exit status is 1
diff --git a/tests/f_toobig_extent_dir/expect.2 b/tests/f_toobig_extent_dir/expect.2
new file mode 100644 (file)
index 0000000..c025645
--- /dev/null
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 12/56 files (0.0% non-contiguous), 28/400 blocks
+Exit status is 0
diff --git a/tests/f_toobig_extent_dir/image.gz b/tests/f_toobig_extent_dir/image.gz
new file mode 100644 (file)
index 0000000..622f65a
Binary files /dev/null and b/tests/f_toobig_extent_dir/image.gz differ
diff --git a/tests/f_toobig_extent_dir/name b/tests/f_toobig_extent_dir/name
new file mode 100644 (file)
index 0000000..d7453ad
--- /dev/null
@@ -0,0 +1 @@
+directory with a very large lblk in extent
diff --git a/tests/f_zero_xattr/expect.1 b/tests/f_zero_xattr/expect.1
new file mode 100644 (file)
index 0000000..0733af6
--- /dev/null
@@ -0,0 +1,7 @@
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 12/24 files (0.0% non-contiguous), 25/200 blocks
+Exit status is 0
diff --git a/tests/f_zero_xattr/image.gz b/tests/f_zero_xattr/image.gz
new file mode 100644 (file)
index 0000000..4005552
Binary files /dev/null and b/tests/f_zero_xattr/image.gz differ
diff --git a/tests/f_zero_xattr/name b/tests/f_zero_xattr/name
new file mode 100644 (file)
index 0000000..52aab15
--- /dev/null
@@ -0,0 +1 @@
+zero length extended attribute in in-inode xattr
diff --git a/tests/f_zero_xattr/script b/tests/f_zero_xattr/script
new file mode 100644 (file)
index 0000000..8ab2b9c
--- /dev/null
@@ -0,0 +1,2 @@
+ONE_PASS_ONLY="true"
+. $cmd_dir/run_e2fsck
similarity index 63%
rename from tests/filter_dumpe2fs
rename to tests/filter.sed
index 7544217..91b956b 100644 (file)
@@ -1,14 +1,19 @@
-1s/^.*$//
-/^Filesystem UUID:/d
+/^[dbgumpe2fsckrsiz]* [1-9]\.[0-9]*[.-][^ ]* ([0-9]*-[A-Za-z]*-[0-9]*)/d
+s/\\015//g
+/automatically checked/d
+/^Directory Hash Seed:/d
+/Discarding device blocks/d
 /^Filesystem created:/d
 /^Filesystem flags:/d
+/^Filesystem UUID:/d
+/^JFS DEBUG:/d
 /^Last write time:/d
 /^Last mount time:/d
 /^Last checked:/d
-/^Directory Hash Seed:/d
-/^Next check after:/d
-/^Maximum mount count:/d
 /^Lifetime writes:/d
+/^Maximum mount count:/d
+/^Next check after:/d
 /Reserved blocks uid:/s/ (user .*)//
 /Reserved blocks gid:/s/ (group .*)//
+/whichever comes first/d
 /^  Checksum /d
index ad4a035..312c276 100644 (file)
@@ -1,5 +1,4 @@
 Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -7,7 +6,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/1344 files (0.0% non-contiguous), 1286989/2750000 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index 31db54b..0cbe339 100644 (file)
@@ -13,12 +13,11 @@ Maximum filesystem blocks=33554432
 Superblock backups stored on blocks: 
        16384
 
-Allocating group tables: 0/2\b\b\b1/2\b\b\b   \b\b\bdone                            
-Writing inode tables: 0/2\b\b\b1/2\b\b\b   \b\b\bdone                            
-Writing superblocks and filesystem accounting information: 0/2\b\b\b1/2\b\b\b   \b\b\bdone
+Allocating group tables:    \b\b\bdone                            
+Writing inode tables:    \b\b\bdone                            
+Writing superblocks and filesystem accounting information:    \b\b\bdone
 
 Filesystem features: ext_attr resize_inode dir_index filetype sparse_super
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -26,7 +25,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/16384 files (0.0% non-contiguous), 1104/32768 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index a8c5b63..d5d7a24 100644 (file)
@@ -13,13 +13,12 @@ Maximum filesystem blocks=67108864
 Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345
 
-Allocating group tables: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone                            
-Writing inode tables: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone                            
+Allocating group tables:    \b\b\bdone                            
+Writing inode tables:    \b\b\bdone                            
 Creating journal (4096 blocks): done
-Writing superblocks and filesystem accounting information: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone
+Writing superblocks and filesystem accounting information:    \b\b\bdone
 
 Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent sparse_super
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -27,7 +26,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/16384 files (0.0% non-contiguous), 7460/65536 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index 2b40c84..ced9431 100644 (file)
@@ -11,12 +11,11 @@ Maximum filesystem blocks=16777216
 32768 blocks per group, 32768 fragments per group
 64 inodes per group
 
-Allocating group tables: 0/1\b\b\b   \b\b\bdone                            
-Writing inode tables: 0/1\b\b\b   \b\b\bdone                            
-Writing superblocks and filesystem accounting information: 0/1\b\b\b   \b\b\bdone
+Allocating group tables:    \b\b\bdone                            
+Writing inode tables:    \b\b\bdone                            
+Writing superblocks and filesystem accounting information:    \b\b\bdone
 
 Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -24,7 +23,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/64 files (0.0% non-contiguous), 17/16384 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index f1c9cef..ec10d6e 100644 (file)
@@ -12,12 +12,11 @@ First data block=1
 Superblock backups stored on blocks: 
        1025, 3073, 5121, 7169, 9217, 25601, 27649, 50177, 82945, 128001
 
-Allocating group tables:   0/128\b\b\b\b\b\b\b  1/128\b\b\b\b\b\b\b  2/128\b\b\b\b\b\b\b  3/128\b\b\b\b\b\b\b  4/128\b\b\b\b\b\b\b  5/128\b\b\b\b\b\b\b  6/128\b\b\b\b\b\b\b  7/128\b\b\b\b\b\b\b  8/128\b\b\b\b\b\b\b  9/128\b\b\b\b\b\b\b 10/128\b\b\b\b\b\b\b 11/128\b\b\b\b\b\b\b 12/128\b\b\b\b\b\b\b 13/128\b\b\b\b\b\b\b 14/128\b\b\b\b\b\b\b 15/128\b\b\b\b\b\b\b 16/128\b\b\b\b\b\b\b 17/128\b\b\b\b\b\b\b 18/128\b\b\b\b\b\b\b 19/128\b\b\b\b\b\b\b 20/128\b\b\b\b\b\b\b 21/128\b\b\b\b\b\b\b 22/128\b\b\b\b\b\b\b 23/128\b\b\b\b\b\b\b 24/128\b\b\b\b\b\b\b 25/128\b\b\b\b\b\b\b 26/128\b\b\b\b\b\b\b 27/128\b\b\b\b\b\b\b 28/128\b\b\b\b\b\b\b 29/128\b\b\b\b\b\b\b 30/128\b\b\b\b\b\b\b 31/128\b\b\b\b\b\b\b 32/128\b\b\b\b\b\b\b 33/128\b\b\b\b\b\b\b 34/128\b\b\b\b\b\b\b 35/128\b\b\b\b\b\b\b 36/128\b\b\b\b\b\b\b 37/128\b\b\b\b\b\b\b 38/128\b\b\b\b\b\b\b 39/128\b\b\b\b\b\b\b 40/128\b\b\b\b\b\b\b 41/128\b\b\b\b\b\b\b 42/128\b\b\b\b\b\b\b 43/128\b\b\b\b\b\b\b 44/128\b\b\b\b\b\b\b 45/128\b\b\b\b\b\b\b 46/128\b\b\b\b\b\b\b 47/128\b\b\b\b\b\b\b 48/128\b\b\b\b\b\b\b 49/128\b\b\b\b\b\b\b 50/128\b\b\b\b\b\b\b 51/128\b\b\b\b\b\b\b 52/128\b\b\b\b\b\b\b 53/128\b\b\b\b\b\b\b 54/128\b\b\b\b\b\b\b 55/128\b\b\b\b\b\b\b 56/128\b\b\b\b\b\b\b 57/128\b\b\b\b\b\b\b 58/128\b\b\b\b\b\b\b 59/128\b\b\b\b\b\b\b 60/128\b\b\b\b\b\b\b 61/128\b\b\b\b\b\b\b 62/128\b\b\b\b\b\b\b 63/128\b\b\b\b\b\b\b 64/128\b\b\b\b\b\b\b 65/128\b\b\b\b\b\b\b 66/128\b\b\b\b\b\b\b 67/128\b\b\b\b\b\b\b 68/128\b\b\b\b\b\b\b 69/128\b\b\b\b\b\b\b 70/128\b\b\b\b\b\b\b 71/128\b\b\b\b\b\b\b 72/128\b\b\b\b\b\b\b 73/128\b\b\b\b\b\b\b 74/128\b\b\b\b\b\b\b 75/128\b\b\b\b\b\b\b 76/128\b\b\b\b\b\b\b 77/128\b\b\b\b\b\b\b 78/128\b\b\b\b\b\b\b 79/128\b\b\b\b\b\b\b 80/128\b\b\b\b\b\b\b 81/128\b\b\b\b\b\b\b 82/128\b\b\b\b\b\b\b 83/128\b\b\b\b\b\b\b 84/128\b\b\b\b\b\b\b 85/128\b\b\b\b\b\b\b 86/128\b\b\b\b\b\b\b 87/128\b\b\b\b\b\b\b 88/128\b\b\b\b\b\b\b 89/128\b\b\b\b\b\b\b 90/128\b\b\b\b\b\b\b 91/128\b\b\b\b\b\b\b 92/128\b\b\b\b\b\b\b 93/128\b\b\b\b\b\b\b 94/128\b\b\b\b\b\b\b 95/128\b\b\b\b\b\b\b 96/128\b\b\b\b\b\b\b 97/128\b\b\b\b\b\b\b 98/128\b\b\b\b\b\b\b 99/128\b\b\b\b\b\b\b100/128\b\b\b\b\b\b\b101/128\b\b\b\b\b\b\b102/128\b\b\b\b\b\b\b103/128\b\b\b\b\b\b\b104/128\b\b\b\b\b\b\b105/128\b\b\b\b\b\b\b106/128\b\b\b\b\b\b\b107/128\b\b\b\b\b\b\b108/128\b\b\b\b\b\b\b109/128\b\b\b\b\b\b\b110/128\b\b\b\b\b\b\b111/128\b\b\b\b\b\b\b112/128\b\b\b\b\b\b\b113/128\b\b\b\b\b\b\b114/128\b\b\b\b\b\b\b115/128\b\b\b\b\b\b\b116/128\b\b\b\b\b\b\b117/128\b\b\b\b\b\b\b118/128\b\b\b\b\b\b\b119/128\b\b\b\b\b\b\b120/128\b\b\b\b\b\b\b121/128\b\b\b\b\b\b\b122/128\b\b\b\b\b\b\b123/128\b\b\b\b\b\b\b124/128\b\b\b\b\b\b\b125/128\b\b\b\b\b\b\b126/128\b\b\b\b\b\b\b127/128\b\b\b\b\b\b\b       \b\b\b\b\b\b\bdone                            
-Writing inode tables:   0/128\b\b\b\b\b\b\b  1/128\b\b\b\b\b\b\b  2/128\b\b\b\b\b\b\b  3/128\b\b\b\b\b\b\b  4/128\b\b\b\b\b\b\b  5/128\b\b\b\b\b\b\b  6/128\b\b\b\b\b\b\b  7/128\b\b\b\b\b\b\b  8/128\b\b\b\b\b\b\b  9/128\b\b\b\b\b\b\b 10/128\b\b\b\b\b\b\b 11/128\b\b\b\b\b\b\b 12/128\b\b\b\b\b\b\b 13/128\b\b\b\b\b\b\b 14/128\b\b\b\b\b\b\b 15/128\b\b\b\b\b\b\b 16/128\b\b\b\b\b\b\b 17/128\b\b\b\b\b\b\b 18/128\b\b\b\b\b\b\b 19/128\b\b\b\b\b\b\b 20/128\b\b\b\b\b\b\b 21/128\b\b\b\b\b\b\b 22/128\b\b\b\b\b\b\b 23/128\b\b\b\b\b\b\b 24/128\b\b\b\b\b\b\b 25/128\b\b\b\b\b\b\b 26/128\b\b\b\b\b\b\b 27/128\b\b\b\b\b\b\b 28/128\b\b\b\b\b\b\b 29/128\b\b\b\b\b\b\b 30/128\b\b\b\b\b\b\b 31/128\b\b\b\b\b\b\b 32/128\b\b\b\b\b\b\b 33/128\b\b\b\b\b\b\b 34/128\b\b\b\b\b\b\b 35/128\b\b\b\b\b\b\b 36/128\b\b\b\b\b\b\b 37/128\b\b\b\b\b\b\b 38/128\b\b\b\b\b\b\b 39/128\b\b\b\b\b\b\b 40/128\b\b\b\b\b\b\b 41/128\b\b\b\b\b\b\b 42/128\b\b\b\b\b\b\b 43/128\b\b\b\b\b\b\b 44/128\b\b\b\b\b\b\b 45/128\b\b\b\b\b\b\b 46/128\b\b\b\b\b\b\b 47/128\b\b\b\b\b\b\b 48/128\b\b\b\b\b\b\b 49/128\b\b\b\b\b\b\b 50/128\b\b\b\b\b\b\b 51/128\b\b\b\b\b\b\b 52/128\b\b\b\b\b\b\b 53/128\b\b\b\b\b\b\b 54/128\b\b\b\b\b\b\b 55/128\b\b\b\b\b\b\b 56/128\b\b\b\b\b\b\b 57/128\b\b\b\b\b\b\b 58/128\b\b\b\b\b\b\b 59/128\b\b\b\b\b\b\b 60/128\b\b\b\b\b\b\b 61/128\b\b\b\b\b\b\b 62/128\b\b\b\b\b\b\b 63/128\b\b\b\b\b\b\b 64/128\b\b\b\b\b\b\b 65/128\b\b\b\b\b\b\b 66/128\b\b\b\b\b\b\b 67/128\b\b\b\b\b\b\b 68/128\b\b\b\b\b\b\b 69/128\b\b\b\b\b\b\b 70/128\b\b\b\b\b\b\b 71/128\b\b\b\b\b\b\b 72/128\b\b\b\b\b\b\b 73/128\b\b\b\b\b\b\b 74/128\b\b\b\b\b\b\b 75/128\b\b\b\b\b\b\b 76/128\b\b\b\b\b\b\b 77/128\b\b\b\b\b\b\b 78/128\b\b\b\b\b\b\b 79/128\b\b\b\b\b\b\b 80/128\b\b\b\b\b\b\b 81/128\b\b\b\b\b\b\b 82/128\b\b\b\b\b\b\b 83/128\b\b\b\b\b\b\b 84/128\b\b\b\b\b\b\b 85/128\b\b\b\b\b\b\b 86/128\b\b\b\b\b\b\b 87/128\b\b\b\b\b\b\b 88/128\b\b\b\b\b\b\b 89/128\b\b\b\b\b\b\b 90/128\b\b\b\b\b\b\b 91/128\b\b\b\b\b\b\b 92/128\b\b\b\b\b\b\b 93/128\b\b\b\b\b\b\b 94/128\b\b\b\b\b\b\b 95/128\b\b\b\b\b\b\b 96/128\b\b\b\b\b\b\b 97/128\b\b\b\b\b\b\b 98/128\b\b\b\b\b\b\b 99/128\b\b\b\b\b\b\b100/128\b\b\b\b\b\b\b101/128\b\b\b\b\b\b\b102/128\b\b\b\b\b\b\b103/128\b\b\b\b\b\b\b104/128\b\b\b\b\b\b\b105/128\b\b\b\b\b\b\b106/128\b\b\b\b\b\b\b107/128\b\b\b\b\b\b\b108/128\b\b\b\b\b\b\b109/128\b\b\b\b\b\b\b110/128\b\b\b\b\b\b\b111/128\b\b\b\b\b\b\b112/128\b\b\b\b\b\b\b113/128\b\b\b\b\b\b\b114/128\b\b\b\b\b\b\b115/128\b\b\b\b\b\b\b116/128\b\b\b\b\b\b\b117/128\b\b\b\b\b\b\b118/128\b\b\b\b\b\b\b119/128\b\b\b\b\b\b\b120/128\b\b\b\b\b\b\b121/128\b\b\b\b\b\b\b122/128\b\b\b\b\b\b\b123/128\b\b\b\b\b\b\b124/128\b\b\b\b\b\b\b125/128\b\b\b\b\b\b\b126/128\b\b\b\b\b\b\b127/128\b\b\b\b\b\b\b       \b\b\b\b\b\b\bdone                            
-Writing superblocks and filesystem accounting information:   0/128\b\b\b\b\b\b\b  1/128\b\b\b\b\b\b\b  2/128\b\b\b\b\b\b\b  3/128\b\b\b\b\b\b\b  4/128\b\b\b\b\b\b\b  5/128\b\b\b\b\b\b\b  6/128\b\b\b\b\b\b\b  7/128\b\b\b\b\b\b\b  8/128\b\b\b\b\b\b\b  9/128\b\b\b\b\b\b\b 10/128\b\b\b\b\b\b\b 11/128\b\b\b\b\b\b\b 12/128\b\b\b\b\b\b\b 13/128\b\b\b\b\b\b\b 14/128\b\b\b\b\b\b\b 15/128\b\b\b\b\b\b\b 16/128\b\b\b\b\b\b\b 17/128\b\b\b\b\b\b\b 18/128\b\b\b\b\b\b\b 19/128\b\b\b\b\b\b\b 20/128\b\b\b\b\b\b\b 21/128\b\b\b\b\b\b\b 22/128\b\b\b\b\b\b\b 23/128\b\b\b\b\b\b\b 24/128\b\b\b\b\b\b\b 25/128\b\b\b\b\b\b\b 26/128\b\b\b\b\b\b\b 27/128\b\b\b\b\b\b\b 28/128\b\b\b\b\b\b\b 29/128\b\b\b\b\b\b\b 30/128\b\b\b\b\b\b\b 31/128\b\b\b\b\b\b\b 32/128\b\b\b\b\b\b\b 33/128\b\b\b\b\b\b\b 34/128\b\b\b\b\b\b\b 35/128\b\b\b\b\b\b\b 36/128\b\b\b\b\b\b\b 37/128\b\b\b\b\b\b\b 38/128\b\b\b\b\b\b\b 39/128\b\b\b\b\b\b\b 40/128\b\b\b\b\b\b\b 41/128\b\b\b\b\b\b\b 42/128\b\b\b\b\b\b\b 43/128\b\b\b\b\b\b\b 44/128\b\b\b\b\b\b\b 45/128\b\b\b\b\b\b\b 46/128\b\b\b\b\b\b\b 47/128\b\b\b\b\b\b\b 48/128\b\b\b\b\b\b\b 49/128\b\b\b\b\b\b\b 50/128\b\b\b\b\b\b\b 51/128\b\b\b\b\b\b\b 52/128\b\b\b\b\b\b\b 53/128\b\b\b\b\b\b\b 54/128\b\b\b\b\b\b\b 55/128\b\b\b\b\b\b\b 56/128\b\b\b\b\b\b\b 57/128\b\b\b\b\b\b\b 58/128\b\b\b\b\b\b\b 59/128\b\b\b\b\b\b\b 60/128\b\b\b\b\b\b\b 61/128\b\b\b\b\b\b\b 62/128\b\b\b\b\b\b\b 63/128\b\b\b\b\b\b\b 64/128\b\b\b\b\b\b\b 65/128\b\b\b\b\b\b\b 66/128\b\b\b\b\b\b\b 67/128\b\b\b\b\b\b\b 68/128\b\b\b\b\b\b\b 69/128\b\b\b\b\b\b\b 70/128\b\b\b\b\b\b\b 71/128\b\b\b\b\b\b\b 72/128\b\b\b\b\b\b\b 73/128\b\b\b\b\b\b\b 74/128\b\b\b\b\b\b\b 75/128\b\b\b\b\b\b\b 76/128\b\b\b\b\b\b\b 77/128\b\b\b\b\b\b\b 78/128\b\b\b\b\b\b\b 79/128\b\b\b\b\b\b\b 80/128\b\b\b\b\b\b\b 81/128\b\b\b\b\b\b\b 82/128\b\b\b\b\b\b\b 83/128\b\b\b\b\b\b\b 84/128\b\b\b\b\b\b\b 85/128\b\b\b\b\b\b\b 86/128\b\b\b\b\b\b\b 87/128\b\b\b\b\b\b\b 88/128\b\b\b\b\b\b\b 89/128\b\b\b\b\b\b\b 90/128\b\b\b\b\b\b\b 91/128\b\b\b\b\b\b\b 92/128\b\b\b\b\b\b\b 93/128\b\b\b\b\b\b\b 94/128\b\b\b\b\b\b\b 95/128\b\b\b\b\b\b\b 96/128\b\b\b\b\b\b\b 97/128\b\b\b\b\b\b\b 98/128\b\b\b\b\b\b\b 99/128\b\b\b\b\b\b\b100/128\b\b\b\b\b\b\b101/128\b\b\b\b\b\b\b102/128\b\b\b\b\b\b\b103/128\b\b\b\b\b\b\b104/128\b\b\b\b\b\b\b105/128\b\b\b\b\b\b\b106/128\b\b\b\b\b\b\b107/128\b\b\b\b\b\b\b108/128\b\b\b\b\b\b\b109/128\b\b\b\b\b\b\b110/128\b\b\b\b\b\b\b111/128\b\b\b\b\b\b\b112/128\b\b\b\b\b\b\b113/128\b\b\b\b\b\b\b114/128\b\b\b\b\b\b\b115/128\b\b\b\b\b\b\b116/128\b\b\b\b\b\b\b117/128\b\b\b\b\b\b\b118/128\b\b\b\b\b\b\b119/128\b\b\b\b\b\b\b120/128\b\b\b\b\b\b\b121/128\b\b\b\b\b\b\b122/128\b\b\b\b\b\b\b123/128\b\b\b\b\b\b\b124/128\b\b\b\b\b\b\b125/128\b\b\b\b\b\b\b126/128\b\b\b\b\b\b\b127/128\b\b\b\b\b\b\b       \b\b\b\b\b\b\bdone
+Allocating group tables:        \b\b\b\b\b\b\bdone                            
+Writing inode tables:        \b\b\b\b\b\b\bdone                            
+Writing superblocks and filesystem accounting information:        \b\b\b\b\b\b\bdone
 
 Filesystem features: ext_attr dir_index filetype meta_bg sparse_super
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -25,7 +24,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/32768 files (0.0% non-contiguous), 4389/131072 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index 63612a8..c21da0c 100644 (file)
@@ -12,8 +12,8 @@ export MKE2FS_SKIP_PROGRESS MKE2FS_SKIP_CHECK_MSG
 
 cp /dev/null $OUT
 
-$MKE2FS -F -o Linux $MKE2FS_OPTS $TMPFILE $FS_SIZE 2>&1 | sed -e 1d | \
-       sed -e "s;$TMPFILE;test.img;" | tr -d \\015 > $OUT
+$MKE2FS -F -o Linux $MKE2FS_OPTS $TMPFILE $FS_SIZE 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" > $OUT
 
 rm -f $TMPFILE
 
index d3319b3..e18aa77 100644 (file)
@@ -13,13 +13,12 @@ Maximum filesystem blocks=67108864
 Superblock backups stored on blocks: 
        32768
 
-Allocating group tables: 0/2\b\b\b1/2\b\b\b   \b\b\bdone                            
-Writing inode tables: 0/2\b\b\b1/2\b\b\b   \b\b\bdone                            
+Allocating group tables:    \b\b\bdone                            
+Writing inode tables:    \b\b\bdone                            
 Multiple mount protection is enabled with update interval 5 seconds.
-Writing superblocks and filesystem accounting information: 0/2\b\b\b1/2\b\b\b   \b\b\bdone
+Writing superblocks and filesystem accounting information:    \b\b\bdone
 
 Filesystem features: ext_attr resize_inode dir_index filetype mmp sparse_super large_file
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -27,7 +26,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/65536 files (0.0% non-contiguous), 2093/65536 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index 7f3e5aa..e7bf2db 100644 (file)
@@ -12,12 +12,11 @@ First data block=1
 Superblock backups stored on blocks: 
        8193, 16385, 24577, 32769, 40961, 49153, 57345
 
-Allocating group tables: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone                            
-Writing inode tables: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone                            
-Writing superblocks and filesystem accounting information: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone
+Allocating group tables:    \b\b\bdone                            
+Writing inode tables:    \b\b\bdone                            
+Writing superblocks and filesystem accounting information:    \b\b\bdone
 
 Filesystem features:(none)
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -25,7 +24,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/16384 files (0.0% non-contiguous), 2094/65536 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index 0c6acc1..9548665 100644 (file)
@@ -13,12 +13,11 @@ Maximum filesystem blocks=8519680
 Superblock backups stored on blocks: 
        1025, 3073, 5121, 7169, 9217, 25601, 27649, 50177, 82945, 128001
 
-Allocating group tables:   0/128\b\b\b\b\b\b\b  1/128\b\b\b\b\b\b\b  2/128\b\b\b\b\b\b\b  3/128\b\b\b\b\b\b\b  4/128\b\b\b\b\b\b\b  5/128\b\b\b\b\b\b\b  6/128\b\b\b\b\b\b\b  7/128\b\b\b\b\b\b\b  8/128\b\b\b\b\b\b\b  9/128\b\b\b\b\b\b\b 10/128\b\b\b\b\b\b\b 11/128\b\b\b\b\b\b\b 12/128\b\b\b\b\b\b\b 13/128\b\b\b\b\b\b\b 14/128\b\b\b\b\b\b\b 15/128\b\b\b\b\b\b\b 16/128\b\b\b\b\b\b\b 17/128\b\b\b\b\b\b\b 18/128\b\b\b\b\b\b\b 19/128\b\b\b\b\b\b\b 20/128\b\b\b\b\b\b\b 21/128\b\b\b\b\b\b\b 22/128\b\b\b\b\b\b\b 23/128\b\b\b\b\b\b\b 24/128\b\b\b\b\b\b\b 25/128\b\b\b\b\b\b\b 26/128\b\b\b\b\b\b\b 27/128\b\b\b\b\b\b\b 28/128\b\b\b\b\b\b\b 29/128\b\b\b\b\b\b\b 30/128\b\b\b\b\b\b\b 31/128\b\b\b\b\b\b\b 32/128\b\b\b\b\b\b\b 33/128\b\b\b\b\b\b\b 34/128\b\b\b\b\b\b\b 35/128\b\b\b\b\b\b\b 36/128\b\b\b\b\b\b\b 37/128\b\b\b\b\b\b\b 38/128\b\b\b\b\b\b\b 39/128\b\b\b\b\b\b\b 40/128\b\b\b\b\b\b\b 41/128\b\b\b\b\b\b\b 42/128\b\b\b\b\b\b\b 43/128\b\b\b\b\b\b\b 44/128\b\b\b\b\b\b\b 45/128\b\b\b\b\b\b\b 46/128\b\b\b\b\b\b\b 47/128\b\b\b\b\b\b\b 48/128\b\b\b\b\b\b\b 49/128\b\b\b\b\b\b\b 50/128\b\b\b\b\b\b\b 51/128\b\b\b\b\b\b\b 52/128\b\b\b\b\b\b\b 53/128\b\b\b\b\b\b\b 54/128\b\b\b\b\b\b\b 55/128\b\b\b\b\b\b\b 56/128\b\b\b\b\b\b\b 57/128\b\b\b\b\b\b\b 58/128\b\b\b\b\b\b\b 59/128\b\b\b\b\b\b\b 60/128\b\b\b\b\b\b\b 61/128\b\b\b\b\b\b\b 62/128\b\b\b\b\b\b\b 63/128\b\b\b\b\b\b\b 64/128\b\b\b\b\b\b\b 65/128\b\b\b\b\b\b\b 66/128\b\b\b\b\b\b\b 67/128\b\b\b\b\b\b\b 68/128\b\b\b\b\b\b\b 69/128\b\b\b\b\b\b\b 70/128\b\b\b\b\b\b\b 71/128\b\b\b\b\b\b\b 72/128\b\b\b\b\b\b\b 73/128\b\b\b\b\b\b\b 74/128\b\b\b\b\b\b\b 75/128\b\b\b\b\b\b\b 76/128\b\b\b\b\b\b\b 77/128\b\b\b\b\b\b\b 78/128\b\b\b\b\b\b\b 79/128\b\b\b\b\b\b\b 80/128\b\b\b\b\b\b\b 81/128\b\b\b\b\b\b\b 82/128\b\b\b\b\b\b\b 83/128\b\b\b\b\b\b\b 84/128\b\b\b\b\b\b\b 85/128\b\b\b\b\b\b\b 86/128\b\b\b\b\b\b\b 87/128\b\b\b\b\b\b\b 88/128\b\b\b\b\b\b\b 89/128\b\b\b\b\b\b\b 90/128\b\b\b\b\b\b\b 91/128\b\b\b\b\b\b\b 92/128\b\b\b\b\b\b\b 93/128\b\b\b\b\b\b\b 94/128\b\b\b\b\b\b\b 95/128\b\b\b\b\b\b\b 96/128\b\b\b\b\b\b\b 97/128\b\b\b\b\b\b\b 98/128\b\b\b\b\b\b\b 99/128\b\b\b\b\b\b\b100/128\b\b\b\b\b\b\b101/128\b\b\b\b\b\b\b102/128\b\b\b\b\b\b\b103/128\b\b\b\b\b\b\b104/128\b\b\b\b\b\b\b105/128\b\b\b\b\b\b\b106/128\b\b\b\b\b\b\b107/128\b\b\b\b\b\b\b108/128\b\b\b\b\b\b\b109/128\b\b\b\b\b\b\b110/128\b\b\b\b\b\b\b111/128\b\b\b\b\b\b\b112/128\b\b\b\b\b\b\b113/128\b\b\b\b\b\b\b114/128\b\b\b\b\b\b\b115/128\b\b\b\b\b\b\b116/128\b\b\b\b\b\b\b117/128\b\b\b\b\b\b\b118/128\b\b\b\b\b\b\b119/128\b\b\b\b\b\b\b120/128\b\b\b\b\b\b\b121/128\b\b\b\b\b\b\b122/128\b\b\b\b\b\b\b123/128\b\b\b\b\b\b\b124/128\b\b\b\b\b\b\b125/128\b\b\b\b\b\b\b126/128\b\b\b\b\b\b\b127/128\b\b\b\b\b\b\b       \b\b\b\b\b\b\bdone                            
-Writing inode tables:   0/128\b\b\b\b\b\b\b  1/128\b\b\b\b\b\b\b  2/128\b\b\b\b\b\b\b  3/128\b\b\b\b\b\b\b  4/128\b\b\b\b\b\b\b  5/128\b\b\b\b\b\b\b  6/128\b\b\b\b\b\b\b  7/128\b\b\b\b\b\b\b  8/128\b\b\b\b\b\b\b  9/128\b\b\b\b\b\b\b 10/128\b\b\b\b\b\b\b 11/128\b\b\b\b\b\b\b 12/128\b\b\b\b\b\b\b 13/128\b\b\b\b\b\b\b 14/128\b\b\b\b\b\b\b 15/128\b\b\b\b\b\b\b 16/128\b\b\b\b\b\b\b 17/128\b\b\b\b\b\b\b 18/128\b\b\b\b\b\b\b 19/128\b\b\b\b\b\b\b 20/128\b\b\b\b\b\b\b 21/128\b\b\b\b\b\b\b 22/128\b\b\b\b\b\b\b 23/128\b\b\b\b\b\b\b 24/128\b\b\b\b\b\b\b 25/128\b\b\b\b\b\b\b 26/128\b\b\b\b\b\b\b 27/128\b\b\b\b\b\b\b 28/128\b\b\b\b\b\b\b 29/128\b\b\b\b\b\b\b 30/128\b\b\b\b\b\b\b 31/128\b\b\b\b\b\b\b 32/128\b\b\b\b\b\b\b 33/128\b\b\b\b\b\b\b 34/128\b\b\b\b\b\b\b 35/128\b\b\b\b\b\b\b 36/128\b\b\b\b\b\b\b 37/128\b\b\b\b\b\b\b 38/128\b\b\b\b\b\b\b 39/128\b\b\b\b\b\b\b 40/128\b\b\b\b\b\b\b 41/128\b\b\b\b\b\b\b 42/128\b\b\b\b\b\b\b 43/128\b\b\b\b\b\b\b 44/128\b\b\b\b\b\b\b 45/128\b\b\b\b\b\b\b 46/128\b\b\b\b\b\b\b 47/128\b\b\b\b\b\b\b 48/128\b\b\b\b\b\b\b 49/128\b\b\b\b\b\b\b 50/128\b\b\b\b\b\b\b 51/128\b\b\b\b\b\b\b 52/128\b\b\b\b\b\b\b 53/128\b\b\b\b\b\b\b 54/128\b\b\b\b\b\b\b 55/128\b\b\b\b\b\b\b 56/128\b\b\b\b\b\b\b 57/128\b\b\b\b\b\b\b 58/128\b\b\b\b\b\b\b 59/128\b\b\b\b\b\b\b 60/128\b\b\b\b\b\b\b 61/128\b\b\b\b\b\b\b 62/128\b\b\b\b\b\b\b 63/128\b\b\b\b\b\b\b 64/128\b\b\b\b\b\b\b 65/128\b\b\b\b\b\b\b 66/128\b\b\b\b\b\b\b 67/128\b\b\b\b\b\b\b 68/128\b\b\b\b\b\b\b 69/128\b\b\b\b\b\b\b 70/128\b\b\b\b\b\b\b 71/128\b\b\b\b\b\b\b 72/128\b\b\b\b\b\b\b 73/128\b\b\b\b\b\b\b 74/128\b\b\b\b\b\b\b 75/128\b\b\b\b\b\b\b 76/128\b\b\b\b\b\b\b 77/128\b\b\b\b\b\b\b 78/128\b\b\b\b\b\b\b 79/128\b\b\b\b\b\b\b 80/128\b\b\b\b\b\b\b 81/128\b\b\b\b\b\b\b 82/128\b\b\b\b\b\b\b 83/128\b\b\b\b\b\b\b 84/128\b\b\b\b\b\b\b 85/128\b\b\b\b\b\b\b 86/128\b\b\b\b\b\b\b 87/128\b\b\b\b\b\b\b 88/128\b\b\b\b\b\b\b 89/128\b\b\b\b\b\b\b 90/128\b\b\b\b\b\b\b 91/128\b\b\b\b\b\b\b 92/128\b\b\b\b\b\b\b 93/128\b\b\b\b\b\b\b 94/128\b\b\b\b\b\b\b 95/128\b\b\b\b\b\b\b 96/128\b\b\b\b\b\b\b 97/128\b\b\b\b\b\b\b 98/128\b\b\b\b\b\b\b 99/128\b\b\b\b\b\b\b100/128\b\b\b\b\b\b\b101/128\b\b\b\b\b\b\b102/128\b\b\b\b\b\b\b103/128\b\b\b\b\b\b\b104/128\b\b\b\b\b\b\b105/128\b\b\b\b\b\b\b106/128\b\b\b\b\b\b\b107/128\b\b\b\b\b\b\b108/128\b\b\b\b\b\b\b109/128\b\b\b\b\b\b\b110/128\b\b\b\b\b\b\b111/128\b\b\b\b\b\b\b112/128\b\b\b\b\b\b\b113/128\b\b\b\b\b\b\b114/128\b\b\b\b\b\b\b115/128\b\b\b\b\b\b\b116/128\b\b\b\b\b\b\b117/128\b\b\b\b\b\b\b118/128\b\b\b\b\b\b\b119/128\b\b\b\b\b\b\b120/128\b\b\b\b\b\b\b121/128\b\b\b\b\b\b\b122/128\b\b\b\b\b\b\b123/128\b\b\b\b\b\b\b124/128\b\b\b\b\b\b\b125/128\b\b\b\b\b\b\b126/128\b\b\b\b\b\b\b127/128\b\b\b\b\b\b\b       \b\b\b\b\b\b\bdone                            
-Writing superblocks and filesystem accounting information:   0/128\b\b\b\b\b\b\b  1/128\b\b\b\b\b\b\b  2/128\b\b\b\b\b\b\b  3/128\b\b\b\b\b\b\b  4/128\b\b\b\b\b\b\b  5/128\b\b\b\b\b\b\b  6/128\b\b\b\b\b\b\b  7/128\b\b\b\b\b\b\b  8/128\b\b\b\b\b\b\b  9/128\b\b\b\b\b\b\b 10/128\b\b\b\b\b\b\b 11/128\b\b\b\b\b\b\b 12/128\b\b\b\b\b\b\b 13/128\b\b\b\b\b\b\b 14/128\b\b\b\b\b\b\b 15/128\b\b\b\b\b\b\b 16/128\b\b\b\b\b\b\b 17/128\b\b\b\b\b\b\b 18/128\b\b\b\b\b\b\b 19/128\b\b\b\b\b\b\b 20/128\b\b\b\b\b\b\b 21/128\b\b\b\b\b\b\b 22/128\b\b\b\b\b\b\b 23/128\b\b\b\b\b\b\b 24/128\b\b\b\b\b\b\b 25/128\b\b\b\b\b\b\b 26/128\b\b\b\b\b\b\b 27/128\b\b\b\b\b\b\b 28/128\b\b\b\b\b\b\b 29/128\b\b\b\b\b\b\b 30/128\b\b\b\b\b\b\b 31/128\b\b\b\b\b\b\b 32/128\b\b\b\b\b\b\b 33/128\b\b\b\b\b\b\b 34/128\b\b\b\b\b\b\b 35/128\b\b\b\b\b\b\b 36/128\b\b\b\b\b\b\b 37/128\b\b\b\b\b\b\b 38/128\b\b\b\b\b\b\b 39/128\b\b\b\b\b\b\b 40/128\b\b\b\b\b\b\b 41/128\b\b\b\b\b\b\b 42/128\b\b\b\b\b\b\b 43/128\b\b\b\b\b\b\b 44/128\b\b\b\b\b\b\b 45/128\b\b\b\b\b\b\b 46/128\b\b\b\b\b\b\b 47/128\b\b\b\b\b\b\b 48/128\b\b\b\b\b\b\b 49/128\b\b\b\b\b\b\b 50/128\b\b\b\b\b\b\b 51/128\b\b\b\b\b\b\b 52/128\b\b\b\b\b\b\b 53/128\b\b\b\b\b\b\b 54/128\b\b\b\b\b\b\b 55/128\b\b\b\b\b\b\b 56/128\b\b\b\b\b\b\b 57/128\b\b\b\b\b\b\b 58/128\b\b\b\b\b\b\b 59/128\b\b\b\b\b\b\b 60/128\b\b\b\b\b\b\b 61/128\b\b\b\b\b\b\b 62/128\b\b\b\b\b\b\b 63/128\b\b\b\b\b\b\b 64/128\b\b\b\b\b\b\b 65/128\b\b\b\b\b\b\b 66/128\b\b\b\b\b\b\b 67/128\b\b\b\b\b\b\b 68/128\b\b\b\b\b\b\b 69/128\b\b\b\b\b\b\b 70/128\b\b\b\b\b\b\b 71/128\b\b\b\b\b\b\b 72/128\b\b\b\b\b\b\b 73/128\b\b\b\b\b\b\b 74/128\b\b\b\b\b\b\b 75/128\b\b\b\b\b\b\b 76/128\b\b\b\b\b\b\b 77/128\b\b\b\b\b\b\b 78/128\b\b\b\b\b\b\b 79/128\b\b\b\b\b\b\b 80/128\b\b\b\b\b\b\b 81/128\b\b\b\b\b\b\b 82/128\b\b\b\b\b\b\b 83/128\b\b\b\b\b\b\b 84/128\b\b\b\b\b\b\b 85/128\b\b\b\b\b\b\b 86/128\b\b\b\b\b\b\b 87/128\b\b\b\b\b\b\b 88/128\b\b\b\b\b\b\b 89/128\b\b\b\b\b\b\b 90/128\b\b\b\b\b\b\b 91/128\b\b\b\b\b\b\b 92/128\b\b\b\b\b\b\b 93/128\b\b\b\b\b\b\b 94/128\b\b\b\b\b\b\b 95/128\b\b\b\b\b\b\b 96/128\b\b\b\b\b\b\b 97/128\b\b\b\b\b\b\b 98/128\b\b\b\b\b\b\b 99/128\b\b\b\b\b\b\b100/128\b\b\b\b\b\b\b101/128\b\b\b\b\b\b\b102/128\b\b\b\b\b\b\b103/128\b\b\b\b\b\b\b104/128\b\b\b\b\b\b\b105/128\b\b\b\b\b\b\b106/128\b\b\b\b\b\b\b107/128\b\b\b\b\b\b\b108/128\b\b\b\b\b\b\b109/128\b\b\b\b\b\b\b110/128\b\b\b\b\b\b\b111/128\b\b\b\b\b\b\b112/128\b\b\b\b\b\b\b113/128\b\b\b\b\b\b\b114/128\b\b\b\b\b\b\b115/128\b\b\b\b\b\b\b116/128\b\b\b\b\b\b\b117/128\b\b\b\b\b\b\b118/128\b\b\b\b\b\b\b119/128\b\b\b\b\b\b\b120/128\b\b\b\b\b\b\b121/128\b\b\b\b\b\b\b122/128\b\b\b\b\b\b\b123/128\b\b\b\b\b\b\b124/128\b\b\b\b\b\b\b125/128\b\b\b\b\b\b\b126/128\b\b\b\b\b\b\b127/128\b\b\b\b\b\b\b       \b\b\b\b\b\b\bdone
+Allocating group tables:        \b\b\b\b\b\b\bdone                            
+Writing inode tables:        \b\b\b\b\b\b\bdone                            
+Writing superblocks and filesystem accounting information:        \b\b\b\b\b\b\bdone
 
 Filesystem features: ext_attr resize_inode dir_index filetype sparse_super
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -26,7 +25,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/32768 files (0.0% non-contiguous), 7238/131072 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index 1e47cc1..296fe94 100644 (file)
@@ -1,4 +1,4 @@
 DESCRIPTION="raid options"
 FS_SIZE=131072
-MKE2FS_OPTS="-R stride=13 -O sparse_super -g 1024"
+MKE2FS_OPTS="-E stride=13 -O sparse_super -g 1024"
 . $cmd_dir/run_mke2fs
diff --git a/tests/m_root_owner/expect.1 b/tests/m_root_owner/expect.1
new file mode 100644 (file)
index 0000000..72b0e08
--- /dev/null
@@ -0,0 +1,65 @@
+Filesystem label=
+OS type: Linux
+Block size=1024 (log=0)
+Fragment size=1024 (log=0)
+Stride=0 blocks, Stripe width=0 blocks
+128 inodes, 1024 blocks
+51 blocks (4.98%) reserved for the super user
+First data block=1
+Root directory owner=1234:1234
+Maximum filesystem blocks=1048576
+1 block group
+8192 blocks per group, 8192 fragments per group
+128 inodes per group
+
+Allocating group tables:    \b\b\bdone                            
+Writing inode tables:    \b\b\bdone                            
+Writing superblocks and filesystem accounting information:    \b\b\bdone
+
+Filesystem features: ext_attr resize_inode dir_index filetype sparse_super
+Pass 1: Checking inodes, blocks, and sizes
+Pass 2: Checking directory structure
+Pass 3: Checking directory connectivity
+Pass 4: Checking reference counts
+Pass 5: Checking group summary information
+test_filesys: 11/128 files (0.0% non-contiguous), 38/1024 blocks
+Exit status is 0
+Filesystem volume name:   <none>
+Last mounted on:          <not available>
+Filesystem magic number:  0xEF53
+Filesystem revision #:    1 (dynamic)
+Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super
+Default mount options:    (none)
+Filesystem state:         clean
+Errors behavior:          Continue
+Filesystem OS type:       Linux
+Inode count:              128
+Block count:              1024
+Reserved block count:     51
+Free blocks:              986
+Free inodes:              117
+First block:              1
+Block size:               1024
+Fragment size:            1024
+Reserved GDT blocks:      3
+Blocks per group:         8192
+Fragments per group:      8192
+Inodes per group:         128
+Inode blocks per group:   16
+Mount count:              0
+Check interval:           15552000 (6 months)
+Reserved blocks uid:      0
+Reserved blocks gid:      0
+First inode:              11
+Inode size:              128
+Default directory hash:   half_md4
+
+
+Group 0: (Blocks 1-1023)
+  Primary superblock at 1, Group descriptors at 2-2
+  Reserved GDT blocks at 3-5
+  Block bitmap at 6 (+5), Inode bitmap at 7 (+6)
+  Inode table at 8-23 (+7)
+  986 free blocks, 117 free inodes, 2 directories
+  Free blocks: 38-1023
+  Free inodes: 12-128
diff --git a/tests/m_root_owner/script b/tests/m_root_owner/script
new file mode 100644 (file)
index 0000000..02c5ef6
--- /dev/null
@@ -0,0 +1,4 @@
+DESCRIPTION="root directory owner"
+FS_SIZE=1024
+MKE2FS_OPTS="-E root_owner=1234:1234"
+. $cmd_dir/run_mke2fs
index d0bf27c..f356531 100644 (file)
@@ -13,12 +13,11 @@ Maximum filesystem blocks=67108864
 Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345
 
-Allocating group tables: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone                            
-Writing inode tables: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone                            
-Writing superblocks and filesystem accounting information: 0/8\b\b\b1/8\b\b\b2/8\b\b\b3/8\b\b\b4/8\b\b\b5/8\b\b\b6/8\b\b\b7/8\b\b\b   \b\b\bdone
+Allocating group tables:    \b\b\bdone                            
+Writing inode tables:    \b\b\bdone                            
+Writing superblocks and filesystem accounting information:    \b\b\bdone
 
 Filesystem features: ext_attr resize_inode dir_index filetype sparse_super
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -26,7 +25,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/16384 files (0.0% non-contiguous), 3364/65536 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index a3c059d..3212e10 100644 (file)
@@ -13,12 +13,11 @@ Maximum filesystem blocks=67371008
 Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729
 
-Allocating group tables:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone                            
-Writing inode tables:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone                            
-Writing superblocks and filesystem accounting information:  0/16\b\b\b\b\b 1/16\b\b\b\b\b 2/16\b\b\b\b\b 3/16\b\b\b\b\b 4/16\b\b\b\b\b 5/16\b\b\b\b\b 6/16\b\b\b\b\b 7/16\b\b\b\b\b 8/16\b\b\b\b\b 9/16\b\b\b\b\b10/16\b\b\b\b\b11/16\b\b\b\b\b12/16\b\b\b\b\b13/16\b\b\b\b\b14/16\b\b\b\b\b15/16\b\b\b\b\b     \b\b\b\b\bdone
+Allocating group tables:      \b\b\b\b\bdone                            
+Writing inode tables:      \b\b\b\b\bdone                            
+Writing superblocks and filesystem accounting information:      \b\b\b\b\bdone
 
 Filesystem features: ext_attr resize_inode dir_index filetype sparse_super uninit_bg
 Pass 1: Checking inodes, blocks, and sizes
 Pass 2: Checking directory structure
 Pass 3: Checking directory connectivity
@@ -26,7 +25,6 @@ Pass 4: Checking reference counts
 Pass 5: Checking group summary information
 test_filesys: 11/32768 files (0.0% non-contiguous), 5691/131072 blocks
 Exit status is 0
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index fbe2e2a..c06050d 100644 (file)
@@ -6,6 +6,7 @@
        reserved_ratio = 5.0
        enable_periodic_fsck = true
        lazy_itable_init = false
+       no_discard = true
        default_mntopts = ^acl
 
 [fs_types]
index 0e28192..e3c1ef4 100644 (file)
@@ -13,7 +13,7 @@ INSTALL = @INSTALL@
 
 MK_CMDS=       _SS_DIR_OVERRIDE=../../lib/ss ../../lib/ss/mk_cmds
 
-PROGS=         test_icount
+PROGS=         test_icount crcsum
 
 TEST_REL_OBJS= test_rel.o test_rel_cmds.o
 
@@ -34,6 +34,10 @@ test_rel: $(TEST_REL_OBJS) $(DEPLIBS)
        $(E) "  LD $@"
        $(Q) $(LD) $(ALL_LDFLAGS) -o test_rel $(TEST_REL_OBJS) $(LIBS)
 
+crcsum: crcsum.o $(DEPLIBS)
+       $(E) "  LD $@"
+       $(Q) $(LD) $(ALL_LDFLAGS) -o crcsum crcsum.o $(LIBS)
+
 test_rel_cmds.c: test_rel_cmds.ct
        $(E) "  MK_CMDS $@"
        $(Q) $(MK_CMDS) $(srcdir)/test_rel_cmds.ct
diff --git a/tests/progs/crcsum.c b/tests/progs/crcsum.c
new file mode 100644 (file)
index 0000000..9794e10
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * crcsum.c
+ *
+ * Copyright (C) 2013 Theodore Ts'o.
+ *
+ * %Begin-Header%
+ * This file may be redistributed under the terms of the GNU Public
+ * License.
+ * %End-Header%
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+#include <fcntl.h>
+
+#include "et/com_err.h"
+#include "ss/ss.h"
+#include "ext2fs/ext2fs.h"
+
+
+int main(int argc, char **argv)
+{
+       int             c;
+       uint32_t        crc = ~0;
+       uint32_t        (*csum_func)(uint32_t crc, unsigned char const *p,
+                                    size_t len);
+       FILE            *f;
+
+       csum_func = ext2fs_crc32c_le;
+
+       while ((c = getopt (argc, argv, "h")) != EOF) {
+               switch (c) {
+               case 'h':
+               default:
+                       com_err(argv[0], 0, "Usage: crcsum [file]\n");
+                       return 1;
+               }
+       }
+
+       if (optind == argc)
+               f = stdin;
+       else {
+               f = fopen(argv[optind], "r");
+               if (!f) {
+                       com_err(argv[0], errno, "while trying to open %s\n",
+                               argv[optind]);
+                       exit(1);
+               }
+       }
+
+       while (!feof(f)) {
+               unsigned char buf[4096];
+
+               int c = fread(buf, 1, sizeof(buf), f);
+
+               if (c)
+                       crc = csum_func(crc, buf, c);
+       }
+       printf("%u\n", crc);
+       return 0;
+}
diff --git a/tests/r_1024_small_bg/script b/tests/r_1024_small_bg/script
new file mode 100644 (file)
index 0000000..fafcf91
--- /dev/null
@@ -0,0 +1,27 @@
+if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+
+test_description="ext2 1024 blocksize with small block groups"
+FEATURES="-t ext2 -O ^resize_inode -b 1024 -g 1024"
+SIZE_1=64M
+SIZE_2=2G
+LOG=$test_name.log
+E2FSCK=../e2fsck/e2fsck
+
+
+. $cmd_dir/scripts/resize_test
+
+if resize_test
+then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       touch $test_name.failed
+fi
+
+unset FEATURES SIZE_1 SIZE_2 LOG E2FSCK
+
+else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped"
+fi 
+
diff --git a/tests/r_64bit_big_expand/script b/tests/r_64bit_big_expand/script
new file mode 100644 (file)
index 0000000..3b34a62
--- /dev/null
@@ -0,0 +1,27 @@
+if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+
+test_description="very large fs growth using ext4 w/64bit"
+FEATURES="-t ext4 -O 64bit"
+SIZE_1=512M
+SIZE_2=2T
+LOG=$test_name.log
+E2FSCK=../e2fsck/e2fsck
+
+
+. $cmd_dir/scripts/resize_test
+
+if resize_test
+then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       touch $test_name.failed
+fi
+
+unset FEATURES SIZE_1 SIZE_2 LOG E2FSCK
+
+else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped"
+fi 
+
diff --git a/tests/r_bigalloc_big_expand/script b/tests/r_bigalloc_big_expand/script
new file mode 100644 (file)
index 0000000..2b9cc63
--- /dev/null
@@ -0,0 +1,27 @@
+if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+
+test_description="ext4 with bigalloc"
+FEATURES="-t ext4 -O bigalloc"
+SIZE_1=512M
+SIZE_2=2T
+LOG=$test_name.log
+E2FSCK=../e2fsck/e2fsck
+RESIZE2FS_OPTS=-f
+
+. $cmd_dir/scripts/resize_test
+
+if resize_test
+then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       touch $test_name.failed
+fi
+
+unset FEATURES SIZE_1 SIZE_2 LOG E2FSCK
+
+else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped"
+fi 
+
diff --git a/tests/r_ext4_big_expand/script b/tests/r_ext4_big_expand/script
new file mode 100644 (file)
index 0000000..fb31d7a
--- /dev/null
@@ -0,0 +1,27 @@
+if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+
+test_description="very large fs growth using ext4"
+FEATURES="-t ext4"
+SIZE_1=512M
+SIZE_2=2T
+LOG=$test_name.log
+E2FSCK=../e2fsck/e2fsck
+
+
+. $cmd_dir/scripts/resize_test
+
+if resize_test
+then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       touch $test_name.failed
+fi
+
+unset FEATURES SIZE_1 SIZE_2 LOG E2FSCK
+
+else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped"
+fi 
+
diff --git a/tests/r_ext4_small_bg/script b/tests/r_ext4_small_bg/script
new file mode 100644 (file)
index 0000000..553cbd8
--- /dev/null
@@ -0,0 +1,27 @@
+if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+
+test_description="ext4 1024 blocksize with small block groups"
+FEATURES="-t ext4 -O ^resize_inode -b 1024 -g 512"
+SIZE_1=64M
+SIZE_2=2G
+LOG=$test_name.log
+E2FSCK=../e2fsck/e2fsck
+
+
+. $cmd_dir/scripts/resize_test
+
+if resize_test
+then
+       echo "$test_name: $test_description: ok"
+       touch $test_name.ok
+else
+       echo "$test_name: $test_description: failed"
+       touch $test_name.failed
+fi
+
+unset FEATURES SIZE_1 SIZE_2 LOG E2FSCK
+
+else #if test -x $RESIZE2FS_EXE -a -x $DEBUGFS_EXE; then
+       echo "$test_name: $test_description: skipped"
+fi 
+
index 021088e..d882587 100644 (file)
@@ -20,7 +20,7 @@ echo "resize2fs test.img 5M" >> $OUT
 $RESIZE2FS $TMPFILE 5M 2>&1 >> $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e "s;$TMPFILE;test.img;" >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 
 # Look at inline extended attribute in resized fs
 echo "debugfs -R ''stat file'' test.img 2>&1 | grep ''^Inode\|in inode body\|name = ''" >> $OUT
index 195bb11..b4b089b 100644 (file)
@@ -13,7 +13,6 @@ Pass 5: Checking group summary information
 test_filesys: 11/1248 files (0.0% non-contiguous), 1281/9985 blocks
 Exit status is 0
 dumpe2fs test.img
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
@@ -312,7 +311,6 @@ Pass 5: Checking group summary information
 test_filesys: 11/2496 files (0.0% non-contiguous), 1644/19969 blocks
 Exit status is 0
 dumpe2fs test.img
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
@@ -847,7 +845,6 @@ Pass 5: Checking group summary information
 test_filesys: 11/3744 files (0.0% non-contiguous), 2007/29953 blocks
 Exit status is 0
 dumpe2fs test.img
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
@@ -1618,7 +1615,6 @@ Pass 5: Checking group summary information
 test_filesys: 11/5024 files (0.0% non-contiguous), 2376/40000 blocks
 Exit status is 0
 dumpe2fs test.img
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index fc8286f..e567888 100644 (file)
@@ -14,18 +14,17 @@ cp /dev/null $OUT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
 echo mke2fs -q -F -o Linux -b 1024 -g 256 test.img 1024 > $OUT
-$MKE2FS -q -F -o Linux -b 1024 -g 256 $TMPFILE 1024 2>&1 \
-       | sed -e '1d' | grep -v "automatically checked" | 
-       grep -v "whichever comes first" >> $OUT 
+$MKE2FS -q -F -o Linux -b 1024 -g 256 $TMPFILE 1024 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 echo resize2fs -p test.img 10000 >> $OUT
-$RESIZE2FS -p $TMPFILE 10000 2>&1 | sed -e '1d' | \
-          sed -e "s;$TMPFILE;test.img;" >> $OUT
+$RESIZE2FS -p $TMPFILE 10000 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 rm -f $OUT.new
 
 $DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
@@ -34,18 +33,18 @@ $DEBUGFS -R "set_super_value mkfs_time 0" -w $TMPFILE >/dev/null 2>&1
 $TUNE2FS -c 20 -U clear $TMPFILE  >/dev/null 2>&1
 
 echo dumpe2fs test.img >> $OUT
-$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
 
 echo "--------------------------------" >> $OUT
 
 echo resize2fs -p test.img 20000 >> $OUT
-$RESIZE2FS -p $TMPFILE 20000 2>&1 | sed -e '1d' | \
-          sed -e "s;$TMPFILE;test.img;" >> $OUT
+$RESIZE2FS -p $TMPFILE 20000 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 rm -f $OUT.new
 
 $DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
@@ -54,18 +53,18 @@ $DEBUGFS -R "set_super_value mkfs_time 0" -w $TMPFILE >/dev/null 2>&1
 $TUNE2FS -c 20 -U clear $TMPFILE  >/dev/null 2>&1
 
 echo dumpe2fs test.img >> $OUT
-$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
 
 echo "--------------------------------" >> $OUT
 
 echo resize2fs -p test.img 30000 >> $OUT
-$RESIZE2FS -p $TMPFILE 30000 2>&1 | sed -e '1d' | \
-          sed -e "s;$TMPFILE;test.img;" >> $OUT
+$RESIZE2FS -p $TMPFILE 30000 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 rm -f $OUT.new
 
 $DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
@@ -74,18 +73,18 @@ $DEBUGFS -R "set_super_value mkfs_time 0" -w $TMPFILE >/dev/null 2>&1
 $TUNE2FS -c 20 -U clear $TMPFILE  >/dev/null 2>&1
 
 echo dumpe2fs test.img >> $OUT
-$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
 
 echo "--------------------------------" >> $OUT
 
 echo resize2fs -p test.img 40000 >> $OUT
-$RESIZE2FS -p $TMPFILE 40000 2>&1 | sed -e '1d' | \
-          sed -e "s;$TMPFILE;test.img;" >> $OUT
+$RESIZE2FS -p $TMPFILE 40000 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 rm -f $OUT.new
 
 $DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
@@ -94,7 +93,7 @@ $DEBUGFS -R "set_super_value mkfs_time 0" -w $TMPFILE >/dev/null 2>&1
 $TUNE2FS -c 20 -U clear $TMPFILE  >/dev/null 2>&1
 
 echo dumpe2fs test.img >> $OUT
-$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
 
 rm -f $TMPFILE
 
index f9f79c4..786fe13 100644 (file)
@@ -11,7 +11,6 @@ Pass 5: Checking group summary information
 test_filesys: 11/16384 files (0.0% non-contiguous), 4513/65536 blocks
 Exit status is 0
 dumpe2fs test.img
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
@@ -459,7 +458,6 @@ Pass 5: Checking group summary information
 test_filesys: 11/4096 files (0.0% non-contiguous), 2107/16384 blocks
 Exit status is 0
 dumpe2fs test.img
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
@@ -614,7 +612,6 @@ Pass 5: Checking group summary information
 test_filesys: 11/41472 files (0.0% non-contiguous), 8361/165536 blocks
 Exit status is 0
 dumpe2fs test.img
-
 Filesystem volume name:   <none>
 Last mounted on:          <not available>
 Filesystem magic number:  0xEF53
index da3c2ed..0f12138 100644 (file)
@@ -14,18 +14,17 @@ cp /dev/null $OUT
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
 echo mke2fs -q -F -O resize_inode -o Linux -b 1024 -g 1024 test.img 16384 > $OUT
-$MKE2FS -q -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 16384 2>&1 \
-       | sed -e '1d' | grep -v "automatically checked" | 
-       grep -v "whichever comes first" >> $OUT 
+$MKE2FS -q -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 16384 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 echo resize2fs test.img 65536 >> $OUT
-$RESIZE2FS $TMPFILE 65536 2>&1 | sed -e '1d' | \
-          sed -e "s;$TMPFILE;test.img;" >> $OUT
+$RESIZE2FS $TMPFILE 65536 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 rm -f $OUT.new
 
 $DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
@@ -34,25 +33,24 @@ $DEBUGFS -R "set_super_value mkfs_time 0" -w $TMPFILE >/dev/null 2>&1
 $TUNE2FS -c 20 -U clear $TMPFILE  >/dev/null 2>&1
 
 echo dumpe2fs test.img >> $OUT
-$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
 
 echo "--------------------------------" >> $OUT
 
 dd if=/dev/zero of=$TMPFILE bs=1k count=512 > /dev/null 2>&1
 
 echo mke2fs -q -F -O resize_inode -o Linux -b 1024 -g 1024 test.img 65536 >> $OUT
-$MKE2FS -q -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 65536 2>&1 \
-       | sed -e '1d' | grep -v "automatically checked" | 
-       grep -v "whichever comes first" >> $OUT 
+$MKE2FS -q -F -O resize_inode -o Linux -b 1024 -g 1024 $TMPFILE 65536 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 echo resize2fs test.img 16384 >> $OUT
-$RESIZE2FS $TMPFILE 16384 2>&1 | sed -e '1d' | \
-          sed -e "s;$TMPFILE;test.img;" >> $OUT
+$RESIZE2FS $TMPFILE 16384 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 rm -f $OUT.new
 
 $DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
@@ -61,18 +59,18 @@ $DEBUGFS -R "set_super_value mkfs_time 0" -w $TMPFILE >/dev/null 2>&1
 $TUNE2FS -c 20 -U clear $TMPFILE  >/dev/null 2>&1
 
 echo dumpe2fs test.img >> $OUT
-$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
 
 echo "--------------------------------" >> $OUT
 
 echo resize2fs test.img 165536 >> $OUT
-$RESIZE2FS $TMPFILE 165536 2>&1 | sed -e '1d' | \
-          sed -e "s;$TMPFILE;test.img;" >> $OUT
+$RESIZE2FS $TMPFILE 165536 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT
 
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT.new
-sed -e '1d' $OUT.new | sed -e '/^JFS DEBUG:/d'  | tr -d \\015 >> $OUT
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT.new >> $OUT
 rm -f $OUT.new
 
 $DEBUGFS -R "set_super_value lastcheck 0" -w $TMPFILE >/dev/null 2>&1
@@ -81,7 +79,7 @@ $DEBUGFS -R "set_super_value mkfs_time 0" -w $TMPFILE >/dev/null 2>&1
 $TUNE2FS -c 20 -U clear $TMPFILE  >/dev/null 2>&1
 
 echo dumpe2fs test.img >> $OUT
-$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs >> $OUT
+$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT
 
 rm -f $TMPFILE
 cmp -s $OUT $EXP
index ab623e8..5f28d92 100644 (file)
@@ -50,16 +50,14 @@ eval $PREP_CMD
 $FSCK $FSCK_OPT  -N test_filesys $TMPFILE > $OUT1.new 2>&1
 status=$?
 echo Exit status is $status >> $OUT1.new
-sed -e '1d' $OUT1.new | sed -e '/^JFS DEBUG:/d' | \
-           sed -e "s;$TMPFILE;test.img;" | tr -d \\015 >> $OUT1
+sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT1.new >> $OUT1
 rm -f $OUT1.new
 
 if [ "$ONE_PASS_ONLY" != "true" ]; then
        $FSCK $SECOND_FSCK_OPT -N test_filesys $TMPFILE > $OUT2.new 2>&1 
        status=$?
        echo Exit status is $status >> $OUT2.new
-       sed -e '1d' $OUT2.new | sed -e '/^JFS DEBUG:/d' | \
-           sed -e "s;$TMPFILE;test.img;" > $OUT2
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" $OUT2.new > $OUT2
        rm -f $OUT2.new
 fi
 
index f524996..82eca41 100644 (file)
@@ -11,8 +11,11 @@ MKE2FS_SKIP_PROGRESS=true
 MKE2FS_SKIP_CHECK_MSG=true
 export MKE2FS_SKIP_PROGRESS MKE2FS_SKIP_CHECK_MSG
 > $TMPFILE
-PREP_CMD='$MKE2FS -F -o Linux $MKE2FS_OPTS $TMPFILE $FS_SIZE 2>&1 | sed -e 1d | grep -v "Discarding device blocks" | tr -d \\015 > $OUT1 ; $DEBUGFS -R features $TMPFILE 2>&1 | sed -e 1d | tr -d \\015 >> $OUT1 ; echo " " >> $OUT1'
-AFTER_CMD='$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter_dumpe2fs | tr -d \\015 >> $OUT1'
+PREP_CMD='$MKE2FS -F -o Linux $MKE2FS_OPTS $TMPFILE $FS_SIZE 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" > $OUT1;
+       $DEBUGFS -R features $TMPFILE 2>&1 |
+       sed -f $cmd_dir/filter.sed -e "s;$TMPFILE;test.img;" >> $OUT1'
+AFTER_CMD='$DUMPE2FS $TMPFILE 2>&1 | sed -f $cmd_dir/filter.sed >> $OUT1'
 . $cmd_dir/run_e2fsck
 
 else #if test -x $DEBUGFS_EXE; then
diff --git a/tests/scripts/resize_test b/tests/scripts/resize_test
new file mode 100755 (executable)
index 0000000..964150e
--- /dev/null
@@ -0,0 +1,139 @@
+#!/bin/sh
+
+resize_test () {
+
+rm -f $TMPFILE
+touch $TMPFILE
+echo $MKE2FS $FEATURES -qF $TMPFILE $SIZE_1 > $LOG
+$MKE2FS $FEATURES -qF $TMPFILE $SIZE_1 >> $LOG
+
+OUT_TMP=$(mktemp -t csum-tmp.XXXXXX)
+
+date > $OUT_TMP
+cat $E2FSCK >> $OUT_TMP
+echo $CRCSUM $OUT_TMP >> $LOG 2>&1
+CSUM_1=$($CRCSUM $OUT_TMP)
+echo Checksum is $CSUM_1 >> $LOG
+
+echo Setting up file system >> $LOG
+$DEBUGFS -w $TMPFILE  >> $LOG 2>&1 << EOF
+mkdir test
+cd test
+write $OUT_TMP e2fsck
+ls /test
+stat /test/e2fsck
+quit
+EOF
+echo " " >> $LOG
+
+rm -f $OUT_TMP
+
+echo $FSCK -fy $TMPFILE >> $LOG 2>&1 
+$FSCK -fy $TMPFILE >> $LOG 2>&1 
+
+echo $RESIZE2FS $RESIZE2FS_OPTS -d 31 $TMPFILE $SIZE_2 >> $LOG 2>&1
+if ! $RESIZE2FS $RESIZE2FS_OPTS -d 31 $TMPFILE $SIZE_2 >> $LOG 2>&1
+then
+       return 1
+fi
+
+echo $FSCK -fp $TMPFILE >> $LOG 2>&1 
+if ! $FSCK -fp $TMPFILE >> $LOG 2>&1
+then
+       dumpe2fs $TMPFILE >> $LOG
+       return 1
+fi
+
+echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
+$DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
+
+echo $CRCSUM $OUT_TMP >> $LOG 2>&1
+CSUM_2=$($CRCSUM $OUT_TMP)
+echo Checksum is $CSUM_2 >> $LOG
+
+if test "$CSUM_1" != "$CSUM_2"
+then
+       return 1
+fi
+
+echo $RESIZE2FS $RESIZE2FS_OPTS -d 31 -M $TMPFILE $SIZE_2 >> $LOG 2>&1
+if ! $RESIZE2FS $RESIZE2FS_OPTS -d 31 -M $TMPFILE $SIZE_2 >> $LOG 2>&1
+then
+       return 1
+fi
+
+echo $FSCK -fp $TMPFILE >> $LOG 2>&1 
+if ! $FSCK -fp $TMPFILE >> $LOG 2>&1
+then
+       dumpe2fs $TMPFILE >> $LOG
+       return 1
+fi
+
+echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
+$DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
+
+echo $CRCSUM $OUT_TMP >> $LOG 2>&1
+CSUM_2=$($CRCSUM $OUT_TMP)
+echo Checksum is $CSUM_2 >> $LOG
+
+if test "$CSUM_1" != "$CSUM_2"
+then
+       return 1
+fi
+
+echo $RESIZE2FS $RESIZE2FS_OPTS -d 31 -M $TMPFILE $SIZE_2 >> $LOG 2>&1
+if ! $RESIZE2FS $RESIZE2FS_OPTS -d 31 -M $TMPFILE $SIZE_2 >> $LOG 2>&1
+then
+       return 1
+fi
+
+echo $FSCK -fp $TMPFILE >> $LOG 2>&1 
+if ! $FSCK -fp $TMPFILE >> $LOG 2>&1
+then
+       dumpe2fs $TMPFILE >> $LOG
+       return 1
+fi
+
+echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
+$DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
+
+echo $CRCSUM $OUT_TMP >> $LOG 2>&1
+CSUM_2=$($CRCSUM $OUT_TMP)
+echo Checksum is $CSUM_2 >> $LOG
+
+if test "$CSUM_1" != "$CSUM_2"
+then
+       return 1
+fi
+
+echo $RESIZE2FS $RESIZE2FS_OPTS -d 31 -M $TMPFILE $SIZE_2 >> $LOG 2>&1
+if ! $RESIZE2FS $RESIZE2FS_OPTS -d 31 -M $TMPFILE $SIZE_2 >> $LOG 2>&1
+then
+       return 1
+fi
+
+echo $FSCK -fp $TMPFILE >> $LOG 2>&1 
+if ! $FSCK -fp $TMPFILE >> $LOG 2>&1
+then
+       dumpe2fs $TMPFILE >> $LOG
+       return 1
+fi
+
+echo $DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
+$DEBUGFS -R "dump /test/e2fsck $OUT_TMP" $TMPFILE >> $LOG 2>&1
+
+echo $CRCSUM $OUT_TMP >> $LOG 2>&1
+CSUM_2=$($CRCSUM $OUT_TMP)
+echo Checksum is $CSUM_2 >> $LOG
+
+rm $OUT_TMP
+unset OUT_TMP
+
+if test "$CSUM_1" != "$CSUM_2"
+then
+       return 1
+fi
+
+return 0
+
+}
index 7c59766..6789656 100644 (file)
@@ -19,6 +19,7 @@ RESIZE2FS="$USE_VALGRIND $RESIZE2FS_EXE"
 E2UNDO_EXE="../misc/e2undo"
 TEST_REL=../tests/progs/test_rel
 TEST_ICOUNT=../tests/progs/test_icount
+CRCSUM=../tests/progs/crcsum
 LD_LIBRARY_PATH=../lib:../lib/ext2fs:../lib/e2p:../lib/et:../lib/ss
 DYLD_LIBRARY_PATH=../lib:../lib/ext2fs:../lib/e2p:../lib/et:../lib/ss
 export LD_LIBRARY_PATH
@@ -31,4 +32,7 @@ E2FSCK_CONFIG=/dev/null
 export E2FSCK_CONFIG
 MKE2FS_CONFIG=./mke2fs.conf
 export MKE2FS_CONFIG
-
+E2FSPROGS_SKIP_PROGRESS=yes
+export E2FSPROGS_SKIP_PROGRESS
+EXT2FS_NO_MTAB_OK=yes
+export EXT2FS_NO_MTAB_OK
index f3a632a..abb33f8 100644 (file)
@@ -8,7 +8,9 @@
 #endif
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef HAVE_MALLOC_H
 #include <malloc.h>
+#endif
 #include <string.h>
 #include <fcntl.h>
 #include <sys/param.h>
index 3bfff13..50d5879 100644 (file)
--- a/version.h
+++ b/version.h
@@ -7,5 +7,5 @@
  * file may be redistributed under the GNU Public License v2.
  */
 
-#define E2FSPROGS_VERSION "1.42.5"
-#define E2FSPROGS_DATE "29-Jul-2012"
+#define E2FSPROGS_VERSION "1.42.8"
+#define E2FSPROGS_DATE "20-Jun-2013"
index 646bbc3..807c628 100644 (file)
@@ -9,8 +9,8 @@ while (<>) {
     }
     next if (/^$/);    # skip blank lines
     $linelen = 0;
-    split;
-    while (defined($word = shift @_)) {
+    @words = split;
+    while (defined($word = shift @words)) {
        $word =~ s#\$\(srcdir\)/\.\./version.h#\$\(top_srcdir\)/version.h#;
        $word =~ s#\$\(srcdir\)/.\.\/\.\./version.h#\$\(top_srcdir\)/version.h#;
        $word =~ s#\$\(srcdir\)/.\.\/et/com_err.h#\$\(top_srcdir\)/lib/et/com_err.h#;